about summary refs log tree commit diff
path: root/elf
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 /elf
parent3d53957913ab331dbdecaa2587d9aafd07d88eac (diff)
downloadglibc-5e2891795021a78fb975c55377d05919f4dae0c0.tar.gz
glibc-5e2891795021a78fb975c55377d05919f4dae0c0.tar.xz
glibc-5e2891795021a78fb975c55377d05919f4dae0c0.zip
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.
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-support.c10
-rw-r--r--elf/rtld.c8
2 files changed, 18 insertions, 0 deletions
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