summaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-iteratephdr.c5
-rw-r--r--elf/rtld.c7
2 files changed, 8 insertions, 4 deletions
diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c
index c374baaa98..dccaf0aff8 100644
--- a/elf/dl-iteratephdr.c
+++ b/elf/dl-iteratephdr.c
@@ -1,5 +1,5 @@
/* Get loaded objects program headers.
- Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
@@ -36,9 +36,6 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
for (l = GL(dl_loaded); l != NULL; l = l->l_next)
{
- /* Skip the dynamic linker. */
- if (l->l_phdr == NULL)
- continue;
info.dlpi_addr = l->l_addr;
info.dlpi_name = l->l_name;
info.dlpi_phdr = l->l_phdr;
diff --git a/elf/rtld.c b/elf/rtld.c
index 367a9dcba9..5347a5f7b8 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -931,6 +931,13 @@ 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);
+ /* 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_addr);
+ GL(dl_rtld_map).l_phdr = (ElfW(Phdr) *) (GL(dl_rtld_map.l_addr)
+ + rtld_ehdr->e_phoff);
+ GL(dl_rtld_map).l_phnum = rtld_ehdr->e_phnum;
+
/* We have two ways to specify objects to preload: via environment
variable and via the file /etc/ld.so.preload. The latter can also
be used when security is enabled. */