diff options
Diffstat (limited to 'libpthread/nptl/sysdeps')
15 files changed, 14 insertions, 442 deletions
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in index dd456a19e..faa8ea5a6 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in @@ -61,7 +61,8 @@ libpthread_CSRC := $(filter-out $(SH_PTHREAD_SPECIFIC),$(libpthread_CSRC))  endif  ifeq ($(TARGET_ARCH),i386) -X86_PTHREAD_SPECIFIC := sem_post.c sem_wait.c sem_timedwait.c sem_trywait.c +X86_PTHREAD_SPECIFIC := sem_post.c sem_wait.c sem_timedwait.c sem_trywait.c \ +	lowlevelrobustlock.c  libpthread_CSRC := $(filter-out $(X86_PTHREAD_SPECIFIC),$(libpthread_CSRC))  endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S index 61255a0af..aff01e907 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S @@ -21,6 +21,7 @@  #include <pthread-errnos.h>  #include <bits/kernel-features.h>  #include <lowlevellock.h> +#include <tcb-offsets.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S index 596763444..1d038001c 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S @@ -22,6 +22,7 @@  #include <lowlevellock.h>  #include <lowlevelrobustlock.h>  #include <bits/kernel-features.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S index 669b96a95..0413cc13b 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S @@ -23,6 +23,7 @@  #include <bits/kernel-features.h>  #include <pthread-pi-defines.h>  #include <pthread-errnos.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S index 54e80d059..2f3c9bc35 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S @@ -23,6 +23,7 @@  #include <bits/kernel-features.h>  #include <pthread-pi-defines.h>  #include <pthread-errnos.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S index d181393e6..6205a60ef 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S @@ -22,6 +22,7 @@  #include <lowlevelrwlock.h>  #include <pthread-errnos.h>  #include <bits/kernel-features.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S index 1ffdf33fe..be4530e13 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S @@ -22,6 +22,7 @@  #include <lowlevelrwlock.h>  #include <pthread-errnos.h>  #include <bits/kernel-features.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S index 5826f02e6..61431ab71 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S @@ -22,6 +22,7 @@  #include <lowlevelrwlock.h>  #include <pthread-errnos.h>  #include <bits/kernel-features.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S index 0130261c7..426ffdcd7 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S @@ -21,6 +21,7 @@  #include <lowlevellock.h>  #include <lowlevelrwlock.h>  #include <bits/kernel-features.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S index f69c49b15..0414ba060 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S @@ -22,6 +22,7 @@  #include <lowlevelrwlock.h>  #include <pthread-errnos.h>  #include <bits/kernel-features.h> +#include <tls.h>  	.text diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h deleted file mode 100644 index 6557359b4..000000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h +++ /dev/null @@ -1,105 +0,0 @@ -/* Uncancelable versions of cancelable interfaces.  Linux/NPTL version. -   Copyright (C) 2003, 2006 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 of the License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, write to the Free -   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -   02111-1307 USA.  */ - -#include <sysdep.h> - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt -extern int __open_nocancel (const char *, int, ...) attribute_hidden; -extern int __close_nocancel (int) attribute_hidden; -extern int __read_nocancel (int, void *, size_t) attribute_hidden; -extern int __write_nocancel (int, const void *, size_t) attribute_hidden; -extern pid_t __waitpid_nocancel (pid_t, int *, int) attribute_hidden; -extern int __openat_nocancel (int fd, const char *fname, int oflag, -				mode_t mode) attribute_hidden; -extern int __openat64_nocancel (int fd, const char *fname, int oflag, -				  mode_t mode) attribute_hidden; -#else -# define __open_nocancel(name, ...) __open (name, __VA_ARGS__) -# define __close_nocancel(fd) __close (fd) -# define __read_nocancel(fd, buf, len) __read (fd, buf, len) -# define __write_nocancel(fd, buf, len) __write (fd, buf, len) -# define __waitpid_nocancel(pid, stat_loc, options) \ -  __waitpid (pid, stat_loc, options) -# define __openat_nocancel(fd, fname, oflag, mode) \ -  openat (fd, fname, oflag, mode) -# define __openat64_nocancel(fd, fname, oflag, mode) \ -  openat64 (fd, fname, oflag, mode) -#endif - -/* Uncancelable open.  */ -#define open_not_cancel(name, flags, mode) \ -   __open_nocancel (name, flags, mode) -#define open_not_cancel_2(name, flags) \ -   __open_nocancel (name, flags) - -/* Uncancelable openat.  */ -#define openat_not_cancel(fd, fname, oflag, mode) \ -  __openat_nocancel (fd, fname, oflag, mode) -#define openat_not_cancel_3(fd, fname, oflag) \ -  __openat_nocancel (fd, fname, oflag, 0) -#define openat64_not_cancel(fd, fname, oflag, mode) \ -  __openat64_nocancel (fd, fname, oflag, mode) -#define openat64_not_cancel_3(fd, fname, oflag) \ -  __openat64_nocancel (fd, fname, oflag, 0) - -/* Uncancelable close.  */ -#define close_not_cancel(fd) \ -  __close_nocancel (fd) -#define close_not_cancel_no_status(fd) \ -  (void) ({ INTERNAL_SYSCALL_DECL (err);				      \ -	    INTERNAL_SYSCALL (close, err, 1, (fd)); }) - -/* Uncancelable read.  */ -#define read_not_cancel(fd, buf, n) \ -  __read_nocancel (fd, buf, n) - -/* Uncancelable write.  */ -#define write_not_cancel(fd, buf, n) \ -  __write_nocancel (fd, buf, n) - -/* Uncancelable writev.  */ -#define writev_not_cancel_no_status(fd, iov, n) \ -  (void) ({ INTERNAL_SYSCALL_DECL (err);				      \ -	    INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); }) - -/* Uncancelable fcntl.  */ -#define fcntl_not_cancel(fd, cmd, val) \ -  __fcntl_nocancel (fd, cmd, val) - -/* Uncancelable waitpid.  */ -#ifdef __NR_waitpid -# define waitpid_not_cancel(pid, stat_loc, options) \ -  __waitpid_nocancel (pid, stat_loc, options) -#else -# define waitpid_not_cancel(pid, stat_loc, options) \ -  INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL) -#endif - -/* Uncancelable pause.  */ -#define pause_not_cancel() \ -  __pause_nocancel () - -/* Uncancelable nanosleep.  */ -#define nanosleep_not_cancel(requested_time, remaining) \ -  __nanosleep_nocancel (requested_time, remaining) - -/* Uncancelable sigsuspend.  */ -#define sigsuspend_not_cancel(set) \ -  __sigsuspend_nocancel (set) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S index 9a3b36303..409df15f8 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S @@ -21,6 +21,7 @@  #include <sysdep.h>  #include <bits/kernel-features.h>  #include <lowlevellock.h> +#include <tls.h>  	.comm	__fork_generation, 4, 4 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep.h b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep.h deleted file mode 100644 index 674d5c699..000000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep.h +++ /dev/null @@ -1,336 +0,0 @@ -/* Copyright (C) 1992,1993,1995-2000,2002-2006,2007 -	Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Ulrich Drepper, <drepper@gnu.org>, August 1995. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 of the License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, write to the Free -   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -   02111-1307 USA.  */ - -#ifndef _LINUX_I386_SYSDEP_H -#define _LINUX_I386_SYSDEP_H 1 - -#include <sys/syscall.h> -#include <sysdeps/i386/sysdep.h> - -#ifndef offsetof -# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) -#endif - -/* For Linux we can use the system call table in the header file -	/usr/include/asm/unistd.h -   of the kernel.  But these symbols do not follow the SYS_* syntax -   so we have to redefine the `SYS_ify' macro here.  */ -#undef SYS_ify -#define SYS_ify(syscall_name)	__NR_##syscall_name - -#if defined USE_DL_SYSINFO \ -    && (!defined NOT_IN_libc || defined IS_IN_libpthread) -# define I386_USE_SYSENTER	1 -#else -# undef I386_USE_SYSENTER -#endif - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, -   unlike most Unices, which use the condition codes' carry flag. - -   Since version 2.1 the return value of a system call might be -   negative even if the call succeeded.  E.g., the `lseek' system call -   might return a large offset.  Therefore we must not anymore test -   for < 0, but test for a real error by making sure the value in %eax -   is a real error number.  Linus said he will make sure the no syscall -   returns a value in -1 .. -4095 as a valid result so we can savely -   test with -4095.  */ - -/* We don't want the label for the error handle to be global when we define -   it here.  */ -#ifdef __PIC__ -# define SYSCALL_ERROR_LABEL 0f -#else -# define SYSCALL_ERROR_LABEL syscall_error -#endif - -#undef	PSEUDO -#define	PSEUDO(name, syscall_name, args)				      \ -  .text;								      \ -  ENTRY (name)								      \ -    DO_CALL (syscall_name, args);					      \ -    cmpl $-4095, %eax;							      \ -    jae SYSCALL_ERROR_LABEL;						      \ -  L(pseudo_end): - -#undef	PSEUDO_END -#define	PSEUDO_END(name)						      \ -  SYSCALL_ERROR_HANDLER							      \ -  END (name) - -#undef	PSEUDO_NOERRNO -#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \ -  .text;								      \ -  ENTRY (name)								      \ -    DO_CALL (syscall_name, args) - -#undef	PSEUDO_END_NOERRNO -#define	PSEUDO_END_NOERRNO(name)					      \ -  END (name) - -#define ret_NOERRNO ret - -/* The function has to return the error code.  */ -#undef	PSEUDO_ERRVAL -#define	PSEUDO_ERRVAL(name, syscall_name, args) \ -  .text;								      \ -  ENTRY (name)								      \ -    DO_CALL (syscall_name, args);					      \ -    negl %eax - -#undef	PSEUDO_END_ERRVAL -#define	PSEUDO_END_ERRVAL(name) \ -  END (name) - -#define ret_ERRVAL ret - -#ifndef __PIC__ -# define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */ -#else - -# ifdef RTLD_PRIVATE_ERRNO -#  define SYSCALL_ERROR_HANDLER						      \ -0:SETUP_PIC_REG(cx);							      \ -  addl $_GLOBAL_OFFSET_TABLE_, %ecx;					      \ -  xorl %edx, %edx;							      \ -  subl %eax, %edx;							      \ -  movl %edx, rtld_errno@GOTOFF(%ecx);					      \ -  orl $-1, %eax;							      \ -  jmp L(pseudo_end); - -# elif defined _LIBC_REENTRANT - -#  if USE___THREAD -#   ifndef NOT_IN_libc -#    define SYSCALL_ERROR_ERRNO __libc_errno -#   else -#    define SYSCALL_ERROR_ERRNO errno -#   endif -#   define SYSCALL_ERROR_HANDLER					      \ -0:SETUP_PIC_REG (cx);							      \ -  addl $_GLOBAL_OFFSET_TABLE_, %ecx;					      \ -  movl SYSCALL_ERROR_ERRNO@GOTNTPOFF(%ecx), %ecx;			      \ -  xorl %edx, %edx;							      \ -  subl %eax, %edx;							      \ -  SYSCALL_ERROR_HANDLER_TLS_STORE (%edx, %ecx);				      \ -  orl $-1, %eax;							      \ -  jmp L(pseudo_end); -#   ifndef NO_TLS_DIRECT_SEG_REFS -#    define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff)		      \ -  movl src, %gs:(destoff) -#   else -#    define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff)		      \ -  addl %gs:0, destoff;							      \ -  movl src, (destoff) -#   endif -#  else -#   define SYSCALL_ERROR_HANDLER					      \ -0:pushl %ebx;								      \ -  cfi_adjust_cfa_offset (4);						      \ -  cfi_rel_offset (ebx, 0);						      \ -  SETUP_PIC_REG (bx);							      \ -  addl $_GLOBAL_OFFSET_TABLE_, %ebx;					      \ -  xorl %edx, %edx;							      \ -  subl %eax, %edx;							      \ -  pushl %edx;								      \ -  cfi_adjust_cfa_offset (4);						      \ -  call __errno_location@PLT;					              \ -  popl %ecx;								      \ -  cfi_adjust_cfa_offset (-4);						      \ -  popl %ebx;								      \ -  cfi_adjust_cfa_offset (-4);						      \ -  cfi_restore (ebx);							      \ -  movl %ecx, (%eax);							      \ -  orl $-1, %eax;							      \ -  jmp L(pseudo_end); -/* A quick note: it is assumed that the call to `__errno_location' does -   not modify the stack!  */ -#  endif -# else -/* Store (- %eax) into errno through the GOT.  */ -#  define SYSCALL_ERROR_HANDLER						      \ -0:SETUP_PIC_REG(cx);							      \ -  addl $_GLOBAL_OFFSET_TABLE_, %ecx;					      \ -  xorl %edx, %edx;							      \ -  subl %eax, %edx;							      \ -  movl errno@GOT(%ecx), %ecx;						      \ -  movl %edx, (%ecx);							      \ -  orl $-1, %eax;							      \ -  jmp L(pseudo_end); -# endif	/* _LIBC_REENTRANT */ -#endif	/* __PIC__ */ - - -/* The original calling convention for system calls on Linux/i386 is -   to use int $0x80.  */ -#ifdef I386_USE_SYSENTER -# ifdef SHARED -#  define ENTER_KERNEL call *%gs:SYSINFO_OFFSET -# else -#  define ENTER_KERNEL call *_dl_sysinfo -# endif -#else -# define ENTER_KERNEL int $0x80 -#endif - -/* Linux takes system call arguments in registers: - -	syscall number	%eax	     call-clobbered -	arg 1		%ebx	     call-saved -	arg 2		%ecx	     call-clobbered -	arg 3		%edx	     call-clobbered -	arg 4		%esi	     call-saved -	arg 5		%edi	     call-saved -	arg 6		%ebp	     call-saved - -   The stack layout upon entering the function is: - -	24(%esp)	Arg# 6 -	20(%esp)	Arg# 5 -	16(%esp)	Arg# 4 -	12(%esp)	Arg# 3 -	 8(%esp)	Arg# 2 -	 4(%esp)	Arg# 1 -	  (%esp)	Return address - -   (Of course a function with say 3 arguments does not have entries for -   arguments 4, 5, and 6.) - -   The following code tries hard to be optimal.  A general assumption -   (which is true according to the data books I have) is that - -	2 * xchg	is more expensive than	pushl + movl + popl - -   Beside this a neat trick is used.  The calling conventions for Linux -   tell that among the registers used for parameters %ecx and %edx need -   not be saved.  Beside this we may clobber this registers even when -   they are not used for parameter passing. - -   As a result one can see below that we save the content of the %ebx -   register in the %edx register when we have less than 3 arguments -   (2 * movl is less expensive than pushl + popl). - -   Second unlike for the other registers we don't save the content of -   %ecx and %edx when we have more than 1 and 2 registers resp. - -   The code below might look a bit long but we have to take care for -   the pipelined processors (i586).  Here the `pushl' and `popl' -   instructions are marked as NP (not pairable) but the exception is -   two consecutive of these instruction.  This gives no penalty on -   other processors though.  */ - -#undef	DO_CALL -#define DO_CALL(syscall_name, args)			      		      \ -    PUSHARGS_##args							      \ -    DOARGS_##args							      \ -    movl $SYS_ify (syscall_name), %eax;					      \ -    ENTER_KERNEL							      \ -    POPARGS_##args - -#define PUSHARGS_0	/* No arguments to push.  */ -#define	DOARGS_0	/* No arguments to frob.  */ -#define	POPARGS_0	/* No arguments to pop.  */ -#define	_PUSHARGS_0	/* No arguments to push.  */ -#define _DOARGS_0(n)	/* No arguments to frob.  */ -#define	_POPARGS_0	/* No arguments to pop.  */ - -#define PUSHARGS_1	movl %ebx, %edx; L(SAVEBX1): PUSHARGS_0 -#define	DOARGS_1	_DOARGS_1 (4) -#define	POPARGS_1	POPARGS_0; movl %edx, %ebx; L(RESTBX1): -#define	_PUSHARGS_1	pushl %ebx; cfi_adjust_cfa_offset (4); \ -			cfi_rel_offset (ebx, 0); L(PUSHBX1): _PUSHARGS_0 -#define _DOARGS_1(n)	movl n(%esp), %ebx; _DOARGS_0(n-4) -#define	_POPARGS_1	_POPARGS_0; popl %ebx; cfi_adjust_cfa_offset (-4); \ -			cfi_restore (ebx); L(POPBX1): - -#define PUSHARGS_2	PUSHARGS_1 -#define	DOARGS_2	_DOARGS_2 (8) -#define	POPARGS_2	POPARGS_1 -#define _PUSHARGS_2	_PUSHARGS_1 -#define	_DOARGS_2(n)	movl n(%esp), %ecx; _DOARGS_1 (n-4) -#define	_POPARGS_2	_POPARGS_1 - -#define PUSHARGS_3	_PUSHARGS_2 -#define DOARGS_3	_DOARGS_3 (16) -#define POPARGS_3	_POPARGS_3 -#define _PUSHARGS_3	_PUSHARGS_2 -#define _DOARGS_3(n)	movl n(%esp), %edx; _DOARGS_2 (n-4) -#define _POPARGS_3	_POPARGS_2 - -#define PUSHARGS_4	_PUSHARGS_4 -#define DOARGS_4	_DOARGS_4 (24) -#define POPARGS_4	_POPARGS_4 -#define _PUSHARGS_4	pushl %esi; cfi_adjust_cfa_offset (4); \ -			cfi_rel_offset (esi, 0); L(PUSHSI1): _PUSHARGS_3 -#define _DOARGS_4(n)	movl n(%esp), %esi; _DOARGS_3 (n-4) -#define _POPARGS_4	_POPARGS_3; popl %esi; cfi_adjust_cfa_offset (-4); \ -			cfi_restore (esi); L(POPSI1): - -#define PUSHARGS_5	_PUSHARGS_5 -#define DOARGS_5	_DOARGS_5 (32) -#define POPARGS_5	_POPARGS_5 -#define _PUSHARGS_5	pushl %edi; cfi_adjust_cfa_offset (4); \ -			cfi_rel_offset (edi, 0); L(PUSHDI1): _PUSHARGS_4 -#define _DOARGS_5(n)	movl n(%esp), %edi; _DOARGS_4 (n-4) -#define _POPARGS_5	_POPARGS_4; popl %edi; cfi_adjust_cfa_offset (-4); \ -			cfi_restore (edi); L(POPDI1): - -#define PUSHARGS_6	_PUSHARGS_6 -#define DOARGS_6	_DOARGS_6 (40) -#define POPARGS_6	_POPARGS_6 -#define _PUSHARGS_6	pushl %ebp; cfi_adjust_cfa_offset (4); \ -			cfi_rel_offset (ebp, 0); L(PUSHBP1): _PUSHARGS_5 -#define _DOARGS_6(n)	movl n(%esp), %ebp; _DOARGS_5 (n-4) -#define _POPARGS_6	_POPARGS_5; popl %ebp; cfi_adjust_cfa_offset (-4); \ -			cfi_restore (ebp); L(POPBP1): - -#endif	/* __ASSEMBLER__ */ - - -/* Pointer mangling support.  */ -#if defined NOT_IN_libc && defined IS_IN_rtld -/* We cannot use the thread descriptor because in ld.so we use setjmp -   earlier than the descriptor is initialized.  Using a global variable -   is too complicated here since we have no PC-relative addressing mode.  */ -#else -# ifdef __ASSEMBLER__ -#  define PTR_MANGLE(reg)	xorl %gs:POINTER_GUARD, reg;		      \ -				roll $9, reg -#  define PTR_DEMANGLE(reg)	rorl $9, reg;				      \ -				xorl %gs:POINTER_GUARD, reg -# else -#  define PTR_MANGLE(var)	asm ("xorl %%gs:%c2, %0\n"		      \ -				     "roll $9, %0"			      \ -				     : "=r" (var)			      \ -				     : "0" (var),			      \ -				       "i" (offsetof (tcbhead_t,	      \ -						      pointer_guard))) -#  define PTR_DEMANGLE(var)	asm ("rorl $9, %0\n"			      \ -				     "xorl %%gs:%c2, %0"		      \ -				     : "=r" (var)			      \ -				     : "0" (var),			      \ -				       "i" (offsetof (tcbhead_t,	      \ -						      pointer_guard))) -# endif -#endif - -#endif /* linux/i386/sysdep.h */ diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c index 643f4ed99..e07d78819 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c @@ -23,6 +23,7 @@  #include <lowlevellock.h>  #include <sys/time.h>  #include <tls.h> +#include <tcb-offsets.h>  void diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c b/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c index a1e228ee2..3e1b70f86 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c @@ -19,6 +19,7 @@  #include <unistd.h> +extern int __libc_fork (void);  pid_t  __fork (void)  | 
