Skip to content

Commit

Permalink
Get deathstar demo working again on metal
Browse files Browse the repository at this point in the history
  • Loading branch information
jart committed Jul 4, 2024
1 parent 15ea052 commit bd6d9ff
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 17 deletions.
6 changes: 3 additions & 3 deletions libc/calls/ucontext.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ int __tailcontext(const ucontext_t *);
* @see getcontext()
*/
int setcontext(const ucontext_t *uc) {
if (IsWindows()) {
if (IsWindows() || IsMetal()) {
atomic_store_explicit(&__get_tls()->tib_sigmask, uc->uc_sigmask,
memory_order_release);
} else {
Expand All @@ -44,7 +44,7 @@ int setcontext(const ucontext_t *uc) {
}

int __getcontextsig(ucontext_t *uc) {
if (IsWindows()) {
if (IsWindows() || IsMetal()) {
uc->uc_sigmask =
atomic_load_explicit(&__get_tls()->tib_sigmask, memory_order_acquire);
return 0;
Expand All @@ -54,7 +54,7 @@ int __getcontextsig(ucontext_t *uc) {
}

int __swapcontextsig(ucontext_t *x, const ucontext_t *y) {
if (IsWindows()) {
if (IsWindows() || IsMetal()) {
x->uc_sigmask = atomic_exchange_explicit(
&__get_tls()->tib_sigmask, y->uc_sigmask, memory_order_acquire);
return 0;
Expand Down
8 changes: 4 additions & 4 deletions libc/intrin/mman.greg.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
#ifdef __x86_64__

#define INVERT(x) (BANE + PHYSICAL((uintptr_t)(x)))
#define NOPAGE ((uint64_t) - 1)
#define NOPAGE ((uint64_t)-1)

#define APE_STACK_VADDR \
({ \
Expand All @@ -69,9 +69,9 @@ texthead uint64_t __new_page(struct mman *mm) {
if (p != NOPAGE) {
uint64_t q;
struct ReclaimedPage *rp = (struct ReclaimedPage *)(BANE + p);
unassert(p == (p & PAGE_TA));
/* unassert(p == (p & PAGE_TA)); */
q = rp->next;
unassert(q == (q & PAGE_TA) || q == NOPAGE);
/* unassert(q == (q & PAGE_TA) || q == NOPAGE); */
mm->frp = q;
return p;
}
Expand Down Expand Up @@ -200,7 +200,7 @@ void __ref_pages(struct mman *mm, uint64_t *pml4t, uint64_t ps, uint64_t size) {
*/
static void __reclaim_page(struct mman *mm, uint64_t p) {
struct ReclaimedPage *rp = (struct ReclaimedPage *)(BANE + p);
unassert(p == (p & PAGE_TA));
/* unassert(p == (p & PAGE_TA)); */
rp->next = mm->frp;
mm->frp = p;
}
Expand Down
1 change: 0 additions & 1 deletion libc/intrin/pthread_mutex_lock.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "libc/runtime/internal.h"
#include "libc/thread/lock.h"
#include "libc/thread/thread.h"
#include "libc/thread/tls.h"
#include "third_party/nsync/mu.h"

/**
Expand Down
19 changes: 12 additions & 7 deletions libc/intrin/sig.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@
struct Signals __sig;

sigset_t __sig_block(void) {
if (IsWindows()) {
return atomic_exchange_explicit(&__get_tls()->tib_sigmask, -1,
memory_order_acquire);
if (IsWindows() || IsMetal()) {
if (__tls_enabled)
return atomic_exchange_explicit(&__get_tls()->tib_sigmask, -1,
memory_order_acquire);
else
return 0;
} else {
sigset_t res, neu = -1;
sys_sigprocmask(SIG_SETMASK, &neu, &res);
Expand All @@ -38,10 +41,12 @@ sigset_t __sig_block(void) {
}

void __sig_unblock(sigset_t m) {
if (IsWindows()) {
atomic_store_explicit(&__get_tls()->tib_sigmask, m, memory_order_release);
if (_weaken(__sig_check)) {
_weaken(__sig_check)();
if (IsWindows() || IsMetal()) {
if (__tls_enabled) {
atomic_store_explicit(&__get_tls()->tib_sigmask, m, memory_order_release);
if (_weaken(__sig_check)) {
_weaken(__sig_check)();
}
}
} else {
sys_sigprocmask(SIG_SETMASK, &m, 0);
Expand Down
2 changes: 1 addition & 1 deletion libc/runtime/set_tls.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ dontinstrument textstartup void __set_tls(struct CosmoTib *tib) {
uint64_t val = (uint64_t)tib;
asm volatile("wrmsr"
: /* no outputs */
: "c"(MSR_IA32_FS_BASE), "a"((uint32_t)val),
: "c"(MSR_IA32_GS_BASE), "a"((uint32_t)val),
"d"((uint32_t)(val >> 32)));
}
#elif defined(__aarch64__)
Expand Down
2 changes: 1 addition & 1 deletion libc/thread/pthread_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ static int PosixThread(void *arg, int tid) {
// set long jump handler so pthread_exit can bring control back here
if (!setjmp(pt->pt_exiter)) {
sigdelset(&pt->pt_attr.__sigmask, SIGTHR);
if (IsWindows()) {
if (IsWindows() || IsMetal()) {
atomic_store_explicit(&__get_tls()->tib_sigmask, pt->pt_attr.__sigmask,
memory_order_release);
} else {
Expand Down

0 comments on commit bd6d9ff

Please sign in to comment.