[Ltrace-devel] 0.7.0 released

Petr Machata pmachata at redhat.com
Sat Nov 10 00:26:01 UTC 2012


Andreas Schwab <schwab at linux-m68k.org> writes:

> Petr Machata <pmachata at redhat.com> writes:
>
>> Andreas Schwab <schwab at linux-m68k.org> writes:
>>
>>> I'm getting a lot of testsuite failures due to
>>>
>>> Couldn't determine base address of linux-vdso32.so.1
>>> Couldn't load ELF object linux-vdso32.so.1: No such file or directory
>>
>> What architecture is this on?
>
> Pick any that features a vdso.

Then perhaps it's a kernel that I haven't tested on.  I haven't seen it
so far.

>> Apparently l_name of VDSO in r_debug
>> linkmap isn't always simply an empty string.  Perhaps we should ignore
>> entries that don't have full pathname in l_name.  Does the following
>> fix it for you?
>
> I think a valid l_name can be relative, too.

You are right:

$ export LD_LIBRARY_PATH=.
$ gdb ./libdl-simple
(gdb) p *_r_debug->r_map->l_next->l_next->l_next->l_next->l_next->l_next
$8 = {l_addr = 140737341272064, l_name = 0x601010 "./liblibdl-simple.so", l_ld = 0x7ffff75bb620, l_next = 0x0, l_prev = 0x7ffff7ffd998}

Hmm, so how about this?

diff --git a/sysdeps/linux-gnu/proc.c b/sysdeps/linux-gnu/proc.c
index 9c864f3..130d947 100644
--- a/sysdeps/linux-gnu/proc.c
+++ b/sysdeps/linux-gnu/proc.c
@@ -504,12 +504,13 @@ crawl_linkmap(struct Process *proc, struct lt_r_debug_64 *dbg)
 		umovebytes(proc, (arch_addr_t)(uintptr_t)rlm.l_name,
 			   lib_name, sizeof(lib_name));
 
-		if (*lib_name == '\0') {
-			/* VDSO.  No associated file, XXX but we might
-			 * load it from the address space of the
-			 * process.  */
+		/* Valid library name is either an absolute or a
+		 * relative file name.  An empty string or completely
+		 * unqualified name is likely a VDSO.  There's no file
+		 * associated with VDSO.  XXX though we could read it
+		 * from process memory.  */
+		if (*lib_name != '/' && *lib_name != '.')
 			continue;
-		}
 
 		/* Do we have that library already?  */
 		if (proc_each_library(proc, NULL, library_with_key_cb, &key))

Alternatively we might a per-arch black-list, but I'd rather solve this
as simply as possible.

Thanks,
PM



More information about the Ltrace-devel mailing list