diff options
| author | David E. O'Brien <obrien@FreeBSD.org> | 2002-02-17 07:04:32 +0000 |
|---|---|---|
| committer | David E. O'Brien <obrien@FreeBSD.org> | 2002-02-17 07:04:32 +0000 |
| commit | 2024994319ee5c493a3dc2a60f6544fb4800b61c (patch) | |
| tree | 1a80ae19e44db239fd35cf2efcadb5a2847964a9 /libexec/rtld-elf | |
| parent | b8941882486a72a0423ad430031e1e6d86a1dec8 (diff) | |
Notes
Diffstat (limited to 'libexec/rtld-elf')
| -rw-r--r-- | libexec/rtld-elf/rtld.1 | 5 | ||||
| -rw-r--r-- | libexec/rtld-elf/rtld.c | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libexec/rtld-elf/rtld.1 b/libexec/rtld-elf/rtld.1 index b32b08d59b27..dad1a6306615 100644 --- a/libexec/rtld-elf/rtld.1 +++ b/libexec/rtld-elf/rtld.1 @@ -107,6 +107,11 @@ When set to a nonempty string, causes .Nm to exit after loading the shared objects and printing a summary which includes the absolute pathnames of all objects, to standard output. +.It Ev LD_TRACE_LOADED_OBJECTS_ALL +When set to a nonempty string, causes +.Nm +to expand the summary to indicate which objects caused each object to +be loaded. .It Ev LD_TRACE_LOADED_OBJECTS_FMT1 .It Ev LD_TRACE_LOADED_OBJECTS_FMT2 When set, these variables are interpreted as format strings a la diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 100f01155698..abc95e883df8 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -2010,7 +2010,7 @@ symlook_obj(const char *name, unsigned long hash, const Obj_Entry *obj, static void trace_loaded_objects(Obj_Entry *obj) { - char *fmt1, *fmt2, *fmt, *main_local; + char *fmt1, *fmt2, *fmt, *main_local, *list_containers; int c; if ((main_local = getenv("LD_TRACE_LOADED_OBJECTS_PROGNAME")) == NULL) @@ -2022,14 +2022,18 @@ trace_loaded_objects(Obj_Entry *obj) if ((fmt2 = getenv("LD_TRACE_LOADED_OBJECTS_FMT2")) == NULL) fmt2 = "\t%o (%x)\n"; + list_containers = getenv("LD_TRACE_LOADED_OBJECTS_ALL"); + for (; obj; obj = obj->next) { Needed_Entry *needed; char *name, *path; bool is_lib; + if (list_containers && obj->needed != NULL) + printf("%s:\n", obj->path); for (needed = obj->needed; needed; needed = needed->next) { if (needed->obj != NULL) { - if (needed->obj->traced) + if (needed->obj->traced && !list_containers) continue; needed->obj->traced = true; path = needed->obj->path; |
