aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2002-02-17 07:04:32 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2002-02-17 07:04:32 +0000
commit2024994319ee5c493a3dc2a60f6544fb4800b61c (patch)
tree1a80ae19e44db239fd35cf2efcadb5a2847964a9 /libexec/rtld-elf
parentb8941882486a72a0423ad430031e1e6d86a1dec8 (diff)
Notes
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r--libexec/rtld-elf/rtld.15
-rw-r--r--libexec/rtld-elf/rtld.c8
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;