From 131fd126cddad8379741597892cdfcd5cab3a49f Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 28 Dec 2002 09:27:26 +0000 Subject: Update. 2002-12-28 Ulrich Drepper * descr.h (struct pthread): Move header.data.list to the back of the struct. * sysdeps/i386/tls.h (tcbhead_t): Move list to the back of the struct. (MULTIPLE_THREADS_OFFSET): Adjust offset. (SYSINFO_OFFSEET): Likewise. 2002-12-27 Jakub Jelinek * sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h (USE_DL_SYSINFO): Define. (DL_SYSINFO_DEFAULT): Cast to uintptr_t to avoid warnings. * sysdeps/unix/sysv/linux/i386/dl-sysdep.h (NEED_DL_SYSINFO, DL_SYSINFO_DEFAULT, DL_SYSINFO_IMPLEMENTATION): Define. (USE_DL_SYSINFO): Undef. 2002-12-22 Jakub Jelinek * Makefile (tests-reverse): Use $(objpfx)../libc.so instead of $(common-objpfx)libc.so. * tst-cancel4.c (tf_write, tf_writev): Increase buf sizes so that it is bigger than pipe buffer size even on arches with bigger page size. (tf_usleep): Cast usleep argument to useconds_t to avoid warnings. --- nptl/sysdeps/i386/tls.h | 6 ++--- nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h | 26 +++++++++++++++++++++- nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h | 5 +++-- 3 files changed, 31 insertions(+), 6 deletions(-) (limited to 'nptl/sysdeps') diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h index 984094c00e..4f8ddb2d28 100644 --- a/nptl/sysdeps/i386/tls.h +++ b/nptl/sysdeps/i386/tls.h @@ -42,9 +42,9 @@ typedef struct thread descriptor used by libpthread. */ dtv_t *dtv; void *self; /* Pointer to the thread descriptor. */ - list_t list; int multiple_threads; uintptr_t sysinfo; + list_t list; } tcbhead_t; #endif @@ -62,11 +62,11 @@ typedef struct #define STACK_ALIGN 16 /* Offset of the MULTIPLE_THREADS element in tcbhead_t. */ -#define MULTIPLE_THREADS_OFFSET 20 +#define MULTIPLE_THREADS_OFFSET 12 #ifdef NEED_DL_SYSINFO /* Offset of the SYSINFO element in tcbhead_t. */ -# define SYSINFO_OFFSET 24 +# define SYSINFO_OFFSET 16 #endif diff --git a/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h b/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h index 0eb5f32ac3..5e59962a48 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h @@ -1,4 +1,4 @@ -/* System-specific settings for dynamic linker code. Generic version. +/* System-specific settings for dynamic linker code. IA-32 version. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -42,4 +42,28 @@ #define RTLD_CORRECT_DYNAMIC_WEAK 1 + +/* Traditionally system calls have been made using int $0x80. A + second method was introduced which, if possible, will use the + sysenter/syscall instructions. To signal the presence and where to + find the code the kernel passes an AT_SYSINFO value in the + auxiliary vector to the application. + sysenter/syscall is not useful on i386 through i586, but the dynamic + linker and dl code in libc.a has to be able to load i686 compiled + libraries. */ +#define NEED_DL_SYSINFO 1 +#undef USE_DL_SYSINFO + +#if defined NEED_DL_SYSINFO && !defined __ASSEMBLER__ +extern void _dl_sysinfo_int80 (void) attribute_hidden; +# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80 +# define DL_SYSINFO_IMPLEMENTATION \ + asm (".type _dl_sysinfo_int80,@function\n\t" \ + ".hidden _dl_sysinfo_int80\n" \ + "_dl_sysinfo_int80:\n\t" \ + "int $0x80;\n\t" \ + "ret;\n\t" \ + ".size _dl_sysinfo_int80,.-_dl_sysinfo_int80"); +#endif + #endif /* dl-sysdep.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h b/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h index f0d4ac7a88..d7328fe219 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h @@ -1,4 +1,4 @@ -/* System-specific settings for dynamic linker code. Generic version. +/* System-specific settings for dynamic linker code. IA-32 version. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -49,10 +49,11 @@ find the code the kernel passes an AT_SYSINFO value in the auxiliary vector to the application. */ #define NEED_DL_SYSINFO 1 +#define USE_DL_SYSINFO 1 #if defined NEED_DL_SYSINFO && !defined __ASSEMBLER__ extern void _dl_sysinfo_int80 (void) attribute_hidden; -# define DL_SYSINFO_DEFAULT _dl_sysinfo_int80 +# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80 # define DL_SYSINFO_IMPLEMENTATION \ asm (".type _dl_sysinfo_int80,@function\n\t" \ ".hidden _dl_sysinfo_int80\n" \ -- cgit v1.2.3