From fe27057d1765c1cc42023bff4fdd71ce190fe35d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 30 Sep 2002 10:26:59 +0000 Subject: * 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. --- sysdeps/unix/i386/sysdep.S | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'sysdeps/unix/i386') 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. */ -- cgit 1.4.1