Fix vDSO l_name for GDB's: Can't read pathname for load map: Input/output error.
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 11 Nov 2013 17:03:58 +0000 (18:03 +0100)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 11 Nov 2013 17:03:58 +0000 (18:03 +0100)
ChangeLog
elf/dl-object.c

index d330b58..2d9785b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       [BZ #387]
+       * elf/dl-object.c (_dl_new_object): Initialize L_NAME from NEWNAME if
+       it is empty.
+
 2013-11-11  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
         * benchtests/Makefile: Add bench-strtod.
index 0f594d2..26d4f44 100644 (file)
@@ -88,7 +88,13 @@ _dl_new_object (char *realname, const char *libname, int type,
   /* newname->next = NULL;     We use calloc therefore not necessary.  */
   newname->dont_free = 1;
 
-  new->l_name = realname;
+  /* When we create the executable link map, or a VDSO link map, we start
+     with "" for the l_name. In these cases "" points to ld.so rodata
+     and won't get dumped during core file generation. Therefore to assist
+     gdb and to create more self-contained core files we adjust l_name to
+     point at the newly allocated copy (which will get dumped) instead of
+     the ld.so rodata copy.  */
+  new->l_name = *realname ? realname : (char *) newname->name + libname_len - 1;
   new->l_type = type;
   /* If we set the bit now since we know it is never used we avoid
      dirtying the cache line later.  */