]> sourceware.org Git - glibc.git/commitdiff
* sysdeps/unix/sysv/linux/x86_64/sysdep.S [USE_TLS && HAVE___THREAD]:
authorRoland McGrath <roland@gnu.org>
Sun, 29 Sep 2002 21:50:55 +0000 (21:50 +0000)
committerRoland McGrath <roland@gnu.org>
Sun, 29 Sep 2002 21:50:55 +0000 (21:50 +0000)
Define errno in .tbss.
* sysdeps/unix/x86_64/sysdep.S [USE_TLS && HAVE___THREAD]: Use TLS
access for setting errno.

* sysdeps/unix/x86_64/sysdep.S: Store 32 bits at errno, not 64 bits.
AFAICT, it was just blind luck that the word following errno in .bss
was just alignment padding and not some other variable to be clobbered.

ChangeLog
sysdeps/unix/x86_64/sysdep.S

index d6dde1f8f5b4284dd21db18385e7ea48c007a3e8..75a632710ab31b850b0a347aa8c0febe84ab36d1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2002-09-29  Roland McGrath  <roland@redhat.com>
+
+       * sysdeps/unix/sysv/linux/x86_64/sysdep.S [USE_TLS && HAVE___THREAD]:
+       Define errno in .tbss.
+       * sysdeps/unix/x86_64/sysdep.S [USE_TLS && HAVE___THREAD]: Use TLS
+       access for setting errno.
+
+       * sysdeps/unix/x86_64/sysdep.S: Store 32 bits at errno, not 64 bits.
+       AFAICT, it was just blind luck that the word following errno in .bss
+       was just alignment padding and not some other variable to be clobbered.
+
 2002-09-29  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/kernel-features.h
index b26b1db9347ef7023ea5c3ecf70669087148167d..a54c15101393ef0c02987aa12fa56498c0f28214 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 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
@@ -21,6 +21,7 @@
 #include <bits/errno.h>
 #include <bp-asm.h>
 #include <bp-sym.h>
+#include <tls.h>
 
 .globl C_SYMBOL_NAME(errno)
 .globl syscall_error
@@ -40,28 +41,31 @@ syscall_error:
        movq $EAGAIN, %rax      /* Yes; translate it to EAGAIN.  */
 notb:
 #endif
-#ifndef        PIC
+#if USE_TLS && HAVE___THREAD
+       movq C_SYMBOL_NAME(errno)@GOTTPOFF(%rip), %rcx
+       movl %eax, %fs:0(%rcx)
+#elif !defined PIC
 # ifndef _LIBC_REENTRANT
-       movq %rax, C_SYMBOL_NAME(errno)
+       movl %eax, C_SYMBOL_NAME(errno)
 # else
        pushq %rax
        PUSH_ERRNO_LOCATION_RETURN
        call BP_SYM (__errno_location)
        POP_ERRNO_LOCATION_RETURN
        popq %rcx
-       movq %rcx, (%rax)
+       movl %ecx, (%rax)
 # endif
 #else
 # ifndef _LIBC_REENTRANT
        movq C_SYMBOL_NAME(errno)@GOTPCREL(%rip), %rcx
-       movq %rax, (%rcx)
+       movl %eax, (%rcx)
 # else
        pushq %rax
        PUSH_ERRNO_LOCATION_RETURN
        call C_SYMBOL_NAME (BP_SYM (__errno_location)@PLT)
        POP_ERRNO_LOCATION_RETURN
        popq %rcx
-       movq %rcx, (%rax)
+       movl %ecx, (%rax)
 # endif
 #endif
        movq $-1, %rax
This page took 0.047568 seconds and 5 git commands to generate.