Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andreas Arnez <arnez@linux.vnet.ibm.com>
To: gdb-patches@sourceware.org
Cc: Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Subject: [PATCH] Skip VDSO when reading SO list
Date: Mon, 19 Aug 2013 14:44:00 -0000	[thread overview]
Message-ID: <87d2p9oi4i.fsf@br87z6lw.de.ibm.com> (raw)

On some Linux versions, the file name (l_name) of a VDSO's link map
entry lies in read-only memory that is excluded from a core dump.
When reading such a core dump, GDB complains:

warning: Can't read pathname for load map: Input/output error.

When GDB walks through the link map again after establishing the file
mappings, the file name will be recognized as the empty string, and
the entry will be ignored.  However, if the user supplied the wrong
version of the executable, a bogus entry with a garbage file name may
be created instead.

This patch tries to avoid the warning and the potential bogus entry.

In the cases I've looked at, the VDSO's l_name address matches that of
the main executable.  Thus the patch uses this as a criteria for
identifying (and skipping) the VDSO.


2013-08-19  Andreas Arnez  <arnez@linux.vnet.ibm.com>

	* solib-svr4.c (svr4_read_so_list): Skip the VDSO when reading
	link map entries.

Index: gdb/gdb/solib-svr4.c
===================================================================
--- gdb.orig/gdb/solib-svr4.c
+++ gdb/gdb/solib-svr4.c
@@ -1310,6 +1310,7 @@ static int
 svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
 		   struct so_list ***link_ptr_ptr, int ignore_first)
 {
+  struct so_list *first = NULL;
   CORE_ADDR next_lm;
 
   for (; lm != 0; prev_lm = lm, lm = next_lm)
@@ -1349,10 +1350,22 @@ svr4_read_so_list (CORE_ADDR lm, CORE_AD
 	{
 	  struct svr4_info *info = get_svr4_info ();
 
+	  first = new;
 	  info->main_lm_addr = new->lm_info->lm_addr;
 	  do_cleanups (old_chain);
 	  continue;
 	}
+
+      /* The l_name of a VDSO sometimes lies in read-only memory that
+	 is excluded from a core dump.  In order to avoid the "can't
+	 read pathname" warning, we try to identify the VDSO.  One
+	 criteria is that the l_name address matches that of the main
+	 executable.  */
+      if (first && new->lm_info->l_name == first->lm_info->l_name)
+	{
+	  do_cleanups (old_chain);
+	  continue;
+	}
 
       /* Extract this shared object's name.  */
       target_read_string (new->lm_info->l_name, &buffer,


             reply	other threads:[~2013-08-19 14:44 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-19 14:44 Andreas Arnez [this message]
2013-08-19 18:30 ` Jan Kratochvil
2013-08-19 20:42   ` Joel Brobecker
2013-08-19 20:47     ` Jan Kratochvil
2013-08-19 21:13       ` Joel Brobecker
2013-08-20 11:44   ` Andreas Arnez
2013-08-20 13:47   ` Jan Kratochvil
2013-09-20 13:15 ` Jan Kratochvil
2013-09-20 15:27   ` Jan Kratochvil
2013-09-20 17:00   ` Andreas Arnez
2013-09-20 18:14     ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d2p9oi4i.fsf@br87z6lw.de.ibm.com \
    --to=arnez@linux.vnet.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=krebbel@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox