mirror of
https://git.musl-libc.org/git/musl
synced 2025-02-09 06:44:22 +03:00
![Rich Felker](/assets/img/avatar_default.png)
this will allow the compiler to cache and reuse the result, meaning we no longer have to take care not to load it more than once for the sake of archs where the load may be expensive. depends on commit 1c84c99913bf1cd47b866ed31e665848a0da84a2 for correctness, since otherwise the compiler could hoist loads during stage 3 of dynamic linking before the initial thread-pointer setup.
19 lines
472 B
C
19 lines
472 B
C
static inline struct pthread *__pthread_self()
|
|
{
|
|
register char *tp __asm__("r2");
|
|
__asm__ ("" : "=r" (tp) );
|
|
return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
|
|
}
|
|
|
|
#define TLS_ABOVE_TP
|
|
#define GAP_ABOVE_TP 0
|
|
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
|
|
|
|
#define DTP_OFFSET 0x8000
|
|
|
|
// the kernel calls the ip "nip", it's the first saved value after the 32
|
|
// GPRs.
|
|
#define MC_PC gregs[32]
|
|
|
|
#define CANARY canary_at_end
|