aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-11-26 03:24:15 +0000
committerUlrich Drepper <drepper@redhat.com>2003-11-26 03:24:15 +0000
commit97fd3a3003b9eb980395417ffb104e02bf315fe8 (patch)
treea182a950fc4f7d23c60dac89ee85bad2aae696c9 /elf
parent65e6becf5b1b9ca1e911986d030b8b31b5dd4cfa (diff)
downloadglibc-97fd3a3003b9eb980395417ffb104e02bf315fe8.tar
glibc-97fd3a3003b9eb980395417ffb104e02bf315fe8.tar.gz
glibc-97fd3a3003b9eb980395417ffb104e02bf315fe8.tar.bz2
glibc-97fd3a3003b9eb980395417ffb104e02bf315fe8.zip
Update.
2003-11-25 Ulrich Drepper <drepper@redhat.com> * posix/runptests.c (main): Make errors fatal. * posix/PTESTS: One test in GA135 and GA136 check functionality which seems not guaranteed. 2003-11-25 Jakub Jelinek <jakub@redhat.com> * posix/regexec.c (re_search_internal): If prune_impossible_nodes returned REG_NOMATCH, set match_last to -1. Don't initialize pmatch[0] needlessly. Fix comment. (prune_impossible_nodes): Don't segfault on NULL state_log entry. (set_regs): Fix comment. * posix/regcomp.c (parse_bracket_exp): Only set has_plural_match if adding both SIMPLE_BRACKET and COMPLEX_BRACKET. (build_charclass_op): Set has_plural_match if adding both SIMPLE_BRACKET and COMPLEX_BRACKET. * posix/bug-regex11.c (tests): Fix register values for one commented out test. Add new tests. * posix/regex_internal.c (re_string_allocate): Make sure init_len is at least dfa->mb_cur_max. (re_string_reconstruct): If is_utf8, don't fall back into re_string_skip_chars just because idx points into a middle of valid UTF-8 character. Instead, set the wcs bytes which correspond to the partial character bytes to WEOF. * posix/regexec.c (re_search_internal): Allocate input.bufs_len + 1 instead of dfa->nodes_len + 1 state_log entries initially. * posix/bug-regex20.c (main): Uncomment backwards case insensitive tests.
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-load.c3
-rw-r--r--elf/dl-support.c1
-rw-r--r--elf/rtld.c18
3 files changed, 21 insertions, 1 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c
index ecf2ee87eb..c7e3716cb6 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1096,7 +1096,8 @@ cannot allocate TLS data structures for initial thread");
prefer to map such objects at; but this is only a preference,
the OS can do whatever it likes. */
ElfW(Addr) mappref;
- mappref = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart)
+ mappref = (ELF_PREFERRED_ADDRESS (loader, maplength,
+ c->mapstart & GL(dl_use_load_bias))
- MAP_BASE_ADDR (l));
/* Remember which part of the address space this object uses. */
diff --git a/elf/dl-support.c b/elf/dl-support.c
index 448f4c6848..f13fd058a3 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -41,6 +41,7 @@ size_t _dl_platformlen;
int _dl_debug_mask;
int _dl_lazy;
+ElfW(Addr) _dl_use_load_bias = -2;
int _dl_dynamic_weak;
/* If nonzero print warnings about problematic situations. */
diff --git a/elf/rtld.c b/elf/rtld.c
index e92149a667..82f7ed3fc2 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -95,6 +95,7 @@ struct rtld_global _rtld_global =
._dl_sysinfo = DL_SYSINFO_DEFAULT,
#endif
._dl_lazy = 1,
+ ._dl_use_load_bias = -2,
._dl_fpu_control = _FPU_DEFAULT,
._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
._dl_hwcap_mask = HWCAP_IMPORTANT,
@@ -996,6 +997,12 @@ of this helper program; chances are you did not intend to run this program.\n\
GL(dl_rtld_map).l_prev = GL(dl_loaded);
++GL(dl_nloaded);
+ /* If LD_USE_LOAD_BIAS env variable has not been seen, default
+ to not using bias for non-prelinked PIEs and libraries
+ and using it for executables or prelinked PIEs or libraries. */
+ if (GL(dl_use_load_bias) == (ElfW(Addr)) -2)
+ GL(dl_use_load_bias) = (GL(dl_loaded)->l_addr == 0) ? -1 : 0;
+
/* Set up the program header information for the dynamic linker
itself. It is needed in the dl_iterate_phdr() callbacks. */
ElfW(Ehdr) *rtld_ehdr = (ElfW(Ehdr) *) GL(dl_rtld_map).l_map_start;
@@ -1992,6 +1999,17 @@ process_envvars (enum mode *modep)
GL(dl_dynamic_weak) = 1;
break;
+ case 13:
+ /* We might have some extra environment variable with length 13
+ to handle. */
+#ifdef EXTRA_LD_ENVVARS_13
+ EXTRA_LD_ENVVARS_13
+#endif
+ if (!INTUSE(__libc_enable_secure)
+ && memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
+ GL(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
+ break;
+
case 14:
/* Where to place the profiling data file. */
if (!INTUSE(__libc_enable_secure)