Rebase to released FSF GDB 7.11.1.
This commit is contained in:
parent
6b46b9b395
commit
8e7b06e27c
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
|||||||
/gdb-libstdc++-v3-python-r225521.tar.xz
|
/gdb-libstdc++-v3-python-r225521.tar.xz
|
||||||
/gdb-7.11.tar.xz
|
/gdb-7.11.1.tar.xz
|
||||||
|
@ -1,230 +0,0 @@
|
|||||||
http://post-office.corp.redhat.com/archives/debug-list/2016-April/msg00003.html
|
|
||||||
|
|
||||||
>From cb8bfeaa21a2df484d3c4c35cc6ea1c4b32cefc8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pedro Alves <palves@redhat.com>
|
|
||||||
Date: Wed, 6 Apr 2016 15:07:49 +0100
|
|
||||||
Subject: [PATCH] Fix PR gdb/19828: gdb -p <process from a container>: internal
|
|
||||||
error
|
|
||||||
|
|
||||||
When GDB attaches to a process, it looks at the /proc/PID/task/ dir
|
|
||||||
for all clone threads of that process, and attaches to each of them.
|
|
||||||
|
|
||||||
Usually, if there is more than one clone thread, it means the program
|
|
||||||
is multi threaded and linked with pthreads. Thus when GDB soon after
|
|
||||||
attaching finds and loads a libthread_db matching the process, it'll
|
|
||||||
add a thread to the thread list for each of the initially found
|
|
||||||
lower-level LWPs.
|
|
||||||
|
|
||||||
If, however, GDB fails to find/load a matching libthread_db, nothing
|
|
||||||
is adding the LWPs to the thread list. And because of that, "detach"
|
|
||||||
hits an internal error:
|
|
||||||
|
|
||||||
(gdb) PASS: gdb.threads/clone-attach-detach.exp: fg attach 1: attach
|
|
||||||
info threads
|
|
||||||
Id Target Id Frame
|
|
||||||
* 1 LWP 6891 "clone-attach-de" 0x00007f87e5fd0790 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:84
|
|
||||||
(gdb) FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: info threads shows two LWPs
|
|
||||||
detach
|
|
||||||
.../src/gdb/thread.c:1010: internal-error: is_executing: Assertion `tp' failed.
|
|
||||||
A problem internal to GDB has been detected,
|
|
||||||
further debugging may prove unreliable.
|
|
||||||
Quit this debugging session? (y or n)
|
|
||||||
FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: detach (GDB internal error)
|
|
||||||
|
|
||||||
>From here:
|
|
||||||
|
|
||||||
...
|
|
||||||
#8 0x00000000007ba7cc in internal_error (file=0x98ea68 ".../src/gdb/thread.c", line=1010, fmt=0x98ea30 "%s: Assertion `%s' failed.")
|
|
||||||
at .../src/gdb/common/errors.c:55
|
|
||||||
#9 0x000000000064bb83 in is_executing (ptid=...) at .../src/gdb/thread.c:1010
|
|
||||||
#10 0x00000000004c23bb in get_pending_status (lp=0x12c5cc0, status=0x7fffffffdc0c) at .../src/gdb/linux-nat.c:1235
|
|
||||||
#11 0x00000000004c2738 in detach_callback (lp=0x12c5cc0, data=0x0) at .../src/gdb/linux-nat.c:1317
|
|
||||||
#12 0x00000000004c1a2a in iterate_over_lwps (filter=..., callback=0x4c2599 <detach_callback>, data=0x0) at .../src/gdb/linux-nat.c:899
|
|
||||||
#13 0x00000000004c295c in linux_nat_detach (ops=0xe7bd30, args=0x0, from_tty=1) at .../src/gdb/linux-nat.c:1358
|
|
||||||
#14 0x000000000068284d in delegate_detach (self=0xe7bd30, arg1=0x0, arg2=1) at .../src/gdb/target-delegates.c:34
|
|
||||||
#15 0x0000000000694141 in target_detach (args=0x0, from_tty=1) at .../src/gdb/target.c:2241
|
|
||||||
#16 0x0000000000630582 in detach_command (args=0x0, from_tty=1) at .../src/gdb/infcmd.c:2975
|
|
||||||
...
|
|
||||||
|
|
||||||
Tested on x86-64 Fedora 23. Also confirmed the test passes against
|
|
||||||
gdbserver with with "maint set target-non-stop".
|
|
||||||
|
|
||||||
gdb/ChangeLog:
|
|
||||||
yyyy-mm-dd Pedro Alves <palves@redhat.com>
|
|
||||||
|
|
||||||
* linux-nat.c (attach_proc_task_lwp_callback): Add the thread to
|
|
||||||
GDB's thread list.
|
|
||||||
|
|
||||||
testsuite/ChangeLog:
|
|
||||||
yyyy-mm-dd Pedro Alves <palves@redhat.com>
|
|
||||||
|
|
||||||
* gdb.threads/clone-attach-detach.c: New file.
|
|
||||||
* gdb.threads/clone-attach-detach.exp: New file.
|
|
||||||
---
|
|
||||||
gdb/linux-nat.c | 5 ++
|
|
||||||
gdb/testsuite/gdb.threads/clone-attach-detach.c | 66 +++++++++++++++++++++++
|
|
||||||
gdb/testsuite/gdb.threads/clone-attach-detach.exp | 63 ++++++++++++++++++++++
|
|
||||||
3 files changed, 134 insertions(+)
|
|
||||||
create mode 100644 gdb/testsuite/gdb.threads/clone-attach-detach.c
|
|
||||||
create mode 100644 gdb/testsuite/gdb.threads/clone-attach-detach.exp
|
|
||||||
|
|
||||||
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
|
|
||||||
index 0829bcb..2025c19 100644
|
|
||||||
--- a/gdb/linux-nat.c
|
|
||||||
+++ b/gdb/linux-nat.c
|
|
||||||
@@ -1088,6 +1088,11 @@ attach_proc_task_lwp_callback (ptid_t ptid)
|
|
||||||
/* We need to wait for a stop before being able to make the
|
|
||||||
next ptrace call on this LWP. */
|
|
||||||
lp->must_set_ptrace_flags = 1;
|
|
||||||
+
|
|
||||||
+ /* Also add the LWP to gdb's thread list, in case a
|
|
||||||
+ matching libthread_db is not found (or the process uses
|
|
||||||
+ raw clone). */
|
|
||||||
+ add_thread (lp->ptid);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
diff --git a/gdb/testsuite/gdb.threads/clone-attach-detach.c b/gdb/testsuite/gdb.threads/clone-attach-detach.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..daa8f1f
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.threads/clone-attach-detach.c
|
|
||||||
@@ -0,0 +1,66 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2016 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/>.
|
|
||||||
+*/
|
|
||||||
+
|
|
||||||
+#define _GNU_SOURCE
|
|
||||||
+#include <sched.h>
|
|
||||||
+#include <assert.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/wait.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+
|
|
||||||
+#define STACK_SIZE 0x1000
|
|
||||||
+
|
|
||||||
+int clone_pid;
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+clone_fn (void *unused)
|
|
||||||
+{
|
|
||||||
+ /* Wait for alarm. */
|
|
||||||
+ while (1)
|
|
||||||
+ sleep (1);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (int argc, char **argv)
|
|
||||||
+{
|
|
||||||
+ unsigned char *stack;
|
|
||||||
+ int res;
|
|
||||||
+
|
|
||||||
+ alarm (300);
|
|
||||||
+
|
|
||||||
+ stack = malloc (STACK_SIZE);
|
|
||||||
+ assert (stack != NULL);
|
|
||||||
+
|
|
||||||
+#define CLONE_FLAGS (CLONE_THREAD | CLONE_SIGHAND | CLONE_VM)
|
|
||||||
+
|
|
||||||
+#ifdef __ia64__
|
|
||||||
+ clone_pid = __clone2 (clone_fn, stack, STACK_SIZE, CLONE_FLAGS, NULL);
|
|
||||||
+#else
|
|
||||||
+ clone_pid = clone (clone_fn, stack + STACK_SIZE, CLONE_FLAGS, NULL);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ assert (clone_pid > 0);
|
|
||||||
+
|
|
||||||
+ /* Wait for alarm. */
|
|
||||||
+ while (1)
|
|
||||||
+ sleep (1);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
diff --git a/gdb/testsuite/gdb.threads/clone-attach-detach.exp b/gdb/testsuite/gdb.threads/clone-attach-detach.exp
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..0652108
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.threads/clone-attach-detach.exp
|
|
||||||
@@ -0,0 +1,63 @@
|
|
||||||
+# This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+# Copyright 2016 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/>.
|
|
||||||
+
|
|
||||||
+# Test attach / detach from a process that uses raw clone. We use raw
|
|
||||||
+# clone as proxy for when libthread_db is not available.
|
|
||||||
+
|
|
||||||
+# This only works on targets with the Linux kernel.
|
|
||||||
+if ![istarget *-*-linux*] {
|
|
||||||
+ return
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+if {![can_spawn_for_attach]} {
|
|
||||||
+ return 0
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+standard_testfile
|
|
||||||
+
|
|
||||||
+if [prepare_for_testing "failed to prepare" $testfile $srcfile {debug}] {
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+clean_restart ${binfile}
|
|
||||||
+
|
|
||||||
+set test_spawn_id [spawn_wait_for_attach $binfile]
|
|
||||||
+set testpid [spawn_id_get_pid $test_spawn_id]
|
|
||||||
+
|
|
||||||
+# Native/gdbserver.
|
|
||||||
+set thread_re "(LWP $decimal|Thread )"
|
|
||||||
+
|
|
||||||
+# Try attach / detach a few times, in case GDB ends up with stale
|
|
||||||
+# state after detaching.
|
|
||||||
+
|
|
||||||
+set attempts 3
|
|
||||||
+for {set attempt 1} {$attempt <= $attempts} {incr attempt} {
|
|
||||||
+ with_test_prefix "fg attach $attempt" {
|
|
||||||
+
|
|
||||||
+ gdb_test "attach $testpid" \
|
|
||||||
+ "Attaching to program.*process $testpid.*" \
|
|
||||||
+ "attach"
|
|
||||||
+
|
|
||||||
+ gdb_test "info threads" \
|
|
||||||
+ "1.*${thread_re}.*\r\n.*2.*${thread_re}.*" \
|
|
||||||
+ "info threads shows two LWPs"
|
|
||||||
+
|
|
||||||
+ gdb_test "detach" "Detaching from .*, process $testpid"
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+kill_wait_spawned_process $test_spawn_id
|
|
||||||
--
|
|
||||||
2.5.5
|
|
||||||
|
|
2733
gdb-upstream.patch
2733
gdb-upstream.patch
File diff suppressed because it is too large
Load Diff
15
gdb.spec
15
gdb.spec
@ -23,11 +23,11 @@ Name: %{?scl_prefix}gdb
|
|||||||
# See timestamp of source gnulib installed into gdb/gnulib/ .
|
# See timestamp of source gnulib installed into gdb/gnulib/ .
|
||||||
%global snapgnulib 20150822
|
%global snapgnulib 20150822
|
||||||
%global tarname gdb-%{version}
|
%global tarname gdb-%{version}
|
||||||
Version: 7.11
|
Version: 7.11.1
|
||||||
|
|
||||||
# The release always contains a leading reserved number, start it at 1.
|
# 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.
|
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||||
Release: 74%{?dist}
|
Release: 75%{?dist}
|
||||||
|
|
||||||
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL
|
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL
|
||||||
Group: Development/Debuggers
|
Group: Development/Debuggers
|
||||||
@ -241,7 +241,7 @@ Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch
|
|||||||
|
|
||||||
# Backported fixups post the source tarball.
|
# Backported fixups post the source tarball.
|
||||||
#Xdrop: Just backports.
|
#Xdrop: Just backports.
|
||||||
Patch232: gdb-upstream.patch
|
#Patch232: gdb-upstream.patch
|
||||||
|
|
||||||
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
|
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
|
||||||
#=fedoratest+ppc
|
#=fedoratest+ppc
|
||||||
@ -558,9 +558,6 @@ Patch1119: gdb-testsuite-readline63-sigint-revert.patch
|
|||||||
#=fedoratest
|
#=fedoratest
|
||||||
Patch1113: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
|
Patch1113: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
|
||||||
|
|
||||||
# Fix non-stop gdb -p <container>: internal error (pedro Alves, RH BZ 1318049).
|
|
||||||
Patch1117: gdb-rhbz1318049-gdb-p-container-internal-error.patch
|
|
||||||
|
|
||||||
# Add messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
|
# Add messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
|
||||||
Patch1118: gdb-container-rh-pkg.patch
|
Patch1118: gdb-container-rh-pkg.patch
|
||||||
|
|
||||||
@ -763,7 +760,7 @@ find -name "*.info*"|xargs rm -f
|
|||||||
# Match the Fedora's version info.
|
# Match the Fedora's version info.
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
|
|
||||||
%patch232 -p1
|
#patch232 -p1
|
||||||
%patch349 -p1
|
%patch349 -p1
|
||||||
%patch1058 -p1
|
%patch1058 -p1
|
||||||
%patch1059 -p1
|
%patch1059 -p1
|
||||||
@ -882,7 +879,6 @@ find -name "*.info*"|xargs rm -f
|
|||||||
%patch337 -p1
|
%patch337 -p1
|
||||||
%patch331 -p1
|
%patch331 -p1
|
||||||
%patch1113 -p1
|
%patch1113 -p1
|
||||||
%patch1117 -p1
|
|
||||||
%patch1118 -p1
|
%patch1118 -p1
|
||||||
%patch1120 -p1
|
%patch1120 -p1
|
||||||
%patch1123 -p1
|
%patch1123 -p1
|
||||||
@ -1407,6 +1403,9 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jun 6 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-75.fc24
|
||||||
|
- Rebase to released FSF GDB 7.11.1.
|
||||||
|
|
||||||
* Mon May 30 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-74.fc24
|
* Mon May 30 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-74.fc24
|
||||||
- Import bare DW_TAG_lexical_block (RH BZ 1325396).
|
- Import bare DW_TAG_lexical_block (RH BZ 1325396).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user