From 27d640befba8c7b91d5ba9e1152dbf039a18133b Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 22 Oct 2003 07:10:00 +0000 Subject: * sysdeps/unix/sysv/linux/hppa/sysdep.h: Fix merge error. 2003-10-15 Roland McGrath * elf/dl-iteratephdr.c [! SHARED] (dl_iterate_phdr): New function. Fake an entry for the main executable and then call __dl_iterate_phdr. * elf/Makefile (routines): Remove dl-iteratephdr-static. (elide-routines.os): Likewise. (CFLAGS-dl-iterate-phdr-static.c): Variable removed. * sysdeps/generic/dl-iteratephdr-static.c: File removed. * sysdeps/unix/sysv/linux/ia64/dl-iteratephdr-static.c: File removed. --- elf/dl-iteratephdr.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'elf/dl-iteratephdr.c') diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c index d4feb690c3..fd45f8529f 100644 --- a/elf/dl-iteratephdr.c +++ b/elf/dl-iteratephdr.c @@ -29,6 +29,7 @@ cancel_handler (void *arg __attribute__((unused))) __rtld_lock_unlock_recursive (GL(dl_load_lock)); } +hidden_proto (__dl_iterate_phdr) int __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, size_t size, void *data), void *data) @@ -58,7 +59,38 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, return ret; } +hidden_def (__dl_iterate_phdr) #ifdef SHARED + weak_alias (__dl_iterate_phdr, dl_iterate_phdr); + +#else + +/* dl-support.c defines these and initializes them early on. */ +extern ElfW(Phdr) *_dl_phdr; +extern size_t _dl_phnum; + +int +dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, + size_t size, void *data), void *data) +{ + if (_dl_phnum != 0) + { + /* This entry describes this statically-linked program itself. */ + struct dl_phdr_info info; + int ret; + info.dlpi_addr = 0; + info.dlpi_name = ""; + info.dlpi_phdr = _dl_phdr; + info.dlpi_phnum = _dl_phnum; + ret = (*callback) (&info, sizeof (struct dl_phdr_info), data); + if (ret) + return ret; + } + + return __dl_iterate_phdr (callback, data); +} + + #endif -- cgit v1.2.3