diff options
-rw-r--r-- | libexec/rtld-elf/rtld.c | 14 | ||||
-rw-r--r-- | usr.bin/ldd/ldd.c | 9 |
2 files changed, 12 insertions, 11 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index a007ff5..d7f243a 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -1605,11 +1605,8 @@ dlopen(const char *name, int mode) assert(*old_obj_tail == obj); result = load_needed_objects(obj); - if (result != -1 && ld_tracing) { - trace_loaded_objects(obj); - wlock_release(); - exit(0); - } + if (result != -1 && ld_tracing) + goto trace; if (result == -1 || (init_dag(obj), relocate_objects(obj, mode == RTLD_NOW, @@ -1623,7 +1620,8 @@ dlopen(const char *name, int mode) /* Make list of init functions to call. */ initlist_add_objects(obj, &obj->next, &initlist); } - } + } else if (ld_tracing) + goto trace; } GDB_STATE(RT_CONSISTENT,obj ? &obj->linkmap : NULL); @@ -1635,6 +1633,10 @@ dlopen(const char *name, int mode) objlist_clear(&initlist); wlock_release(); return obj; +trace: + trace_loaded_objects(obj); + wlock_release(); + exit(0); } void * diff --git a/usr.bin/ldd/ldd.c b/usr.bin/ldd/ldd.c index 68f9988..8e5e5d2 100644 --- a/usr.bin/ldd/ldd.c +++ b/usr.bin/ldd/ldd.c @@ -220,13 +220,12 @@ main(int argc, char *argv[]) } break; case 0: - if (is_shlib) { - if (dlopen(*argv, RTLD_TRACE)) - _exit(0); /* libc.so */ - warnx("%s: %s", *argv, dlerror()); - } else { + if (is_shlib == 0) { execl(*argv, *argv, (char *)NULL); warn("%s", *argv); + } else { + dlopen(*argv, RTLD_TRACE); + warnx("%s: %s", *argv, dlerror()); } _exit(1); } |