Merging of projects/armv6, part 2

Handle TLS for ARMv6 and ARMv7
This commit is contained in:
gonzo 2012-08-15 03:08:29 +00:00
parent 2187caf32a
commit 0761ed2535

View File

@ -57,7 +57,11 @@ void _tcb_dtor(struct tcb *);
static __inline void
_tcb_set(struct tcb *tcb)
{
*((struct tcb **)ARM_TP_ADDRESS) = tcb;
#ifdef ARM_TP_ADDRESS
*((struct tcb **)ARM_TP_ADDRESS) = tcb; /* avoids a system call */
#else
sysarch(ARM_SET_TP, tcb);
#endif
}
/*
@ -66,7 +70,15 @@ _tcb_set(struct tcb *tcb)
static __inline struct tcb *
_tcb_get(void)
{
#ifdef ARM_TP_ADDRESS
return (*((struct tcb **)ARM_TP_ADDRESS));
#else
struct tcb *tcb;
__asm __volatile("mrc p15, 0, %0, c13, c0, 3" \
: "=r" (tcb));
return (tcb);
#endif
}
extern struct pthread *_thr_initial;