diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/dl-iteratephdr.c | 5 | ||||
-rw-r--r-- | elf/rtld.c | 7 |
3 files changed, 13 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index d6a76ce3e1..abbe3a8bd2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2003-06-15 Ulrich Drepper <drepper@redhat.com> + * elf/dl-iteratephdr.c (__dl_iterate_phdr): Don't skip dynamic + linker's map. + * elf/rtld.c (dl_main): Initialize l_phdr and l_phnum of of the + dynamic linker's map. + Fix cancellation point handling wrt exception based cleanup. * io/Makefile: Compile fcntl.c, poll.c, and lockf.c with exceptions. * misc/Makefile: Compile pselect.c, readv.c, writev.c, and usleep.c 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. */ |