mirror of https://git.musl-libc.org/git/musl
Browse Source
the adjustment made is entirely a function of TLS_ABOVE_TP and TP_OFFSET. aside from avoiding repetition of the TP_OFFSET value and arithmetic, this change makes pthread_arch.h independent of the definition of struct __pthread from pthread_impl.h. this in turn will allow inclusion of pthread_arch.h to be moved to the top of pthread_impl.h so that it can influence the definition of the structure. previously, arch files were very inconsistent about the type used for the thread pointer. this change unifies the new __get_tp interface to always use uintptr_t, which is the most correct when performing arithmetic that may involve addresses outside the actual pointed-to object (due to TP_OFFSET).master
17 changed files with 65 additions and 65 deletions
@ -1,8 +1,8 @@ |
|||
static inline struct pthread *__pthread_self() |
|||
static inline uintptr_t __get_tp() |
|||
{ |
|||
struct pthread *self; |
|||
__asm__ ("movl %%gs:0,%0" : "=r" (self) ); |
|||
return self; |
|||
uintptr_t tp; |
|||
__asm__ ("movl %%gs:0,%0" : "=r" (tp) ); |
|||
return tp; |
|||
} |
|||
|
|||
#define MC_PC gregs[REG_EIP] |
|||
|
|||
@ -1,8 +1,8 @@ |
|||
static inline struct pthread *__pthread_self() |
|||
static inline uintptr_t __get_tp() |
|||
{ |
|||
struct pthread *self; |
|||
__asm__ ("ori %0, r21, 0" : "=r" (self) ); |
|||
return self; |
|||
uintptr_t tp; |
|||
__asm__ ("ori %0, r21, 0" : "=r" (tp) ); |
|||
return tp; |
|||
} |
|||
|
|||
#define MC_PC regs.pc |
|||
|
|||
@ -1,12 +1,12 @@ |
|||
static inline struct pthread *__pthread_self() |
|||
static inline uintptr_t __get_tp() |
|||
{ |
|||
struct pthread *self; |
|||
uintptr_t tp; |
|||
__asm__ ( |
|||
"ear %0, %%a0\n" |
|||
"sllg %0, %0, 32\n" |
|||
"ear %0, %%a1\n" |
|||
: "=r"(self)); |
|||
return self; |
|||
: "=r"(tp)); |
|||
return tp; |
|||
} |
|||
|
|||
#define MC_PC psw.addr |
|||
|
|||
@ -1,8 +1,8 @@ |
|||
static inline struct pthread *__pthread_self() |
|||
static inline uintptr_t __get_tp() |
|||
{ |
|||
struct pthread *self; |
|||
__asm__ ("mov %%fs:0,%0" : "=r" (self) ); |
|||
return self; |
|||
uintptr_t tp; |
|||
__asm__ ("mov %%fs:0,%0" : "=r" (tp) ); |
|||
return tp; |
|||
} |
|||
|
|||
#define MC_PC gregs[REG_RIP] |
|||
|
|||
Loading…
Reference in new issue