diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2021-04-05 03:29:47 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2021-04-23 11:14:07 +0000 |
commit | 4959d4f3eaab7e592657032a0b42b34c5d5c174b (patch) | |
tree | 475c94e0974281b0190c0dd3ffcba6b104a5fbaa /lib | |
parent | 41331ef7f618e15732b84f960cc236e70e38e253 (diff) | |
download | src-4959d4f3eaab7e592657032a0b42b34c5d5c174b.tar.gz src-4959d4f3eaab7e592657032a0b42b34c5d5c174b.zip |
libc: implement __tls_get_addr() for static binaries
(cherry picked from commit ca46b5698e8ac38ab45d781d592700be59e7de97)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/gen/tls.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/libc/gen/tls.c b/lib/libc/gen/tls.c index 2a64b5266f4a..69b87aea52bf 100644 --- a/lib/libc/gen/tls.c +++ b/lib/libc/gen/tls.c @@ -103,25 +103,32 @@ static size_t libc_tls_init_align; static void *libc_tls_init; #endif +void * +__libc_tls_get_addr(void *vti) +{ + Elf_Addr **dtvp, *dtv; + tls_index *ti; + + dtvp = _get_tp(); + dtv = *dtvp; + ti = vti; + return ((char *)(dtv[ti->ti_module + 1] + ti->ti_offset) + + TLS_DTV_OFFSET); +} + #ifdef __i386__ /* GNU ABI */ __attribute__((__regparm__(1))) void * -___libc_tls_get_addr(void *ti __unused) +___libc_tls_get_addr(void *vti) { - return (0); + return (__libc_tls_get_addr(vti)); } #endif -void * -__libc_tls_get_addr(void *ti __unused) -{ - return (0); -} - #ifndef PIC static void * |