* 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.
This commit is contained in:
parent
cc590e1d4e
commit
28b48696d1
11
ChangeLog
11
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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user