mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-07 00:50:50 +00:00
ldd: remove '[preloaded]' marker for the preloaded objects
for the default output. For '-a' (per-object needed printout) the [preloaded] banner is kept. Instead, use special format2 for printing the preloaded objects (and vdso), which does not include DT_NEEDED, since there is no object needing the printed one. In this way, the output is more compatible with glibc. Example: LD_PRELOAD=/lib/libthr.so.3 LD_TRACE_LOADED_OBJECTS=1 /libexec/ld-elf.so.1 /bin/ls libutil.so.9 => /lib/libutil.so.9 (0x801099000) libncursesw.so.9 => /lib/libncursesw.so.9 (0x8010b0000) libc.so.7 => /lib/libc.so.7 (0x801123000) [vdso] (0x7ffffffff000) /lib/libthr.so.3 (0x80106c000) Note the absense of the part before and including '=>' for preloaded libthr.so.3, and for vdso. PR: 265750 Reviewed by: jhb Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D36616
This commit is contained in:
parent
09ee0fc023
commit
2f72ee987d
|
@ -4956,7 +4956,12 @@ trace_print_obj(Obj_Entry *obj, const char *name, const char *path,
|
|||
const char *fmt;
|
||||
int c;
|
||||
|
||||
fmt = strncmp(name, "lib", 3) == 0 ? fmt1 : fmt2; /* XXX bogus */
|
||||
if (fmt1 == NULL)
|
||||
fmt = fmt2;
|
||||
else
|
||||
/* XXX bogus */
|
||||
fmt = strncmp(name, "lib", 3) == 0 ? fmt1 : fmt2;
|
||||
|
||||
while ((c = *fmt++) != '\0') {
|
||||
switch (c) {
|
||||
default:
|
||||
|
@ -5038,19 +5043,23 @@ trace_loaded_objects(Obj_Entry *obj, bool show_preload)
|
|||
}
|
||||
|
||||
if (show_preload) {
|
||||
if (ld_get_env_var(LD_TRACE_LOADED_OBJECTS_FMT2) == NULL)
|
||||
fmt2 = "\t%p (%x)\n";
|
||||
first_spurious = true;
|
||||
|
||||
TAILQ_FOREACH(obj, &obj_list, next) {
|
||||
if (obj->marker || obj == obj_main || obj->traced)
|
||||
continue;
|
||||
|
||||
if (first_spurious) {
|
||||
if (list_containers && first_spurious) {
|
||||
rtld_printf("[preloaded]\n");
|
||||
first_spurious = false;
|
||||
}
|
||||
|
||||
Name_Entry *fname = STAILQ_FIRST(&obj->names);
|
||||
name = fname == NULL ? "<unknown>" : fname->name;
|
||||
trace_print_obj(obj, name, obj->path, main_local,
|
||||
fmt1, fmt2);
|
||||
NULL, fmt2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue