diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-02-10 18:58:00 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-02-10 18:58:00 +0000 |
commit | 2cef4257d02ec72a6ca3bef6ce189fe002253bf6 (patch) | |
tree | 964da6844fa5c3216edeb2f2e259bc57ccf468ea /elf/tst-tls1.c | |
parent | a5176eabfb9cb8bc76b34dbce68c1ad3efbbc57e (diff) | |
download | glibc-2cef4257d02ec72a6ca3bef6ce189fe002253bf6.zip glibc-2cef4257d02ec72a6ca3bef6ce189fe002253bf6.tar.gz glibc-2cef4257d02ec72a6ca3bef6ce189fe002253bf6.tar.bz2 |
Update.
* elf/tst-tls1.c: Move TLS helper macros to...
* elf/tls-macros.h: ...here. New file.
* elf/tst-tls2.c: New file.
* elf/Makefile (tests): Add tst-tls2.
(distribute): Add tls-macros.h.
Diffstat (limited to 'elf/tst-tls1.c')
-rw-r--r-- | elf/tst-tls1.c | 61 |
1 files changed, 4 insertions, 57 deletions
diff --git a/elf/tst-tls1.c b/elf/tst-tls1.c index fc426b0..5e67482 100644 --- a/elf/tst-tls1.c +++ b/elf/tst-tls1.c @@ -2,12 +2,12 @@ #include <stdio.h> #include <tls.h> +#include "tls-macros.h" -/* XXX Until gcc gets told how to define and use thread-local - variables we will have to resort to use asms. */ -asm (".tls_common foo,4,4"); -asm (".tls_common bar,4,4"); +/* Two common 'int' variables in TLS. */ +COMMON_INT_DEF(foo); +COMMON_INT_DEF(bar); int @@ -17,59 +17,6 @@ main (void) int result = 0; int *ap, *bp; - /* XXX Each architecture must have its own asm for now. */ -# ifdef __i386__ -# define TLS_LE(x) \ - ({ int *__l; \ - asm ("movl %%gs:0,%0\n\t" \ - "subl $" #x "@tpoff,%0" \ - : "=r" (__l)); \ - __l; }) - -#define TLS_IE(x) \ - ({ int *__l, __b; \ - asm ("call 1f\n\t" \ - ".subsection 1\n" \ - "1:\tmovl (%%esp), %%ebx\n\t" \ - "ret\n\t" \ - ".previous\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \ - "movl %%gs:0,%0\n\t" \ - "subl " #x "@gottpoff(%%ebx),%0" \ - : "=r" (__l), "=&b" (__b)); \ - __l; }) - -#define TLS_LD(x) \ - ({ int *__l, __b; \ - asm ("call 1f\n\t" \ - ".subsection 1\n" \ - "1:\tmovl (%%esp), %%ebx\n\t" \ - "ret\n\t" \ - ".previous\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \ - "leal " #x "@tlsldm(%%ebx),%%eax\n\t" \ - "call ___tls_get_addr@plt\n\t" \ - "leal " #x "@dtpoff(%%eax), %%eax" \ - : "=a" (__l), "=&b" (__b)); \ - __l; }) - -#define TLS_GD(x) \ - ({ int *__l, __b; \ - asm ("call 1f\n\t" \ - ".subsection 1\n" \ - "1:\tmovl (%%esp), %%ebx\n\t" \ - "ret\n\t" \ - ".previous\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \ - "leal " #x "@tlsgd(%%ebx),%%eax\n\t" \ - "call ___tls_get_addr@plt\n\t" \ - "nop" \ - : "=a" (__l), "=&b" (__b)); \ - __l; }) - -# else -# error "No support for this architecture so far." -# endif /* Set the variable using the local exec model. */ puts ("set bar to 1 (LE)"); |