diff options
author | Roland McGrath <roland@gnu.org> | 2003-10-22 07:10:00 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2003-10-22 07:10:00 +0000 |
commit | 27d640befba8c7b91d5ba9e1152dbf039a18133b (patch) | |
tree | 6219ece9d560763ea32d6111ae73ca0465766909 /elf/dl-iteratephdr.c | |
parent | 026395a2a6cfeeb365d2a2993a1aebd6f58b1f95 (diff) | |
download | glibc-27d640befba8c7b91d5ba9e1152dbf039a18133b.tar glibc-27d640befba8c7b91d5ba9e1152dbf039a18133b.tar.gz glibc-27d640befba8c7b91d5ba9e1152dbf039a18133b.tar.bz2 glibc-27d640befba8c7b91d5ba9e1152dbf039a18133b.zip |
* sysdeps/unix/sysv/linux/hppa/sysdep.h: Fix merge error.
2003-10-15 Roland McGrath <roland@redhat.com>
* 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.
Diffstat (limited to 'elf/dl-iteratephdr.c')
-rw-r--r-- | elf/dl-iteratephdr.c | 32 |
1 files changed, 32 insertions, 0 deletions
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 |