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 static __inline void
_tcb_set(struct tcb *tcb) _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 * static __inline struct tcb *
_tcb_get(void) _tcb_get(void)
{ {
#ifdef ARM_TP_ADDRESS
return (*((struct tcb **)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; extern struct pthread *_thr_initial;