diff options
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | elf/dl-support.c | 10 | ||||
-rw-r--r-- | elf/rtld.c | 8 | ||||
-rw-r--r-- | linuxthreads/ChangeLog | 8 | ||||
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 5 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 5 |
6 files changed, 51 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index e6d50f95ec..058e0ef041 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2002-12-18 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-support.c [NEED_DL_SYSINFO]: Define and initialize + _dl_sysinfo. + [DL_SYSINFO_IMPLEMENTATION]: If defined use it to generate the needed + code. + * elf/rtld.c [DL_NEED_SYSINFO]: Initialize _dl_sysinfo element of + _rtld_global. + [DL_SYSINFO_IMPLEMENTATION]: If defined use it to generate the needed + code. + * sysdeps/generic/dl-sysdep.c (_dl_sysdep_start) [NEED_DL_SYSINFO]: + Check for AT_SYSINFO and set _dl_sysinfo appropriately. + * sysdeps/generic/ldsodefs.h (struct rtld_global) [NEED_DL_SYSINFO]: + Add _dl_sysinfo. + 2002-12-18 Jakub Jelinek <jakub@redhat.com> * misc/Versions [libc: GLIBC_2.3.1]: Move __libc_readv and diff --git a/elf/dl-support.c b/elf/dl-support.c index a7a810935c..eae08954a2 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -131,6 +131,11 @@ int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID; struct ElfW(Phdr) *_dl_phdr; size_t _dl_phnum; +#ifdef NEED_DL_SYSINFO +/* Needed for improved syscall handling on at least x86/Linux. */ +uintptr_t _dl_sysinfo = DL_SYSINFO_DEFAULT; +#endif + /* During the program run we must not modify the global data of loaded shared object simultanously in two threads. Therefore we protect `_dl_open' and `_dl_close' in dl-close.c. @@ -238,3 +243,8 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, *sz = 1; return &result; } + + +#ifdef DL_SYSINFO_IMPLEMENTATION +DL_SYSINFO_IMPLEMENTATION +#endif diff --git a/elf/rtld.c b/elf/rtld.c index a93be8447e..a05034ee71 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -97,6 +97,9 @@ struct rtld_global _rtld_global = Bummer. --drepper */ ._dl_dynamic_weak = 1, #endif +#ifdef NEED_DL_SYSINFO + ._dl_sysinfo = DL_SYSINFO_DEFAULT, +#endif ._dl_lazy = 1, ._dl_fpu_control = _FPU_DEFAULT, ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID, @@ -132,6 +135,11 @@ static hp_timing_t start_time; TLS_INIT_HELPER #endif +/* Helper function for syscall implementation. */ +#ifdef DL_SYSINFO_IMPLEMENTATION +DL_SYSINFO_IMPLEMENTATION +#endif + /* Before ld.so is relocated we must not access variables which need relocations. This means variables which are exported. Variables declared as static are fine. If we can mark a variable hidden this diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index a84d4bd383..a5760c7f4e 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,5 +1,13 @@ 2002-12-18 Jakub Jelinek <jakub@redhat.com> + * sysdeps/i386/useldt.h (FLOATING_STACKS, ARCH_STACK_MAX_SIZE): Only + define if __ASSUME_LDT_WORKS > 0. + * libc-cancellation.c (THREAD_GETMEM, THREAD_SETMEM): Redefine to + struct member access if !FLOATING_STACKS. + * sysdeps/pthread/flockfile.c (flockfile): Change into weak alias. + +2002-12-18 Jakub Jelinek <jakub@redhat.com> + * internals.h (__pthread_thread_self): New prototype. (struct pthread_functions): Add ptr_pthread_thread_self field. * pthread.c (pthread_functions): Initialize ptr_pthread_thread_self. diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 256eca5227..fbe5ad49e7 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -134,6 +134,11 @@ _dl_sysdep_start (void **start_argptr, case AT_FPUCW: GL(dl_fpu_control) = av->a_un.a_val; break; +#ifdef NEED_DL_SYSINFO + case AT_SYSINFO: + GL(dl_sysinfo) = av->a_un.a_val; + break; +#endif } #ifdef DL_SYSDEP_OSCHECK diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index a704644d6e..6150852ed9 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -384,6 +384,11 @@ struct rtld_global EXTERN size_t _dl_tls_generation; #endif +#ifdef NEED_DL_SYSINFO + /* Syscall handling improvements. This is very specific to x86. */ + EXTERN uintptr_t _dl_sysinfo; +#endif + #ifdef SHARED }; # define __rtld_global_attribute__ |