This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch+7.5] Fix ppc32 7.5 stepping crash regression


Hello,

since
	[PATCH] PowerPC 32 with Secure PLT
	http://sourceware.org/ml/gdb-patches/2012-01/msg00655.html
	http://sourceware.org/ml/gdb-patches/2012-01/msg00656.html
	commit 4d19ed66762845cdcce95f8b1daaceb97cf90c71
	Author: eager <eager>
	Date:   Mon Jan 30 17:09:37 2012 +0000
	    Support stepping through PPC PLT with securePLT.

(gdb) step
Single stepping until exit from function main,
which has no line number information.

Program received signal SIGSEGV, Segmentation fault.
0x00000000100898d8 in powerpc_linux_in_dynsym_resolve_code (pc=268436636) at ppc-linux-tdep.c:651
651	  if ((strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink") == 0)
(gdb) p sym
$1 = (struct minimal_symbol *) 0x0
(gdb) bt
#0  0x00000000100898d8 in powerpc_linux_in_dynsym_resolve_code (pc=268436636) at ppc-linux-tdep.c:651
#1  0x00000000103fdf44 in in_solib_dynsym_resolve_code (pc=268436636) at solib.c:1185
#2  0x000000001025d848 in handle_inferior_event (ecs=0xfffffbbdcf0) at infrun.c:4737
[...]

I will check it in.

Not regression tested.


Regards,
Jan


gdb/
2012-09-26  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Fix crash during stepping on ppc32.
	* ppc-linux-tdep.c (powerpc_linux_in_dynsym_resolve_code): Test NULL
	SYM.

gdb/testsuite/
2012-09-26  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Fix crash during stepping on ppc32.
	* gdb.base/step-symless.c: New file.
	* gdb.base/step-symless.exp: New file.

diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index c7b70db..ccded83 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -648,8 +648,9 @@ powerpc_linux_in_dynsym_resolve_code (CORE_ADDR pc)
 
   /* Check if we are in the resolver.  */
   sym = lookup_minimal_symbol_by_pc (pc);
-  if ((strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink") == 0)
-      || (strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink_PLTresolve") == 0))
+  if (sym != NULL
+      && (strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink") == 0
+	  || strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink_PLTresolve") == 0))
     return 1;
 
   return 0;
diff --git a/gdb/testsuite/gdb.base/step-symless.c b/gdb/testsuite/gdb.base/step-symless.c
new file mode 100644
index 0000000..97eaf5e
--- /dev/null
+++ b/gdb/testsuite/gdb.base/step-symless.c
@@ -0,0 +1,38 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 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/>.  */
+
+static volatile int v;
+
+static void
+symful (void)
+{
+  v++;
+}
+
+static void
+symless (void)
+{
+  v++;
+}
+
+int
+main (void)
+{
+  symless ();
+  symful ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/step-symless.exp b/gdb/testsuite/gdb.base/step-symless.exp
new file mode 100644
index 0000000..d79edb2
--- /dev/null
+++ b/gdb/testsuite/gdb.base/step-symless.exp
@@ -0,0 +1,41 @@
+# 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/>.
+
+standard_testfile
+if {[build_executable ${testfile}.exp ${testfile} ${srcfile} {nodebug}] == -1} {
+    return -1
+}
+
+# We need those symbols global to access them from the .S file.
+set test "strip stub symbols"
+set objcopy_program [transform objcopy]
+set result [catch "exec $objcopy_program -N symless ${binfile}" output]
+verbose "result is $result"
+verbose "output is $output"
+if {$result != 0} {
+    fail $test
+    return
+}
+pass $test
+
+clean_restart $testfile
+
+if ![runto_main] {
+    return -1
+}
+
+gdb_breakpoint symful
+
+gdb_test "step" "Single stepping until exit.*no line number information.*\r\nBreakpoint \[^\r\n\]* in \\.?symful \\(\\)"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]