From 570083757caf694cbcf250a64f88709a8676aacf Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 12 Feb 2012 19:15:01 +0000 Subject: [PATCH] gdb/ 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/ * gdb.server/server-exec-info.exp: New file. --- gdb/ChangeLog | 6 ++++ gdb/exec.c | 9 ++++-- gdb/testsuite/ChangeLog | 4 +++ gdb/testsuite/gdb.server/server-exec-info.exp | 29 +++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 gdb/testsuite/gdb.server/server-exec-info.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8467263e1ad..e11ad4aa3d3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-02-12 Jan Kratochvil + + 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. + 2012-02-10 Tom Tromey * linespec.c (decode_line_internal): Skip symtabs_from_filename diff --git a/gdb/exec.c b/gdb/exec.c index cd129f7cbcb..8a3e79763bf 100644 --- 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\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; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f0eab1ca4e6..4de14578c9f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-02-12 Jan Kratochvil + + * gdb.server/server-exec-info.exp: New file. + 2012-02-10 Pedro Alves * gdb.base/break-interp.exp (test_attach_gdb): Assume $file is diff --git a/gdb/testsuite/gdb.server/server-exec-info.exp b/gdb/testsuite/gdb.server/server-exec-info.exp new file mode 100644 index 00000000000..3d773afc7d8 --- /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 . + +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" -- 2.30.2