Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: gdb-patches@sourceware.org
Subject: [patch] Fix crash on `info files' with gdbserver
Date: Wed, 08 Feb 2012 20:50:00 -0000	[thread overview]
Message-ID: <20120208204955.GA28565@host2.jankratochvil.net> (raw)

Hi,

while playing with gdbserver GDB just crashed for me.

The problem is exec_ops get pushed to the target stack for the loaded shared
libraries despite exec_bfd remains NULL which is not expected by exec.c.

Breakpoint 1, add_target_sections (sections=0x21372e0, sections_end=0x2137580) at exec.c:471
471               push_target (&exec_ops);
(gdb) bt
#0  add_target_sections (sections=0x21372e0, sections_end=0x2137580) at exec.c:471
#1  in solib_map_sections (so=0x21cd6f0) at solib.c:507
#2  in update_solib_list (from_tty=1, target=0x1d8fee0) at solib.c:804
#3  in solib_add (pattern=0x0, from_tty=1, target=0x1d8fee0, readsyms=1) at solib.c:889
#4  in enable_break (info=0x210f000, from_tty=1) at solib-svr4.c:1624
#5  in svr4_solib_create_inferior_hook (from_tty=1) at solib-svr4.c:2234
#6  in solib_create_inferior_hook (from_tty=1) at solib.c:1172
#7  in reload_shared_libraries (ignored=0x0, from_tty=1, e=0x1fc5cd0) at solib.c:1308

So it is questionable whether to keep exec_ops unpushed or whether to handle
NULL exec_bfd there.  I chose the latter.

The set_section_command part has no code change effect, just there was a bug.

No regressions on {x86_64,x86_64-m32,i686}-fedorarawhide-linux-gnu and with
non-extended gdbserver.

I will check it in.


Thanks,
Jan


gdb/
2012-02-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Fix crash on loaded shlibs without loaded exec_bfd.
	* exec.c (exec_files_info): Do not crash on NULL EXEC_BFD.
	(set_section_command): Replace exec_bfd by p->bfd.

gdb/testsuite/
2012-02-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.server/server-exec-info.exp: New file.

--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -761,7 +761,10 @@ print_section_info (struct target_section_table *t, bfd *abfd)
 static void
 exec_files_info (struct target_ops *t)
 {
-  print_section_info (current_target_sections, exec_bfd);
+  if (exec_bfd)
+    print_section_info (current_target_sections, exec_bfd);
+  else
+    puts_filtered (_("\t<no file loaded>\n"));
 
   if (vmap)
     {
@@ -813,9 +816,9 @@ set_section_command (char *args, int from_tty)
   table = current_target_sections;
   for (p = table->sections; p < table->sections_end; p++)
     {
-      if (!strncmp (secname, bfd_section_name (exec_bfd,
+      if (!strncmp (secname, bfd_section_name (p->bfd,
 					       p->the_bfd_section), seclen)
-	  && bfd_section_name (exec_bfd, p->the_bfd_section)[seclen] == '\0')
+	  && bfd_section_name (p->bfd, p->the_bfd_section)[seclen] == '\0')
 	{
 	  offset = secaddr - p->addr;
 	  p->addr += offset;
--- /dev/null
+++ b/gdb/testsuite/gdb.server/server-exec-info.exp
@@ -0,0 +1,29 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+load_lib gdbserver-support.exp
+
+set testfile "no-execfile-info"
+set srcfile "server.c"
+#if { [build_executable ${testfile}.exp ${testfile} ${srcfile}] == -1} {
+if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] {
+    return -1
+}
+
+gdb_test "file" ".*" "file" \
+	 {Discard symbol table from `.*'\? \(y or n\) } "y"
+gdbserver_run ""
+gdb_test "set sysroot remote:"
+gdb_test "info files" "\r\nLocal exec file:\r\n\t<no file loaded>"


             reply	other threads:[~2012-02-08 20:50 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-08 20:50 Jan Kratochvil [this message]
2012-02-08 21:21 ` Pedro Alves
2012-02-12 19:16   ` [commit] " 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=20120208204955.GA28565@host2.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /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