Skip to content

Commit

Permalink
* sysdeps/unix/sysv/linux/x86_64/sysdep.S [USE_TLS && HAVE___THREAD]:
Browse files Browse the repository at this point in the history
	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.
  • Loading branch information
Roland McGrath committed Sep 29, 2002
1 parent cc590e1 commit 28b4869
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
11 changes: 11 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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
Expand Down
16 changes: 10 additions & 6 deletions sysdeps/unix/x86_64/sysdep.S
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 28b4869

Please sign in to comment.