[ppc32] Fix stepping over symbol-less code crash regression (BZ 860696).

- Rebase to FSF GDB 7.5.0.20120926 (7.5 stable branch).
  - Remove the .spec Source keyword URL as not valid now.
This commit is contained in:
Jan Kratochvil 2012-09-26 19:54:59 +02:00
parent 29e1388476
commit fb02fc3940
6 changed files with 199 additions and 30 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
/gdb-libstdc++-v3-python-r155978.tar.bz2
/gdb-7.5.tar.bz2
/gdb-7.5.0.20120926.tar.bz2

View File

@ -88,7 +88,7 @@ Index: gdb-7.4.91.20120801/gdb/corelow.c
+ add_setshow_boolean_cmd ("build-id-core-loads", class_files,
+ &build_id_core_loads, _("\
+Set whether CORE-FILE loads the build-id associated files automatically."), _("\
+Show whether CORE-FILE loads the build-id associated files automatically.."),
+Show whether CORE-FILE loads the build-id associated files automatically."),
+ NULL, NULL, NULL,
+ &setlist, &showlist);
}

View File

@ -37,10 +37,10 @@ gdb/gdbserver/
(linux_create_inferior, linux_tracefork_child): Call it instead of
direct ptrace.
Index: gdb-7.4.50.20120714/gdb/common/linux-ptrace.c
Index: gdb-7.5.0.20120926/gdb/common/linux-ptrace.c
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/common/linux-ptrace.c 2012-07-07 14:13:56.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/common/linux-ptrace.c 2012-07-14 23:30:02.918167283 +0200
--- gdb-7.5.0.20120926.orig/gdb/common/linux-ptrace.c 2012-09-17 20:28:14.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/common/linux-ptrace.c 2012-09-26 19:13:53.508780239 +0200
@@ -28,6 +28,10 @@
#include "buffer.h"
#include "gdb_assert.h"
@ -60,8 +60,8 @@ Index: gdb-7.4.50.20120714/gdb/common/linux-ptrace.c
+ linux_ptrace_create_warnings (buffer);
}
#ifdef __i386__
@@ -171,3 +177,19 @@ linux_ptrace_init_warnings (void)
#if defined __i386__ || defined __x86_64__
@@ -242,3 +248,19 @@ linux_ptrace_init_warnings (void)
linux_ptrace_test_ret_to_nx ();
}
@ -81,10 +81,10 @@ Index: gdb-7.4.50.20120714/gdb/common/linux-ptrace.c
+ "(gdb) shell sudo setsebool deny_ptrace=0"));
+#endif /* HAVE_LIBSELINUX */
+}
Index: gdb-7.4.50.20120714/gdb/common/linux-ptrace.h
Index: gdb-7.5.0.20120926/gdb/common/linux-ptrace.h
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/common/linux-ptrace.h 2012-07-07 14:13:56.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/common/linux-ptrace.h 2012-07-14 23:29:20.927399812 +0200
--- gdb-7.5.0.20120926.orig/gdb/common/linux-ptrace.h 2012-07-07 14:13:56.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/common/linux-ptrace.h 2012-09-26 19:13:28.358765406 +0200
@@ -69,5 +69,6 @@ struct buffer;
extern void linux_ptrace_attach_warnings (pid_t pid, struct buffer *buffer);
@ -92,10 +92,10 @@ Index: gdb-7.4.50.20120714/gdb/common/linux-ptrace.h
+extern void linux_ptrace_create_warnings (struct buffer *buffer);
#endif /* COMMON_LINUX_PTRACE_H */
Index: gdb-7.4.50.20120714/gdb/configure.ac
Index: gdb-7.5.0.20120926/gdb/configure.ac
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/configure.ac 2012-07-14 23:28:57.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/configure.ac 2012-07-14 23:29:09.492462934 +0200
--- gdb-7.5.0.20120926.orig/gdb/configure.ac 2012-09-26 19:13:24.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/configure.ac 2012-09-26 19:13:28.410765451 +0200
@@ -2008,6 +2008,10 @@ then
[Define if you support the personality syscall.])
fi
@ -107,10 +107,10 @@ Index: gdb-7.4.50.20120714/gdb/configure.ac
dnl Handle optional features that can be enabled.
# Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
Index: gdb-7.4.50.20120714/gdb/gdbserver/configure.ac
Index: gdb-7.5.0.20120926/gdb/gdbserver/configure.ac
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/gdbserver/configure.ac 2012-04-19 21:34:51.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/gdbserver/configure.ac 2012-07-14 23:29:09.492462934 +0200
--- gdb-7.5.0.20120926.orig/gdb/gdbserver/configure.ac 2012-04-19 21:34:51.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/gdbserver/configure.ac 2012-09-26 19:13:28.446765428 +0200
@@ -438,6 +438,10 @@ if $want_ipa ; then
fi
fi
@ -122,10 +122,10 @@ Index: gdb-7.4.50.20120714/gdb/gdbserver/configure.ac
AC_SUBST(GDBSERVER_DEPFILES)
AC_SUBST(GDBSERVER_LIBS)
AC_SUBST(USE_THREAD_DB)
Index: gdb-7.4.50.20120714/gdb/gdbserver/linux-low.c
Index: gdb-7.5.0.20120926/gdb/gdbserver/linux-low.c
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/gdbserver/linux-low.c 2012-07-07 14:13:57.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/gdbserver/linux-low.c 2012-07-14 23:29:09.496462912 +0200
--- gdb-7.5.0.20120926.orig/gdb/gdbserver/linux-low.c 2012-07-07 14:13:57.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/gdbserver/linux-low.c 2012-09-26 19:13:28.453765471 +0200
@@ -601,6 +601,28 @@ add_lwp (ptid_t ptid)
return lwp;
}
@ -173,10 +173,10 @@ Index: gdb-7.4.50.20120714/gdb/gdbserver/linux-low.c
kill (getpid (), SIGSTOP);
#if !(defined(__UCLIBC__) && defined(HAS_NOMMU))
Index: gdb-7.4.50.20120714/gdb/inf-ptrace.c
Index: gdb-7.5.0.20120926/gdb/inf-ptrace.c
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/inf-ptrace.c 2012-05-24 18:51:34.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/inf-ptrace.c 2012-07-14 23:29:09.496462912 +0200
--- gdb-7.5.0.20120926.orig/gdb/inf-ptrace.c 2012-05-24 18:51:34.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/inf-ptrace.c 2012-09-26 19:13:28.458765461 +0200
@@ -105,7 +105,15 @@ static void
inf_ptrace_me (void)
{
@ -193,10 +193,10 @@ Index: gdb-7.4.50.20120714/gdb/inf-ptrace.c
}
/* Start a new inferior Unix child process. EXEC_FILE is the file to
Index: gdb-7.4.50.20120714/gdb/linux-nat.c
Index: gdb-7.5.0.20120926/gdb/linux-nat.c
===================================================================
--- gdb-7.4.50.20120714.orig/gdb/linux-nat.c 2012-07-14 23:21:32.000000000 +0200
+++ gdb-7.4.50.20120714/gdb/linux-nat.c 2012-07-14 23:29:09.497462907 +0200
--- gdb-7.5.0.20120926.orig/gdb/linux-nat.c 2012-09-26 19:13:22.000000000 +0200
+++ gdb-7.5.0.20120926/gdb/linux-nat.c 2012-09-26 19:13:28.468765469 +0200
@@ -1574,6 +1574,7 @@ linux_nat_create_inferior (struct target
#ifdef HAVE_PERSONALITY
int personality_orig = 0, personality_set = 0;

160
gdb-step-symless.patch Normal file
View File

@ -0,0 +1,160 @@
http://sourceware.org/ml/gdb-patches/2012-09/msg00598.html
Subject: [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 \\(\\)"

View File

@ -27,20 +27,20 @@
Summary: A GNU source-level debugger for C, C++, Fortran, Go and other languages
Name: %{?scl_prefix}gdb
%global snap 20120817
%global snap 20120926
# See timestamp of source gnulib installed into gdb/gnulib/ .
%global snapgnulib 20120623
Version: 7.5
Version: 7.5.0.%{snap}
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
Release: 20%{?dist}
Release: 21%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
Group: Development/Debuggers
# Do not provide URL for snapshots as the file lasts there only for 2 days.
# ftp://sourceware.org/pub/gdb/releases/gdb-%{version}.tar.bz2
Source: ftp://sourceware.org/pub/gdb/releases/gdb-%{version}.tar.bz2
Source: gdb-%{version}.tar.bz2
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
URL: http://gnu.org/software/gdb/
@ -565,6 +565,9 @@ Patch703: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
#=fedora
Patch716: gdb-minidebuginfo.patch
# [ppc32] Fix stepping over symbol-less code crash regression (BZ 860696).
Patch725: gdb-step-symless.patch
%if 0%{!?rhel:1} || 0%{?rhel} > 6
# RL_STATE_FEDORA_GDB would not be found for:
# Patch642: gdb-readline62-ask-more-rh.patch
@ -873,6 +876,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c gdb/go-exp.c
%patch698 -p1
%patch703 -p1
%patch716 -p1
%patch725 -p1
%patch393 -p1
%if 0%{!?el5:1} || 0%{?scl:1}
@ -1369,6 +1373,11 @@ fi
%endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
%changelog
* Wed Sep 26 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5-21.fc18
- [ppc32] Fix stepping over symbol-less code crash regression (BZ 860696).
- Rebase to FSF GDB 7.5.0.20120926 (7.5 stable branch).
- Remove the .spec Source keyword URL as not valid now.
* Fri Sep 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5-20.fc18
- [RHEL-6] Disable no longer valid workaround of man pages .gz suffix.

View File

@ -1,2 +1,2 @@
4981307aa9619bbec5b73261e4e41c8d gdb-libstdc++-v3-python-r155978.tar.bz2
24a6779a9fe0260667710de1b082ef61 gdb-7.5.tar.bz2
813b1d4f93e0eb56ff81d147de2286fb gdb-7.5.0.20120926.tar.bz2