diff options
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-init.c | 5 | ||||
-rw-r--r-- | elf/rtld.c | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/elf/dl-init.c b/elf/dl-init.c index c44a73f..7375c5f 100644 --- a/elf/dl-init.c +++ b/elf/dl-init.c @@ -62,7 +62,8 @@ _dl_init_next (void) } } - if (l->l_info[DT_INIT]) + if (l->l_info[DT_INIT] && + !(l->l_name[0] == '\0' && l->l_type == lt_executable)) { /* Run this object's initializer. */ l->l_init_running = 1; @@ -76,7 +77,7 @@ _dl_init_next (void) } /* Look for the first initializer not yet called. */ - l = _dl_loaded->l_next; /* Skip the executable itself. */ + l = _dl_loaded; do { init = next_init (l); @@ -182,8 +182,7 @@ of this helper program; chances are you did not intend to run this program.\n", l = _dl_map_object (NULL, _dl_argv[0]); phdr = l->l_phdr; phent = l->l_phnum; - l->l_type = lt_executable; - l->l_libname = (char *) ""; + l->l_name = (char *) ""; *user_entry = l->l_entry; } else @@ -270,6 +269,7 @@ of this helper program; chances are you did not intend to run this program.\n", { struct link_map *new; new = _dl_map_object (l, strtab + d->d_un.d_val); + new->l_type = lt_library; if (!before_rtld && new == &rtld_map) before_rtld = last; last = new; |