This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [commit] [patchv2] Fix vDSO l_name for GDB's: Can't read pathname for load map: Input/output error.
- From: "Carlos O'Donell" <carlos at redhat dot com>
- To: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Mon, 11 Nov 2013 12:30:27 -0500
- Subject: Re: [commit] [patchv2] Fix vDSO l_name for GDB's: Can't read pathname for load map: Input/output error.
- Authentication-results: sourceware.org; auth=none
- References: <20131111170734 dot GA11875 at host2 dot jankratochvil dot net>
On 11/11/2013 12:07 PM, Jan Kratochvil wrote:
> commit 9182aa67994f4e8db378a949812176453e06cb34
> Author: Jan Kratochvil <jan.kratochvil@redhat.com>
> Date: Mon Nov 11 18:03:58 2013 +0100
>
> Fix vDSO l_name for GDB's: Can't read pathname for load map: Input/output error.
Jan,
This looks great. Thanks for sorting this out and pushing us to
help gdb and linux create better core dumps.
> diff --git a/ChangeLog b/ChangeLog
> index d330b58..2d9785b 100644
> --- 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.
> diff --git a/elf/dl-object.c b/elf/dl-object.c
> index 0f594d2..26d4f44 100644
> --- a/elf/dl-object.c
> +++ b/elf/dl-object.c
> @@ -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. */
Cheers,
Carlos.