aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorMaxim Sobolev <sobomax@FreeBSD.org>2003-02-06 13:31:30 +0000
committerMaxim Sobolev <sobomax@FreeBSD.org>2003-02-06 13:31:30 +0000
commitec3a2610cbda61aea0b6d6c82a719f9b3901910f (patch)
treed373d89ad1dbd0b11350d09d2a2d66da6f1ad2f5 /libexec/rtld-elf
parent8418379ae54515c66d16bc2caecd67f5c8db5d0f (diff)
Notes
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r--libexec/rtld-elf/rtld.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index cb5cc28bf68d..f991c9c8c0b8 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -1566,11 +1566,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)) == -1) {
@@ -1583,7 +1580,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);
@@ -1595,6 +1593,10 @@ dlopen(const char *name, int mode)
objlist_clear(&initlist);
wlock_release();
return obj;
+trace:
+ trace_loaded_objects(obj);
+ wlock_release();
+ exit(0);
}
void *