From 28b48696d14a8b4a4203011b26d8add3db087870 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 29 Sep 2002 21:50:55 +0000 Subject: * 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. --- sysdeps/unix/x86_64/sysdep.S | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'sysdeps/unix/x86_64') diff --git a/sysdeps/unix/x86_64/sysdep.S b/sysdeps/unix/x86_64/sysdep.S index b26b1db..a54c151 100644 --- a/sysdeps/unix/x86_64/sysdep.S +++ b/sysdeps/unix/x86_64/sysdep.S @@ -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 #include #include +#include .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 -- cgit v1.1