diff options
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-misc.c | 7 | ||||
-rw-r--r-- | elf/dl-runtime.c | 6 |
2 files changed, 8 insertions, 5 deletions
diff --git a/elf/dl-misc.c b/elf/dl-misc.c index 937aeac0c9..8a441c0a3a 100644 --- a/elf/dl-misc.c +++ b/elf/dl-misc.c @@ -106,12 +106,9 @@ _dl_debug_message (int new_line, const char *msg, ...) { /* We print the strings we get passed one after the other but start all lines using the current PID. */ - static int pid; + int pid = 0; va_list ap; - if (pid == 0) - pid = __getpid (); - va_start (ap, msg); do if (msg[0] == '\0') @@ -127,6 +124,8 @@ _dl_debug_message (int new_line, const char *msg, ...) { char buf[7]; char *p; + if (pid == 0) + pid = __getpid (); assert (pid >= 0 && pid < 100000); p = _itoa_word (pid, &buf[5], 10, 0); while (p > buf) diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c index 53601b809f..5c1f290fe5 100644 --- a/elf/dl-runtime.c +++ b/elf/dl-runtime.c @@ -64,7 +64,11 @@ _dl_object_relocation_scope (struct link_map *l) dependency tree that first caused this object to be loaded. */ while (l->l_loader) l = l->l_loader; - *_dl_global_scope_end = l; + /* There is no point in searching the same list twice. This isn't + guaranteed to always find all duplicates if new objects are added + to the global scope, but is good enough most of the time. */ + if (_dl_global_scope[2] != l) + *_dl_global_scope_end = l; return &_dl_global_scope[2]; } } |