diff options
author | Florian Weimer <fweimer@redhat.com> | 2023-10-18 14:22:59 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2023-10-18 14:22:59 +0200 |
commit | e0b6c9706c91a642c781918eea52588ee8dc9f09 (patch) | |
tree | 0c15b9fd30f9f43e7267ef039ea75df4c45d7842 /elf/rtld.c | |
parent | 750a45a783906a19591fb8ff6b7841470f1f5701 (diff) | |
download | glibc-e0b6c9706c91a642c781918eea52588ee8dc9f09.tar.gz glibc-e0b6c9706c91a642c781918eea52588ee8dc9f09.tar.xz glibc-e0b6c9706c91a642c781918eea52588ee8dc9f09.zip |
Revert "elf: Remove unused l_text_end field from struct link_map"
This reverts commit 750f19526ae71aac801c77a3f7ef5374890c09b7. Reason for revert: Restore ABI after revert of commit a3189f66a5f.
Diffstat (limited to 'elf/rtld.c')
-rw-r--r-- | elf/rtld.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/elf/rtld.c b/elf/rtld.c index 5107d16fe3..a91e2a4471 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -477,6 +477,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) GL(dl_rtld_map).l_real = &GL(dl_rtld_map); GL(dl_rtld_map).l_map_start = (ElfW(Addr)) &__ehdr_start; GL(dl_rtld_map).l_map_end = (ElfW(Addr)) _end; + GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext; /* Copy the TLS related data if necessary. */ #ifndef DONT_USE_BOOTSTRAP_MAP # if NO_TLS_OFFSET != 0 @@ -1118,6 +1119,7 @@ rtld_setup_main_map (struct link_map *main_map) bool has_interp = false; main_map->l_map_end = 0; + main_map->l_text_end = 0; /* Perhaps the executable has no PT_LOAD header entries at all. */ main_map->l_map_start = ~0; /* And it was opened directly. */ @@ -1209,6 +1211,8 @@ rtld_setup_main_map (struct link_map *main_map) allocend = main_map->l_addr + ph->p_vaddr + ph->p_memsz; if (main_map->l_map_end < allocend) main_map->l_map_end = allocend; + if ((ph->p_flags & PF_X) && allocend > main_map->l_text_end) + main_map->l_text_end = allocend; /* The next expected address is the page following this load segment. */ @@ -1268,6 +1272,8 @@ rtld_setup_main_map (struct link_map *main_map) = (char *) main_map->l_tls_initimage + main_map->l_addr; if (! main_map->l_map_end) main_map->l_map_end = ~0; + if (! main_map->l_text_end) + main_map->l_text_end = ~0; if (! GL(dl_rtld_map).l_libname && GL(dl_rtld_map).l_name) { /* We were invoked directly, so the program might not have a |