diff options
author | Roland McGrath <roland@gnu.org> | 2002-09-30 10:26:59 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-09-30 10:26:59 +0000 |
commit | fe27057d1765c1cc42023bff4fdd71ce190fe35d (patch) | |
tree | 47c1bbef63f27eed1335f6744414d6a2af2b8a2b /sysdeps/unix/i386 | |
parent | 7de490c6863aa4bb81d3a1cb4a0a35028aeee260 (diff) | |
download | glibc-fe27057d1765c1cc42023bff4fdd71ce190fe35d.tar glibc-fe27057d1765c1cc42023bff4fdd71ce190fe35d.tar.gz glibc-fe27057d1765c1cc42023bff4fdd71ce190fe35d.tar.bz2 glibc-fe27057d1765c1cc42023bff4fdd71ce190fe35d.zip |
* elf/tls-macros.h (TLS_LD, TLS_GD): Use call insn, not callq.
* sysdeps/unix/x86_64/sysdep.S [USE_TLS && HAVE___THREAD] [! PIC]:
Use direct-%fs form of TLS access for errno.
* sysdeps/unix/sysv/linux/i386/i686/sysdep.h: File removed, since
the i386 version has all the same asm now.
* sysdeps/i386/elf/configure.in: Add @GOTNTPOFF and @NTPOFF uses to
the TLS support check.
* sysdeps/i386/elf/configure: Regenerated.
* sysdeps/unix/sysv/linux/i386/sysdep.h [USE_TLS && HAVE___THREAD]
(SYSCALL_ERROR_HANDLER): Use direct-%gs form of TLS access for errno.
* sysdeps/unix/i386/sysdep.S (syscall_error)
[USE_TLS && HAVE___THREAD]: Use TLS access for errno.
Diffstat (limited to 'sysdeps/unix/i386')
-rw-r--r-- | sysdeps/unix/i386/sysdep.S | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sysdeps/unix/i386/sysdep.S b/sysdeps/unix/i386/sysdep.S index d1bd102708..294865877f 100644 --- a/sysdeps/unix/i386/sysdep.S +++ b/sysdeps/unix/i386/sysdep.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 2000, 2002 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -41,7 +42,9 @@ syscall_error: notb: #endif #ifndef PIC -# ifndef _LIBC_REENTRANT +# if USE_TLS && HAVE___THREAD + movl %eax, %gs:C_SYMBOL_NAME(errno@NTPOFF) +# elif !defined _LIBC_REENTRANT movl %eax, C_SYMBOL_NAME(errno) # else pushl %eax @@ -54,7 +57,13 @@ notb: #else /* The caller has pushed %ebx and then set it up to point to the GOT before calling us through the PLT. */ -# ifndef _LIBC_REENTRANT +# if USE_TLS && HAVE___THREAD + movl C_SYMBOL_NAME(errno@GOTNTPOFF)(%ebx), %ecx + + /* Pop %ebx value saved before jumping here. */ + popl %ebx + movl %eax, %gs:0(%ecx) +# elif !defined _LIBC_REENTRANT movl C_SYMBOL_NAME(errno@GOT)(%ebx), %ecx /* Pop %ebx value saved before jumping here. */ |