From 2cef4257d02ec72a6ca3bef6ce189fe002253bf6 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 10 Feb 2002 18:58:00 +0000 Subject: 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. --- elf/tst-tls1.c | 61 ++++------------------------------------------------------ 1 file changed, 4 insertions(+), 57 deletions(-) (limited to 'elf/tst-tls1.c') 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 #include +#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)"); -- cgit v1.1