runtime: provide initcontext and fixcontext for NetBSD

From-SVN: r193173
This commit is contained in:
Ian Lance Taylor 2012-11-05 17:41:07 +00:00
parent ae0b23e2ff
commit 0be1a5898f

View File

@ -82,7 +82,7 @@ fixcontext(ucontext_t *c __attribute__ ((unused)))
{
}
# else
#else
# if defined(__x86_64__) && defined(__sun__)
@ -110,6 +110,28 @@ fixcontext(ucontext_t* c)
c->uc_mcontext.gregs[REG_FSBASE] = fs;
}
# elif defined(__NetBSD__)
// NetBSD has a bug: setcontext clobbers tlsbase, we need to save
// and restore it ourselves.
static __thread __greg_t tlsbase;
static inline void
initcontext(void)
{
ucontext_t c;
getcontext(&c);
tlsbase = c.uc_mcontext._mc_tlsbase;
}
static inline void
fixcontext(ucontext_t* c)
{
c->uc_mcontext._mc_tlsbase = tlsbase;
}
# else
# error unknown case for SETCONTEXT_CLOBBERS_TLS