summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-19 00:03:48 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-19 00:03:48 +0000
commit5e2891795021a78fb975c55377d05919f4dae0c0 (patch)
tree96a489631b86637855d8e25e12a728d10525549d
parent3d53957913ab331dbdecaa2587d9aafd07d88eac (diff)
downloadglibc-5e2891795021a78fb975c55377d05919f4dae0c0.tar.gz
Update.
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.
-rw-r--r--ChangeLog15
-rw-r--r--elf/dl-support.c10
-rw-r--r--elf/rtld.c8
-rw-r--r--linuxthreads/ChangeLog8
-rw-r--r--sysdeps/generic/dl-sysdep.c5
-rw-r--r--sysdeps/generic/ldsodefs.h5
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__