aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-misc.c7
-rw-r--r--elf/dl-runtime.c6
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];
}
}