[gdb] Rebase to FSF GDB 7.8.1.
Jan Kratochvil
jankratochvil at fedoraproject.org
Thu Oct 30 21:21:17 UTC 2014
commit 43b0bce1db25f51fc4bd7b400f42984c8bca466b
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date: Thu Oct 30 22:21:18 2014 +0100
Rebase to FSF GDB 7.8.1.
.gitignore | 2 +-
gdb-async-stopped-on-pid-arg-1of2.patch | 350 -----
gdb-async-stopped-on-pid-arg-2of2.patch | 217 ---
gdb-async-stopped-on-pid-arg-testsuite.patch | 23 +-
gdb-attach-fail-reasons-5of5.patch | 78 +-
gdb-babeltrace-configure.patch | 85 --
gdb-babeltrace-minsize.patch | 237 ----
gdb-upstream.patch | 1803 --------------------------
gdb.spec | 26 +-
python-framefilter-invalidarg.patch | 596 ---------
sources | 2 +-
11 files changed, 58 insertions(+), 3361 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 39bc2d8..e450f7a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
/gdb-libstdc++-v3-python-r155978.tar.bz2
-/gdb-7.8.tar.gz
+/gdb-7.8.1.tar.xz
diff --git a/gdb-async-stopped-on-pid-arg-testsuite.patch b/gdb-async-stopped-on-pid-arg-testsuite.patch
index f50ead1..d516695 100644
--- a/gdb-async-stopped-on-pid-arg-testsuite.patch
+++ b/gdb-async-stopped-on-pid-arg-testsuite.patch
@@ -33,10 +33,10 @@ gdb/testsuite/
gdb_breakpoint, gdb_continue_to_breakpoint.
(test_command_line_attach_run): Kill ${testpid} in one exit path.
-diff --git a/gdb/testsuite/gdb.base/attach.c b/gdb/testsuite/gdb.base/attach.c
-index 0041b47..91b180c 100644
---- a/gdb/testsuite/gdb.base/attach.c
-+++ b/gdb/testsuite/gdb.base/attach.c
+Index: gdb-7.8.1/gdb/testsuite/gdb.base/attach.c
+===================================================================
+--- gdb-7.8.1.orig/gdb/testsuite/gdb.base/attach.c 2014-10-30 20:23:01.311595725 +0100
++++ gdb-7.8.1/gdb/testsuite/gdb.base/attach.c 2014-10-30 20:23:38.653574999 +0100
@@ -5,6 +5,7 @@
exit unless/until gdb sets the variable to non-zero.)
*/
@@ -58,10 +58,10 @@ index 0041b47..91b180c 100644
- return 0;
+ return 0; /* postloop */
}
-diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
-index 6340496..5fb5c53 100644
---- a/gdb/testsuite/gdb.base/attach.exp
-+++ b/gdb/testsuite/gdb.base/attach.exp
+Index: gdb-7.8.1/gdb/testsuite/gdb.base/attach.exp
+===================================================================
+--- gdb-7.8.1.orig/gdb/testsuite/gdb.base/attach.exp 2014-10-30 20:23:01.311595725 +0100
++++ gdb-7.8.1/gdb/testsuite/gdb.base/attach.exp 2014-10-30 20:23:54.151562867 +0100
@@ -256,11 +256,8 @@ proc do_attach_tests {} {
# Verify that the modification really happened.
@@ -76,14 +76,11 @@ index 6340496..5fb5c53 100644
# Allow the test process to exit, to cleanup after ourselves.
-@@ -451,6 +448,7 @@ proc test_command_line_attach_run {} {
- "-iex set\\ height\\ 0 -iex set\\ width\\ 0 --pid=$testpid -ex \"start\""]
+@@ -418,6 +415,7 @@ proc test_command_line_attach_run {} {
+ "-iex \"set height 0\" -iex \"set width 0\" --pid=$testpid -ex \"start\""]
if { $res != 0} {
fail $test
+ remote_exec build "kill -9 ${testpid}"
return $res
}
gdb_test_multiple "" $test {
-
---RnlQjJ0d97Da+TV1--
-
diff --git a/gdb-attach-fail-reasons-5of5.patch b/gdb-attach-fail-reasons-5of5.patch
index 1bb028b..75a7a5f 100644
--- a/gdb-attach-fail-reasons-5of5.patch
+++ b/gdb-attach-fail-reasons-5of5.patch
@@ -37,10 +37,10 @@ gdb/gdbserver/
(linux_create_inferior, linux_tracefork_child): Call it instead of
direct ptrace.
-Index: gdb-7.8/gdb/common/linux-ptrace.c
+Index: gdb-7.8.1/gdb/common/linux-ptrace.c
===================================================================
---- gdb-7.8.orig/gdb/common/linux-ptrace.c 2014-07-29 19:31:01.893149317 +0200
-+++ gdb-7.8/gdb/common/linux-ptrace.c 2014-07-29 19:31:05.806154887 +0200
+--- gdb-7.8.1.orig/gdb/common/linux-ptrace.c 2014-10-30 18:33:37.271097644 +0100
++++ gdb-7.8.1/gdb/common/linux-ptrace.c 2014-10-30 18:33:39.641092763 +0100
@@ -32,6 +32,10 @@
#include <stdint.h>
@@ -81,10 +81,10 @@ Index: gdb-7.8/gdb/common/linux-ptrace.c
+ "(gdb) shell sudo setsebool deny_ptrace=0"));
+#endif /* HAVE_LIBSELINUX */
+}
-Index: gdb-7.8/gdb/common/linux-ptrace.h
+Index: gdb-7.8.1/gdb/common/linux-ptrace.h
===================================================================
---- gdb-7.8.orig/gdb/common/linux-ptrace.h 2014-07-29 19:31:01.893149317 +0200
-+++ gdb-7.8/gdb/common/linux-ptrace.h 2014-07-29 19:31:05.807154887 +0200
+--- gdb-7.8.1.orig/gdb/common/linux-ptrace.h 2014-10-30 18:33:37.271097644 +0100
++++ gdb-7.8.1/gdb/common/linux-ptrace.h 2014-10-30 18:33:39.642092761 +0100
@@ -85,6 +85,7 @@ struct buffer;
extern void linux_ptrace_attach_fail_reason (pid_t pid, struct buffer *buffer);
@@ -93,11 +93,11 @@ Index: gdb-7.8/gdb/common/linux-ptrace.h
extern void linux_enable_event_reporting (pid_t pid);
extern void linux_disable_event_reporting (pid_t pid);
extern int linux_supports_tracefork (void);
-Index: gdb-7.8/gdb/configure.ac
+Index: gdb-7.8.1/gdb/configure.ac
===================================================================
---- gdb-7.8.orig/gdb/configure.ac 2014-07-29 19:31:01.894149319 +0200
-+++ gdb-7.8/gdb/configure.ac 2014-07-29 19:31:05.807154887 +0200
-@@ -2158,6 +2158,10 @@ case $host_os in
+--- gdb-7.8.1.orig/gdb/configure.ac 2014-10-30 18:33:37.272097642 +0100
++++ gdb-7.8.1/gdb/configure.ac 2014-10-30 18:33:39.643092759 +0100
+@@ -2161,6 +2161,10 @@ case $host_os in
esac
AC_DEFINE_UNQUOTED(GDBINIT,"$gdbinit",[The .gdbinit filename.])
@@ -108,10 +108,10 @@ Index: gdb-7.8/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.8/gdb/gdbserver/configure.ac
+Index: gdb-7.8.1/gdb/gdbserver/configure.ac
===================================================================
---- gdb-7.8.orig/gdb/gdbserver/configure.ac 2014-07-29 19:31:01.895149320 +0200
-+++ gdb-7.8/gdb/gdbserver/configure.ac 2014-07-29 19:31:05.808154887 +0200
+--- gdb-7.8.1.orig/gdb/gdbserver/configure.ac 2014-10-30 18:33:37.273097640 +0100
++++ gdb-7.8.1/gdb/gdbserver/configure.ac 2014-10-30 18:33:39.643092759 +0100
@@ -454,6 +454,10 @@ if $want_ipa ; then
fi
fi
@@ -123,10 +123,10 @@ Index: gdb-7.8/gdb/gdbserver/configure.ac
AC_SUBST(GDBSERVER_DEPFILES)
AC_SUBST(GDBSERVER_LIBS)
AC_SUBST(srv_xmlbuiltin)
-Index: gdb-7.8/gdb/gdbserver/linux-low.c
+Index: gdb-7.8.1/gdb/gdbserver/linux-low.c
===================================================================
---- gdb-7.8.orig/gdb/gdbserver/linux-low.c 2014-07-29 19:31:01.897149323 +0200
-+++ gdb-7.8/gdb/gdbserver/linux-low.c 2014-07-29 19:31:05.809154889 +0200
+--- gdb-7.8.1.orig/gdb/gdbserver/linux-low.c 2014-10-30 18:33:37.275097636 +0100
++++ gdb-7.8.1/gdb/gdbserver/linux-low.c 2014-10-30 18:33:39.644092757 +0100
@@ -541,6 +541,29 @@ add_lwp (ptid_t ptid)
return lwp;
}
@@ -166,10 +166,10 @@ Index: gdb-7.8/gdb/gdbserver/linux-low.c
#ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */
signal (__SIGRTMIN + 1, SIG_DFL);
-Index: gdb-7.8/gdb/inf-ptrace.c
+Index: gdb-7.8.1/gdb/inf-ptrace.c
===================================================================
---- gdb-7.8.orig/gdb/inf-ptrace.c 2014-07-29 19:31:01.898149324 +0200
-+++ gdb-7.8/gdb/inf-ptrace.c 2014-07-29 19:31:05.809154889 +0200
+--- gdb-7.8.1.orig/gdb/inf-ptrace.c 2014-10-30 18:33:37.276097634 +0100
++++ gdb-7.8.1/gdb/inf-ptrace.c 2014-10-30 18:33:39.645092755 +0100
@@ -105,7 +105,15 @@ static void
inf_ptrace_me (void)
{
@@ -186,10 +186,10 @@ Index: gdb-7.8/gdb/inf-ptrace.c
}
/* Start a new inferior Unix child process. EXEC_FILE is the file to
-Index: gdb-7.8/gdb/linux-nat.c
+Index: gdb-7.8.1/gdb/linux-nat.c
===================================================================
---- gdb-7.8.orig/gdb/linux-nat.c 2014-07-29 19:31:01.899149326 +0200
-+++ gdb-7.8/gdb/linux-nat.c 2014-07-29 19:31:05.811154893 +0200
+--- gdb-7.8.1.orig/gdb/linux-nat.c 2014-10-30 18:33:37.277097631 +0100
++++ gdb-7.8.1/gdb/linux-nat.c 2014-10-30 18:33:39.646092753 +0100
@@ -1291,6 +1291,7 @@ linux_nat_create_inferior (struct target
#ifdef HAVE_PERSONALITY
int personality_orig = 0, personality_set = 0;
@@ -235,11 +235,11 @@ Index: gdb-7.8/gdb/linux-nat.c
}
static void
-Index: gdb-7.8/gdb/config.in
+Index: gdb-7.8.1/gdb/config.in
===================================================================
---- gdb-7.8.orig/gdb/config.in 2014-07-29 19:31:01.900149327 +0200
-+++ gdb-7.8/gdb/config.in 2014-07-29 19:31:44.600210090 +0200
-@@ -219,6 +219,9 @@
+--- gdb-7.8.1.orig/gdb/config.in 2014-10-30 18:33:37.278097630 +0100
++++ gdb-7.8.1/gdb/config.in 2014-10-30 18:34:36.165976366 +0100
+@@ -216,6 +216,9 @@
/* Define if librpm library is being used. */
#undef HAVE_LIBRPM
@@ -249,21 +249,21 @@ Index: gdb-7.8/gdb/config.in
/* Define to 1 if you have the <libunwind-ia64.h> header file. */
#undef HAVE_LIBUNWIND_IA64_H
-@@ -354,6 +357,9 @@
+@@ -351,6 +354,9 @@
/* Define to 1 if you have the `scm_new_smob' function. */
#undef HAVE_SCM_NEW_SMOB
+/* Define to 1 if you have the <selinux/selinux.h> header file. */
+#undef HAVE_SELINUX_SELINUX_H
+
- /* Define to 1 if you have the `setenv' function. */
- #undef HAVE_SETENV
+ /* Define to 1 if you have the `setlocale' function. */
+ #undef HAVE_SETLOCALE
-Index: gdb-7.8/gdb/configure
+Index: gdb-7.8.1/gdb/configure
===================================================================
---- gdb-7.8.orig/gdb/configure 2014-07-29 19:31:01.903149331 +0200
-+++ gdb-7.8/gdb/configure 2014-07-29 19:31:05.815154898 +0200
-@@ -13392,6 +13392,64 @@ cat >>confdefs.h <<_ACEOF
+--- gdb-7.8.1.orig/gdb/configure 2014-10-30 18:33:37.281097623 +0100
++++ gdb-7.8.1/gdb/configure 2014-10-30 18:33:39.649092747 +0100
+@@ -13400,6 +13400,64 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
@@ -328,10 +328,10 @@ Index: gdb-7.8/gdb/configure
# Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
# except that the argument to --with-sysroot is optional.
-Index: gdb-7.8/gdb/gdbserver/config.in
+Index: gdb-7.8.1/gdb/gdbserver/config.in
===================================================================
---- gdb-7.8.orig/gdb/gdbserver/config.in 2014-07-29 19:31:01.904149333 +0200
-+++ gdb-7.8/gdb/gdbserver/config.in 2014-07-29 19:31:05.815154898 +0200
+--- gdb-7.8.1.orig/gdb/gdbserver/config.in 2014-10-30 18:33:37.282097621 +0100
++++ gdb-7.8.1/gdb/gdbserver/config.in 2014-10-30 18:33:39.649092747 +0100
@@ -81,6 +81,9 @@
/* Define to 1 if you have the `mcheck' library (-lmcheck). */
#undef HAVE_LIBMCHECK
@@ -352,10 +352,10 @@ Index: gdb-7.8/gdb/gdbserver/config.in
/* Define to 1 if you have the <sgtty.h> header file. */
#undef HAVE_SGTTY_H
-Index: gdb-7.8/gdb/gdbserver/configure
+Index: gdb-7.8.1/gdb/gdbserver/configure
===================================================================
---- gdb-7.8.orig/gdb/gdbserver/configure 2014-07-29 19:31:01.905149334 +0200
-+++ gdb-7.8/gdb/gdbserver/configure 2014-07-29 19:31:05.817154901 +0200
+--- gdb-7.8.1.orig/gdb/gdbserver/configure 2014-10-30 18:33:37.283097619 +0100
++++ gdb-7.8.1/gdb/gdbserver/configure 2014-10-30 18:33:39.650092745 +0100
@@ -6170,6 +6170,64 @@ if $want_ipa ; then
fi
fi
diff --git a/gdb-upstream.patch b/gdb-upstream.patch
index 2c0cfc9..028fe7a 100644
--- a/gdb-upstream.patch
+++ b/gdb-upstream.patch
@@ -65,1806 +65,3 @@ index 0e0202d..d849b4c 100644
# gdbserver does not have this issue.
if ![is_remote target] {
setup_kfail "*-*-*" gdb/15934
-From 63fcc8bcd98a8cd9672dd8672f663662f8caa811 Mon Sep 17 00:00:00 2001
-From: Pedro Alves <palves at redhat.com>
-Date: Wed, 1 Oct 2014 10:44:08 +0100
-Subject: [PATCH 13/37] Aarch64: Make CPSR a 32-bit register again in the
- target description
-
-This reverts commit a4d9ba85 - 'AARCH64: Change cpsr type to be
-64bit.'.
-
-Even though Linux's ptrace exposes CPSR as 64-bit, CPSR is really
-32-bit, and basing GDB's fundamentals on a particular OS's ptrace(2)
-implementation is a bad idea.
-
-In addition, while that commit intended to fix big endian Aarch64, it
-ended up breaking floating point debugging against GDBserver, for both
-big and little endian, because it changed the CPSR to be 64-bit in the
-features/aarch64-core.xml file, but missed regenerating the
-regformats/aarch64.dat file. If we generate it now, we see this:
-
- diff --git c/gdb/regformats/aarch64.dat w/gdb/regformats/aarch64.dat
- index afe1028..0d32183 100644
- --- c/gdb/regformats/aarch64.dat
- +++ w/gdb/regformats/aarch64.dat
- @@ -35,7 +35,7 @@ expedite:x29,sp,pc
- 64:x30
- 64:sp
- 64:pc
- -32:cpsr
- +64:cpsr
- 128:v0
- 128:v1
- 128:v2
-
-IOW, that commit left regformats/aarch64.dat still considering CPSR as
-32-bits. regformats/aarch64.dat is used by GDBserver for its internal
-regcache layout, and for the g/G packet register block. See the
-generated aarch64.c file in GDBserver's build dir.
-
-So the target description xml file that GDBserver reports to GDB is
-now claiming that CPSR is 64-bit, but what GDBserver actually puts in
-the g/G register packets is 32-bits. Because GDB thinks CPSR is
-64-bit (because that's what the XML description says), GDB will be
-reading the remaining 32-bit bits of CPSR out of v0 (the register
-immediately afterwards), and then all the registers that follow CPSR
-in the register packet end up wrong in GDB, because they're being read
-from the wrong offsets...
-
-gdb/
-2014-10-01 Pedro Alves <palves at redhat.com>
-
- * features/aarch64-core.xml (cpsr): Change back to 32-bit.
- * features/aarch64.c: Regenerate.
----
- gdb/ChangeLog | 5 +++++
- gdb/features/aarch64-core.xml | 2 +-
- gdb/features/aarch64.c | 2 +-
- 3 files changed, 7 insertions(+), 2 deletions(-)
-
-### a/gdb/ChangeLog
-### b/gdb/ChangeLog
-## -1,3 +1,8 @@
-+2014-10-01 Pedro Alves <palves at redhat.com>
-+
-+ * features/aarch64-core.xml (cpsr): Change back to 32-bit.
-+ * features/aarch64.c: Regenerate.
-+
- 2014-09-11 Pedro Alves <palves at redhat.com>
-
- PR gdb/17347
---- a/gdb/features/aarch64-core.xml
-+++ b/gdb/features/aarch64-core.xml
-@@ -42,5 +42,5 @@
- <reg name="sp" bitsize="64" type="data_ptr"/>
-
- <reg name="pc" bitsize="64" type="code_ptr"/>
-- <reg name="cpsr" bitsize="64"/>
-+ <reg name="cpsr" bitsize="32"/>
- </feature>
---- a/gdb/features/aarch64.c
-+++ b/gdb/features/aarch64.c
-@@ -50,7 +50,7 @@ initialize_tdesc_aarch64 (void)
- tdesc_create_reg (feature, "x30", 30, 1, NULL, 64, "int");
- tdesc_create_reg (feature, "sp", 31, 1, NULL, 64, "data_ptr");
- tdesc_create_reg (feature, "pc", 32, 1, NULL, 64, "code_ptr");
-- tdesc_create_reg (feature, "cpsr", 33, 1, NULL, 64, "int");
-+ tdesc_create_reg (feature, "cpsr", 33, 1, NULL, 32, "int");
-
- feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.fpu");
- field_type = tdesc_named_type (feature, "ieee_double");
---
-1.9.3
-
-From 244fe82b9c6542557a1c2d4d21af1092692d377f Mon Sep 17 00:00:00 2001
-From: Doug Evans <dje at google.com>
-Date: Wed, 15 Oct 2014 13:23:23 -0700
-Subject: [PATCH 29/37] PR python/17364
-
-gdb/ChangeLog:
-
- * python/lib/gdb/__init__.py (packages): Add "printer".
- * python/lib/gdb/command/bound_registers.py: Moved to ...
- * python/lib/gdb/printer/bound_registers.py: ... here.
- Add printer to global set of builtin printers. Rename printer from
- "bound" to "mpx_bound128".
- * python/lib/gdb/printing.py (_builtin_pretty_printers): New global,
- registered as global "builtin" printer.
- (add_builtin_pretty_printer): New function.
- * data-directory/Makefile.in (PYTHON_FILE_LIST): Update, and add
- gdb/printer/__init__.py.
----
- gdb/ChangeLog | 15 +++++++++
- gdb/data-directory/Makefile.in | 5 +--
- gdb/python/lib/gdb/__init__.py | 3 +-
- gdb/python/lib/gdb/command/bound_registers.py | 45 ---------------------------
- gdb/python/lib/gdb/printer/__init__.py | 14 +++++++++
- gdb/python/lib/gdb/printer/bound_registers.py | 36 +++++++++++++++++++++
- gdb/python/lib/gdb/printing.py | 14 +++++++++
- 7 files changed, 84 insertions(+), 48 deletions(-)
- delete mode 100644 gdb/python/lib/gdb/command/bound_registers.py
- create mode 100644 gdb/python/lib/gdb/printer/__init__.py
- create mode 100644 gdb/python/lib/gdb/printer/bound_registers.py
-
-### a/gdb/ChangeLog
-### b/gdb/ChangeLog
-## -1,3 +1,18 @@
-+2014-10-15 Doug Evans <dje at google.com>
-+ Walfred Tedeschi <walfred.tedeschi at intel.com>
-+
-+ PR python/17364
-+ * python/lib/gdb/__init__.py (packages): Add "printer".
-+ * python/lib/gdb/command/bound_registers.py: Moved to ...
-+ * python/lib/gdb/printer/bound_registers.py: ... here.
-+ Add printer to global set of builtin printers. Rename printer from
-+ "bound" to "mpx_bound128".
-+ * python/lib/gdb/printing.py (_builtin_pretty_printers): New global,
-+ registered as global "builtin" printer.
-+ (add_builtin_pretty_printer): New function.
-+ * data-directory/Makefile.in (PYTHON_FILE_LIST): Update, and add
-+ gdb/printer/__init__.py.
-+
- 2014-10-01 Pedro Alves <palves at redhat.com>
-
- * features/aarch64-core.xml (cpsr): Change back to 32-bit.
---- a/gdb/data-directory/Makefile.in
-+++ b/gdb/data-directory/Makefile.in
-@@ -64,7 +64,6 @@ PYTHON_FILE_LIST = \
- gdb/printing.py \
- gdb/prompt.py \
- gdb/xmethod.py \
-- gdb/command/bound_registers.py \
- gdb/command/__init__.py \
- gdb/command/xmethods.py \
- gdb/command/frame_filters.py \
-@@ -73,7 +72,9 @@ PYTHON_FILE_LIST = \
- gdb/command/prompt.py \
- gdb/command/explore.py \
- gdb/function/__init__.py \
-- gdb/function/strfns.py
-+ gdb/function/strfns.py \
-+ gdb/printer/__init__.py \
-+ gdb/printer/bound_registers.py
-
- @HAVE_PYTHON_TRUE at PYTHON_FILES = $(PYTHON_FILE_LIST)
- @HAVE_PYTHON_FALSE at PYTHON_FILES =
---- a/gdb/python/lib/gdb/__init__.py
-+++ b/gdb/python/lib/gdb/__init__.py
-@@ -81,7 +81,8 @@ PYTHONDIR = os.path.dirname(os.path.dirname(__file__))
-
- packages = [
- 'function',
-- 'command'
-+ 'command',
-+ 'printer'
- ]
-
- # pkgutil.iter_modules is not available prior to Python 2.6. Instead,
---- a/gdb/python/lib/gdb/command/bound_registers.py
-+++ /dev/null
-@@ -1,45 +0,0 @@
--# Pretty-printer utilities.
--# Copyright (C) 2013-2014 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/>.
--
--import gdb.printing
--
--class BoundPrinter:
-- """Adds size field to a _rawbound128 type."""
--
-- def __init__ (self, val):
-- self.val = val
--
-- def to_string (self):
-- upper = self.val["ubound"]
-- lower = self.val["lbound"]
-- size = (long) ((upper) - (lower))
-- if size > -1:
-- size = size + 1
-- result = '{lbound = %s, ubound = %s} : size %s' % (lower, upper, size)
-- return result
--
--# There are two pattern matching used: first one is related to a library
--# second is related to the type. Since we are displaying a register all
--# libraries are accepted. Type to be processed is the same present
--# in the xml file.
--
--def build_pretty_printer ():
-- pp = gdb.printing.RegexpCollectionPrettyPrinter (".*")
-- pp.add_printer ('bound', '^__gdb_builtin_type_bound128', BoundPrinter)
-- return pp
--
--gdb.printing.register_pretty_printer (gdb.current_objfile (),
-- build_pretty_printer ())
---- /dev/null
-+++ b/gdb/python/lib/gdb/printer/__init__.py
-@@ -0,0 +1,14 @@
-+# Copyright (C) 2014 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/>.
---- /dev/null
-+++ b/gdb/python/lib/gdb/printer/bound_registers.py
-@@ -0,0 +1,36 @@
-+# Pretty-printers for bounds registers.
-+# Copyright (C) 2013-2014 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/>.
-+
-+import gdb.printing
-+
-+class MpxBound128Printer:
-+ """Adds size field to a mpx __gdb_builtin_type_bound128 type."""
-+
-+ def __init__ (self, val):
-+ self.val = val
-+
-+ def to_string (self):
-+ upper = self.val["ubound"]
-+ lower = self.val["lbound"]
-+ size = (long) ((upper) - (lower))
-+ if size > -1:
-+ size = size + 1
-+ result = '{lbound = %s, ubound = %s} : size %s' % (lower, upper, size)
-+ return result
-+
-+gdb.printing.add_builtin_pretty_printer ('mpx_bound128',
-+ '^__gdb_builtin_type_bound128',
-+ MpxBound128Printer)
---- a/gdb/python/lib/gdb/printing.py
-+++ b/gdb/python/lib/gdb/printing.py
-@@ -263,3 +263,17 @@ class FlagEnumerationPrinter(PrettyPrinter):
- return _EnumInstance(self.enumerators, val)
- else:
- return None
-+
-+
-+# Builtin pretty-printers.
-+# The set is defined as empty, and files in printing/*.py add their printers
-+# to this with add_builtin_pretty_printer.
-+
-+_builtin_pretty_printers = RegexpCollectionPrettyPrinter("builtin")
-+
-+register_pretty_printer(None, _builtin_pretty_printers)
-+
-+# Add a builtin pretty-printer.
-+
-+def add_builtin_pretty_printer(name, regexp, printer):
-+ _builtin_pretty_printers.add_printer(name, regexp, printer)
---
-1.9.3
-
-From 92e08c0d191908b7315603558226c7ca0bfa86a5 Mon Sep 17 00:00:00 2001
-From: Pedro Alves <palves at redhat.com>
-Date: Fri, 17 Oct 2014 13:49:28 +0100
-Subject: [PATCH 32/37] Make common code handle target_terminal_* idempotency
-
-I found a place that should be giving back the terminal to the target,
-but only if the target was already owning it. So I need to add a
-getter for who owns the terminal.
-
-The trouble is that several places/target have their own globals to
-track this state:
-
- - inflow.c:terminal_is_ours
- - remote.c:remote_async_terminal_ours_p
- - linux-nat.c:async_terminal_is_ours
- - go32-nat.c:terminal_is_ours
-
-While one might think of adding a new target_ops method to query this,
-conceptually, this state isn't really part of a particular target_ops.
-Considering multi-target, the core shouldn't have to ask all targets
-to know whether it's GDB that owns the terminal. There's only one GDB
-(or rather, only one top level interpreter).
-
-So what this comment does is add a new global that is tracked by the
-core instead. A subsequent pass may later remove the other globals.
-
-Tested on x86_64 Fedora 20, native and gdbserver.
-
-gdb/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- * target.c (enum terminal_state): New enum.
- (terminal_state): New global.
- (target_terminal_init): New function.
- (target_terminal_inferior): Skip if inferior already owns the
- terminal.
- (target_terminal_ours, target_terminal_ours_for_output): New
- functions.
- * target.h (target_terminal_init): Convert to function prototype.
- (target_terminal_ours_for_output): Convert to function prototype
- and tweak comment.
- (target_terminal_ours): Convert to function prototype and tweak
- comment.
- * windows-nat.c (do_initial_windows_stuff): Call
- target_terminal_init instead of child_terminal_init_with_pgrp.
----
- gdb/ChangeLog | 17 +++++++++++++++++
- gdb/target.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- gdb/target.h | 20 +++++++-------------
- gdb/windows-nat.c | 2 +-
- 4 files changed, 81 insertions(+), 14 deletions(-)
-
-### a/gdb/ChangeLog
-### b/gdb/ChangeLog
-## -1,3 +1,20 @@
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
-+ * target.c (enum terminal_state): New enum.
-+ (terminal_state): New global.
-+ (target_terminal_init): New function.
-+ (target_terminal_inferior): Skip if inferior already owns the
-+ terminal.
-+ (target_terminal_ours, target_terminal_ours_for_output): New
-+ functions.
-+ * target.h (target_terminal_init): Convert to function prototype.
-+ (target_terminal_ours_for_output): Convert to function prototype
-+ and tweak comment.
-+ (target_terminal_ours): Convert to function prototype and tweak
-+ comment.
-+ * windows-nat.c (do_initial_windows_stuff): Call
-+ target_terminal_init instead of child_terminal_init_with_pgrp.
-+
- 2014-10-15 Doug Evans <dje at google.com>
- Walfred Tedeschi <walfred.tedeschi at intel.com>
-
---- a/gdb/target.c
-+++ b/gdb/target.c
-@@ -482,6 +482,35 @@ target_load (char *arg, int from_tty)
- (*current_target.to_load) (¤t_target, arg, from_tty);
- }
-
-+/* Possible terminal states. */
-+
-+enum terminal_state
-+ {
-+ /* The inferior's terminal settings are in effect. */
-+ terminal_is_inferior = 0,
-+
-+ /* Some of our terminal settings are in effect, enough to get
-+ proper output. */
-+ terminal_is_ours_for_output = 1,
-+
-+ /* Our terminal settings are in effect, for output and input. */
-+ terminal_is_ours = 2
-+ };
-+
-+static enum terminal_state terminal_state;
-+
-+/* See target.h. */
-+
-+void
-+target_terminal_init (void)
-+{
-+ (*current_target.to_terminal_init) (¤t_target);
-+
-+ terminal_state = terminal_is_ours;
-+}
-+
-+/* See target.h. */
-+
- void
- target_terminal_inferior (void)
- {
-@@ -492,9 +521,36 @@ target_terminal_inferior (void)
- if (target_can_async_p () && !sync_execution)
- return;
-
-+ if (terminal_state == terminal_is_inferior)
-+ return;
-+
- /* If GDB is resuming the inferior in the foreground, install
- inferior's terminal modes. */
- (*current_target.to_terminal_inferior) (¤t_target);
-+ terminal_state = terminal_is_inferior;
-+}
-+
-+/* See target.h. */
-+
-+void
-+target_terminal_ours (void)
-+{
-+ if (terminal_state == terminal_is_ours)
-+ return;
-+
-+ (*current_target.to_terminal_ours) (¤t_target);
-+ terminal_state = terminal_is_ours;
-+}
-+
-+/* See target.h. */
-+
-+void
-+target_terminal_ours_for_output (void)
-+{
-+ if (terminal_state != terminal_is_inferior)
-+ return;
-+ (*current_target.to_terminal_ours_for_output) (¤t_target);
-+ terminal_state = terminal_is_ours_for_output;
- }
-
- static void
---- a/gdb/target.h
-+++ b/gdb/target.h
-@@ -1359,31 +1359,25 @@ extern int target_remove_breakpoint (struct gdbarch *gdbarch,
- /* Initialize the terminal settings we record for the inferior,
- before we actually run the inferior. */
-
--#define target_terminal_init() \
-- (*current_target.to_terminal_init) (¤t_target)
-+extern void target_terminal_init (void);
-
- /* Put the inferior's terminal settings into effect.
- This is preparation for starting or resuming the inferior. */
-
- extern void target_terminal_inferior (void);
-
--/* Put some of our terminal settings into effect,
-- enough to get proper results from our output,
-- but do not change into or out of RAW mode
-- so that no input is discarded.
-+/* Put some of our terminal settings into effect, enough to get proper
-+ results from our output, but do not change into or out of RAW mode
-+ so that no input is discarded. This is a no-op if terminal_ours
-+ was most recently called. */
-
-- After doing this, either terminal_ours or terminal_inferior
-- should be called to get back to a normal state of affairs. */
--
--#define target_terminal_ours_for_output() \
-- (*current_target.to_terminal_ours_for_output) (¤t_target)
-+extern void target_terminal_ours_for_output (void);
-
- /* Put our terminal settings into effect.
- First record the inferior's terminal settings
- so they can be restored properly later. */
-
--#define target_terminal_ours() \
-- (*current_target.to_terminal_ours) (¤t_target)
-+extern void target_terminal_ours (void);
-
- /* Save our terminal settings.
- This is called from TUI after entering or leaving the curses
---- a/gdb/windows-nat.c
-+++ b/gdb/windows-nat.c
-@@ -1744,7 +1744,7 @@ do_initial_windows_stuff (struct target_ops *ops, DWORD pid, int attaching)
- current thread until we report an event out of windows_wait. */
- inferior_ptid = pid_to_ptid (pid);
-
-- child_terminal_init_with_pgrp (pid);
-+ target_terminal_init ();
- target_terminal_inferior ();
-
- windows_initialization_done = 0;
---
-1.9.3
-
-From 04f0515702a6e5711d71203fcc0ea488161ba086 Mon Sep 17 00:00:00 2001
-From: Pedro Alves <palves at redhat.com>
-Date: Fri, 17 Oct 2014 13:31:25 +0100
-Subject: [PATCH 33/37] PR gdb/17472: With annotations, input while executing
- in the foreground crashes readline/GDB
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Jan caught an intermittent GDB crash with the annota1.exp test:
-
- Starting program: .../gdb/testsuite/gdb.base/annota1 ^M
- [...]
- FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout)
- [...]
- readline: readline_callback_read_char() called with no handler!^M
- ERROR: Process no longer exists
-
-All we need to is to continue the inferior in the foreground, and type
-a command while the inferior is running. E.g.:
-
- (gdb) set annotate 2
-
- ▒▒pre-prompt
- (gdb)
- ▒▒prompt
- c
-
- ▒▒post-prompt
- Continuing.
-
- ▒▒starting
-
- ▒▒frames-invalid
-
- *inferior is running now*
-
- p 1<ret>
-
- readline: readline_callback_read_char() called with no handler!
- Aborted (core dumped)
- $
-
-
-When we run a foreground execution command we call
-target_terminal_inferior to stop GDB from processing input, and to put
-the inferior's terminal settings in effect. Then we tell readline to
-hide the prompt with display_gdb_prompt, which clears readline's input
-callback too. When the target stops, we call target_terminal_ours,
-which re-installs stdin in the event loop, and then we redisplay the
-prompt, reinstalling the readline callbacks.
-
-However, when annotations are in effect, the "frames-invalid"
-annotation code calls target_terminal_ours after 'resume' had already
-called target_terminal_inferior:
-
- (top-gdb) bt
- #0 0x000000000056b82f in annotate_frames_invalid () at gdb/annotate.c:219
- #1 0x000000000072e6cc in reinit_frame_cache () at gdb/frame.c:1705
- #2 0x0000000000594bb9 in registers_changed_ptid (ptid=...) at gdb/regcache.c:612
- #3 0x000000000064cca1 in target_resume (ptid=..., step=1, signal=GDB_SIGNAL_0) at gdb/target.c:2136
- #4 0x00000000005f57af in resume (step=1, sig=GDB_SIGNAL_0) at gdb/infrun.c:2263
- #5 0x00000000005f6051 in proceed (addr=18446744073709551615, siggnal=GDB_SIGNAL_DEFAULT, step=1) at gdb/infrun.c:2613
-
-And then once we hide the prompt and remove readline's input handler
-callback, we're in a bad state. We end up with the target running
-supposedly in the foreground, but with stdin still installed on the
-event loop. Any input then calls into readline, which aborts because
-no rl_linefunc callback handler is installed:
-
- Program received signal SIGABRT, Aborted.
- 0x0000003b36a35877 in __GI_raise (sig=sig at entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
- 56 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
-
- (top-gdb) bt
- #0 0x0000003b36a35877 in __GI_raise (sig=sig at entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
- #1 0x0000003b36a36f68 in __GI_abort () at abort.c:89
- During symbol reading, debug info gives source 9 included from file at zero line 0.
- During symbol reading, debug info gives command-line macro definition with non-zero line 19: _STDC_PREDEF_H 1.
- #2 0x0000000000784a25 in rl_callback_read_char () at src/readline/callback.c:116
- #3 0x0000000000619111 in rl_callback_read_char_wrapper (client_data=0x0) at src/gdb/event-top.c:167
- #4 0x00000000006194e7 in stdin_event_handler (error=0, client_data=0x0) at src/gdb/event-top.c:373
- #5 0x00000000006180da in handle_file_event (data=...) at src/gdb/event-loop.c:763
- #6 0x00000000006175c1 in process_event () at src/gdb/event-loop.c:340
- #7 0x0000000000617688 in gdb_do_one_event () at src/gdb/event-loop.c:404
- #8 0x00000000006176d8 in start_event_loop () at src/gdb/event-loop.c:429
- #9 0x0000000000619143 in cli_command_loop (data=0x0) at src/gdb/event-top.c:182
- #10 0x000000000060f4c8 in current_interp_command_loop () at src/gdb/interps.c:318
- #11 0x0000000000610691 in captured_command_loop (data=0x0) at src/gdb/main.c:323
- #12 0x000000000060c385 in catch_errors (func=0x610676 <captured_command_loop>, func_args=0x0, errstring=0x900241 "", mask=RETURN_MASK_ALL)
- at src/gdb/exceptions.c:237
- #13 0x0000000000611b8f in captured_main (data=0x7fffffffd7b0) at src/gdb/main.c:1151
- #14 0x000000000060c385 in catch_errors (func=0x610a8e <captured_main>, func_args=0x7fffffffd7b0, errstring=0x900241 "", mask=RETURN_MASK_ALL)
- at src/gdb/exceptions.c:237
- #15 0x0000000000611bb8 in gdb_main (args=0x7fffffffd7b0) at src/gdb/main.c:1159
- #16 0x000000000045ef57 in main (argc=3, argv=0x7fffffffd8b8) at src/gdb/gdb.c:32
-
-The fix is to make the annotation code call target_terminal_inferior
-again after printing, if the inferior's settings were in effect.
-
-While at it, when we're doing output only, instead of
-target_terminal_ours, we should call target_terminal_ours_for_output.
-The latter doesn't actually remove stdin from the event loop, and also
-leaves SIGINT forwarded to the target.
-
-New test included.
-
-Tested on x86_64 Fedora 20, native and gdbserver.
-
-gdb/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- PR gdb/17472
- * annotate.c (annotate_breakpoints_invalid): Use
- target_terminal_our_for_output instead of target_terminal_ours.
- Give back the terminal to the target.
- (annotate_frames_invalid): Likewise.
-
-gdb/testsuite/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- PR gdb/17472
- * gdb.base/annota-input-while-running.c: New file.
- * gdb.base/annota-input-while-running.exp: New file.
----
- gdb/ChangeLog | 8 ++
- gdb/annotate.c | 22 +++-
- gdb/target.c | 8 ++
- gdb/target.h | 5 +
- gdb/testsuite/ChangeLog | 6 +
- .../gdb.base/annota-input-while-running.c | 25 ++++
- .../gdb.base/annota-input-while-running.exp | 130 +++++++++++++++++++++
- 7 files changed, 202 insertions(+), 2 deletions(-)
- create mode 100644 gdb/testsuite/gdb.base/annota-input-while-running.c
- create mode 100644 gdb/testsuite/gdb.base/annota-input-while-running.exp
-
-### a/gdb/ChangeLog
-### b/gdb/ChangeLog
-## -1,5 +1,13 @@
- 2014-10-17 Pedro Alves <palves at redhat.com>
-
-+ PR gdb/17472
-+ * annotate.c (annotate_breakpoints_invalid): Use
-+ target_terminal_our_for_output instead of target_terminal_ours.
-+ Give back the terminal to the target.
-+ (annotate_frames_invalid): Likewise.
-+
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
- * target.c (enum terminal_state): New enum.
- (terminal_state): New global.
- (target_terminal_init): New function.
---- a/gdb/annotate.c
-+++ b/gdb/annotate.c
-@@ -72,8 +72,17 @@ annotate_breakpoints_invalid (void)
- && (!breakpoints_invalid_emitted
- || async_background_execution_p ()))
- {
-- target_terminal_ours ();
-+ /* If the inferior owns the terminal (e.g., we're resuming),
-+ make sure to leave with the inferior still owning it. */
-+ int was_inferior = target_terminal_is_inferior ();
-+
-+ target_terminal_ours_for_output ();
-+
- printf_unfiltered (("\n\032\032breakpoints-invalid\n"));
-+
-+ if (was_inferior)
-+ target_terminal_inferior ();
-+
- breakpoints_invalid_emitted = 1;
- }
- }
-@@ -210,8 +219,17 @@ annotate_frames_invalid (void)
- && (!frames_invalid_emitted
- || async_background_execution_p ()))
- {
-- target_terminal_ours ();
-+ /* If the inferior owns the terminal (e.g., we're resuming),
-+ make sure to leave with the inferior still owning it. */
-+ int was_inferior = target_terminal_is_inferior ();
-+
-+ target_terminal_ours_for_output ();
-+
- printf_unfiltered (("\n\032\032frames-invalid\n"));
-+
-+ if (was_inferior)
-+ target_terminal_inferior ();
-+
- frames_invalid_emitted = 1;
- }
- }
---- a/gdb/target.c
-+++ b/gdb/target.c
-@@ -511,6 +511,14 @@ target_terminal_init (void)
-
- /* See target.h. */
-
-+int
-+target_terminal_is_inferior (void)
-+{
-+ return (terminal_state == terminal_is_inferior);
-+}
-+
-+/* See target.h. */
-+
- void
- target_terminal_inferior (void)
- {
---- a/gdb/target.h
-+++ b/gdb/target.h
-@@ -1356,6 +1356,11 @@ extern int target_insert_breakpoint (struct gdbarch *gdbarch,
- extern int target_remove_breakpoint (struct gdbarch *gdbarch,
- struct bp_target_info *bp_tgt);
-
-+/* Returns true if the terminal settings of the inferior are in
-+ effect. */
-+
-+extern int target_terminal_is_inferior (void);
-+
- /* Initialize the terminal settings we record for the inferior,
- before we actually run the inferior. */
-
-### a/gdb/testsuite/ChangeLog
-### b/gdb/testsuite/ChangeLog
-## -1,3 +1,9 @@
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
-+ PR gdb/17472
-+ * gdb.base/annota-input-while-running.c: New file.
-+ * gdb.base/annota-input-while-running.exp: New file.
-+
- 2014-09-11 Pedro Alves <palves at redhat.com>
-
- PR gdb/17347
---- /dev/null
-+++ b/gdb/testsuite/gdb.base/annota-input-while-running.c
-@@ -0,0 +1,25 @@
-+/* This testcase is part of GDB, the GNU debugger.
-+
-+ Copyright 2014 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/>. */
-+
-+#include <unistd.h>
-+
-+int
-+main (void)
-+{
-+ sleep (5);
-+ return 0; /* set break here */
-+}
---- /dev/null
-+++ b/gdb/testsuite/gdb.base/annota-input-while-running.exp
-@@ -0,0 +1,130 @@
-+# Copyright 1999-2014 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 that annotations support doesn't leave GDB's terminal settings
-+# into effect when we run a foreground command.
-+
-+if [is_remote target] then {
-+ # We cannot use runto_main because of the different prompt we get
-+ # when using annotation level 2.
-+ return 0
-+}
-+
-+standard_testfile
-+
-+if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug] == -1} {
-+ return -1
-+}
-+
-+# Break at main
-+
-+gdb_test "break main" \
-+ "Breakpoint.*at.* file .*$srcfile.*\\." \
-+ "breakpoint main"
-+
-+# NOTE: this prompt is OK only when the annotation level is > 1
-+# NOTE: When this prompt is in use the gdb_test procedure cannot be
-+# used because it assumes that the last char after the gdb_prompt is a
-+# white space. This is not true with this annotated prompt. So we
-+# must use the gdb_annota_test replacement below, or
-+# gdb_test_multiple.
-+
-+set old_gdb_prompt $gdb_prompt
-+set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"
-+
-+# Like gdb_test, but cope with the annotation prompt.
-+proc gdb_annota_test {command pattern message} {
-+ global gdb_prompt
-+
-+ gdb_test_multiple $command $message {
-+ -re "$pattern$gdb_prompt$" {
-+ pass "$message"
-+ }
-+ -re "$gdb_prompt$" {
-+ fail "$message"
-+ }
-+ }
-+}
-+
-+# Set the annotation level to 2.
-+
-+set test "annotation set at level 2"
-+gdb_annota_test "set annotate 2" ".*" "annotation set at level 2"
-+
-+# Run to main.
-+
-+gdb_annota_test "run" \
-+ "\r\n\032\032post-prompt.*\r\n\r\n\032\032stopped.*" \
-+ "run until main breakpoint"
-+
-+set test "delete breakpoints"
-+gdb_test_multiple "delete" $test {
-+ -re "Delete all breakpoints. .y or n." {
-+ send_gdb "y\n"
-+ exp_continue
-+ }
-+ -re "$gdb_prompt$" {
-+ pass $test
-+ }
-+}
-+
-+# Set the target running, and then type something. GDB used to have a
-+# bug where it'd be accepting input even though the target was
-+# supposedly resumed in the foreground. This ultimately resulted in
-+# readline aborting.
-+
-+set linenum [gdb_get_line_number "set break here"]
-+
-+gdb_annota_test "break $linenum" \
-+ "Breakpoint .*$srcfile, line .*" \
-+ "break after sleep"
-+
-+# Continue, and wait a bit to make sure the inferior really starts
-+# running. Wait less than much the program sleeps, which is 5
-+# seconds, though.
-+set saw_continuing 0
-+set test "continue"
-+gdb_test_multiple $test $test {
-+ -timeout 2
-+ -re "Continuing\\." {
-+ set saw_continuing 1
-+ exp_continue
-+ }
-+ timeout {
-+ gdb_assert $saw_continuing $test
-+ }
-+}
-+
-+# Type something.
-+send_gdb "print 1\n"
-+
-+# Poor buggy GDB would crash before the breakpoint was hit.
-+set test "breakpoint hit"
-+gdb_test_multiple "" $test {
-+ -re "stopped\r\n$gdb_prompt" {
-+ pass $test
-+ }
-+}
-+
-+set test "print command result"
-+gdb_test_multiple "" $test {
-+ -re "\r\n1\r\n\r\n\032\032value-history-end\r\n$gdb_prompt" {
-+ pass $test
-+ }
-+}
-+
-+# Restore the original prompt for the rest of the testsuite.
-+
-+set gdb_prompt $old_gdb_prompt
---
-1.9.3
-
-From e37951dc10da6940ef354f062fc43ee03687c571 Mon Sep 17 00:00:00 2001
-From: Pedro Alves <palves at redhat.com>
-Date: Fri, 17 Oct 2014 13:31:25 +0100
-Subject: [PATCH 34/37] PR gdb/17300: Input after "c -a" crashes readline/GDB
-
-If all threads in the target were already running when the user does
-"c -a", nothing puts the inferior's terminal settings in effect and
-removes stdin from the event loop, which we must when running a
-foreground command. The result is that user input afterwards crashes
-readline/gdb:
-
- (gdb) start
- Temporary breakpoint 1 at 0x4005d4: file continue-all-already-running.c, line 23.
- Starting program: continue-all-already-running
-
- Temporary breakpoint 1, main () at continue-all-already-running.c:23
- 23 sleep (10);
- (gdb) c -a&
- Continuing.
- (gdb) c -a
- Continuing.
- p 1
- readline: readline_callback_read_char() called with no handler!
- Aborted (core dumped)
- $
-
-Backtrace:
-
- Program received signal SIGABRT, Aborted.
- 0x0000003b36a35877 in __GI_raise (sig=sig at entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
- 56 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
- (top-gdb) p 1
- $1 = 1
- (top-gdb) bt
- #0 0x0000003b36a35877 in __GI_raise (sig=sig at entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
- #1 0x0000003b36a36f68 in __GI_abort () at abort.c:89
- #2 0x0000000000784aa9 in rl_callback_read_char () at readline/callback.c:116
- #3 0x0000000000619181 in rl_callback_read_char_wrapper (client_data=0x0) at gdb/event-top.c:167
- #4 0x0000000000619557 in stdin_event_handler (error=0, client_data=0x0) at gdb/event-top.c:373
- #5 0x000000000061814a in handle_file_event (data=...) at gdb/event-loop.c:763
- #6 0x0000000000617631 in process_event () at gdb/event-loop.c:340
- #7 0x00000000006176f8 in gdb_do_one_event () at gdb/event-loop.c:404
- #8 0x0000000000617748 in start_event_loop () at gdb/event-loop.c:429
- #9 0x00000000006191b3 in cli_command_loop (data=0x0) at gdb/event-top.c:182
- #10 0x000000000060f538 in current_interp_command_loop () at gdb/interps.c:318
- #11 0x0000000000610701 in captured_command_loop (data=0x0) at gdb/main.c:323
- #12 0x000000000060c3f5 in catch_errors (func=0x6106e6 <captured_command_loop>, func_args=0x0, errstring=0x9002c1 "", mask=RETURN_MASK_ALL)
- at gdb/exceptions.c:237
- #13 0x0000000000611bff in captured_main (data=0x7fffffffd780) at gdb/main.c:1151
- #14 0x000000000060c3f5 in catch_errors (func=0x610afe <captured_main>, func_args=0x7fffffffd780, errstring=0x9002c1 "", mask=RETURN_MASK_ALL)
- at gdb/exceptions.c:237
- #15 0x0000000000611c28 in gdb_main (args=0x7fffffffd780) at gdb/main.c:1159
- #16 0x000000000045ef97 in main (argc=5, argv=0x7fffffffd888) at gdb/gdb.c:32
- (top-gdb)
-
-Tested on x86_64 Fedora 20, native and gdbserver.
-
-gdb/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- PR gdb/17300
- * infcmd.c (continue_1): If continuing all threads in the
- foreground, make sure the inferior's terminal settings are put in
- effect.
-
-gdb/testsuite/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- PR gdb/17300
- * gdb.base/continue-all-already-running.c: New file.
- * gdb.base/continue-all-already-running.exp: New file.
----
- gdb/ChangeLog | 7 ++
- gdb/infcmd.c | 18 +++++
- gdb/testsuite/ChangeLog | 6 ++
- .../gdb.base/continue-all-already-running.c | 25 +++++++
- .../gdb.base/continue-all-already-running.exp | 79 ++++++++++++++++++++++
- 5 files changed, 135 insertions(+)
- create mode 100644 gdb/testsuite/gdb.base/continue-all-already-running.c
- create mode 100644 gdb/testsuite/gdb.base/continue-all-already-running.exp
-
-### a/gdb/ChangeLog
-### b/gdb/ChangeLog
-## -1,5 +1,12 @@
- 2014-10-17 Pedro Alves <palves at redhat.com>
-
-+ PR gdb/17300
-+ * infcmd.c (continue_1): If continuing all threads in the
-+ foreground, make sure the inferior's terminal settings are put in
-+ effect.
-+
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
- PR gdb/17472
- * annotate.c (annotate_breakpoints_invalid): Use
- target_terminal_our_for_output instead of target_terminal_ours.
---- a/gdb/infcmd.c
-+++ b/gdb/infcmd.c
-@@ -738,6 +738,24 @@ continue_1 (int all_threads)
-
- iterate_over_threads (proceed_thread_callback, NULL);
-
-+ if (sync_execution)
-+ {
-+ /* If all threads in the target were already running,
-+ proceed_thread_callback ends up never calling proceed,
-+ and so nothing calls this to put the inferior's terminal
-+ settings in effect and remove stdin from the event loop,
-+ which we must when running a foreground command. E.g.:
-+
-+ (gdb) c -a&
-+ Continuing.
-+ <all threads are running now>
-+ (gdb) c -a
-+ Continuing.
-+ <no thread was resumed, but the inferior now owns the terminal>
-+ */
-+ target_terminal_inferior ();
-+ }
-+
- /* Restore selected ptid. */
- do_cleanups (old_chain);
- }
-### a/gdb/testsuite/ChangeLog
-### b/gdb/testsuite/ChangeLog
-## -1,5 +1,11 @@
- 2014-10-17 Pedro Alves <palves at redhat.com>
-
-+ PR gdb/17300
-+ * gdb.base/continue-all-already-running.c: New file.
-+ * gdb.base/continue-all-already-running.exp: New file.
-+
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
- PR gdb/17472
- * gdb.base/annota-input-while-running.c: New file.
- * gdb.base/annota-input-while-running.exp: New file.
---- /dev/null
-+++ b/gdb/testsuite/gdb.base/continue-all-already-running.c
-@@ -0,0 +1,25 @@
-+/* This testcase is part of GDB, the GNU debugger.
-+
-+ Copyright 2014 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/>. */
-+
-+#include <unistd.h>
-+
-+int
-+main (void)
-+{
-+ sleep (10);
-+ return 0; /* set break here */
-+}
---- /dev/null
-+++ b/gdb/testsuite/gdb.base/continue-all-already-running.exp
-@@ -0,0 +1,79 @@
-+# Copyright (C) 2014 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 that "c -a" doesn't leave GDB processing input, even if all
-+# threads were already running. PR gdb/17300.
-+
-+standard_testfile
-+
-+if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile] } {
-+ return -1
-+}
-+
-+gdb_test_no_output "set non-stop on"
-+
-+if ![runto_main] {
-+ return
-+}
-+
-+set linenum [gdb_get_line_number "set break here"]
-+gdb_breakpoint "$linenum"
-+
-+gdb_test "c -a&" "Continuing\\."
-+
-+set test "no stop"
-+gdb_test_multiple "" $test {
-+ -timeout 1
-+ timeout {
-+ pass $test
-+ }
-+}
-+
-+# Paranoia. Check that input works after bg command.
-+gdb_test "print 1" " = 1"
-+
-+# Continue in the foreground, and wait one second to make sure the
-+# inferior really starts running. If we get a prompt to soon (e.g.,
-+# the program stops), this issues a fail.
-+set saw_continuing 0
-+set test "c -a"
-+gdb_test_multiple "c -a" $test {
-+ -timeout 1
-+ -re "Continuing\\." {
-+ set saw_continuing 1
-+ exp_continue
-+ }
-+ timeout {
-+ gdb_assert $saw_continuing $test
-+ }
-+}
-+
-+# Type something while the inferior is running in the foreground.
-+send_gdb "print 2\n"
-+
-+# Poor buggy GDB would crash before the breakpoint was hit.
-+set test "breakpoint hit"
-+gdb_test_multiple "" $test {
-+ -re "set break here ..\r\n$gdb_prompt " {
-+ pass $test
-+ }
-+}
-+
-+set test "print command result"
-+gdb_test_multiple "" $test {
-+ -re " = 2\r\n$gdb_prompt $" {
-+ pass $test
-+ }
-+}
---
-1.9.3
-
-From 36c57a3ceeb2260913f7d2d349e994dd844cbcae Mon Sep 17 00:00:00 2001
-From: Pedro Alves <palves at redhat.com>
-Date: Fri, 17 Oct 2014 13:31:26 +0100
-Subject: [PATCH 35/37] PR gdb/17471: Repeating a background command makes it
- foreground
-
-When we repeat a command, by just pressing <ret>, the input from the
-previous command is reused for the new command invocation.
-
-When an execution command strips the "&" out of its incoming argument
-string, to detect background execution, we poke a '\0' directly to the
-incoming argument string.
-
-Combine both, and a repeat of a background command loses the "&".
-
-This is actually only visible if args other than "&" are specified
-(e.g., "c 1&" or "next 2&" or "c -a&"), as in the special case of "&"
-alone (e.g. "c&") doesn't actually clobber the incoming string.
-
-Fix this by making strip_bg_char return a new string instead of poking
-a hole in the input string.
-
-New test included.
-
-Tested on x86_64 Fedora 20, native and gdbserver.
-
-gdb/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- PR gdb/17471
- * infcmd.c (strip_bg_char): Change prototype and rewrite. Now
- returns a copy of the input.
- (run_command_1, continue_command, step_1, jump_command)
- (signal_command, until_command, advance_command, finish_command)
- (attach_command): Adjust and install a cleanup to free the
- stripped args.
-
-gdb/testsuite/
-2014-10-17 Pedro Alves <palves at redhat.com>
-
- PR gdb/17471
- * gdb.base/bg-execution-repeat.c: New file.
- * gdb.base/bg-execution-repeat.exp: New file.
----
- gdb/ChangeLog | 10 ++
- gdb/infcmd.c | 142 ++++++++++++++++---------
- gdb/testsuite/ChangeLog | 6 ++
- gdb/testsuite/gdb.base/bg-execution-repeat.c | 33 ++++++
- gdb/testsuite/gdb.base/bg-execution-repeat.exp | 86 +++++++++++++++
- 5 files changed, 224 insertions(+), 53 deletions(-)
- create mode 100644 gdb/testsuite/gdb.base/bg-execution-repeat.c
- create mode 100644 gdb/testsuite/gdb.base/bg-execution-repeat.exp
-
-### a/gdb/ChangeLog
-### b/gdb/ChangeLog
-## -1,5 +1,15 @@
- 2014-10-17 Pedro Alves <palves at redhat.com>
-
-+ PR gdb/17471
-+ * infcmd.c (strip_bg_char): Change prototype and rewrite. Now
-+ returns a copy of the input.
-+ (run_command_1, continue_command, step_1, jump_command)
-+ (signal_command, until_command, advance_command, finish_command)
-+ (attach_command): Adjust and install a cleanup to free the
-+ stripped args.
-+
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
- PR gdb/17300
- * infcmd.c (continue_1): If continuing all threads in the
- foreground, make sure the inferior's terminal settings are put in
---- a/gdb/infcmd.c
-+++ b/gdb/infcmd.c
-@@ -107,8 +107,6 @@ static void run_no_args_command (char *args, int from_tty);
-
- static void go_command (char *line_no, int from_tty);
-
--static int strip_bg_char (char **);
--
- void _initialize_infcmd (void);
-
- #define ERROR_NO_INFERIOR \
-@@ -373,35 +371,40 @@ construct_inferior_arguments (int argc, char **argv)
- }
-
-
--/* This function detects whether or not a '&' character (indicating
-- background execution) has been added as *the last* of the arguments ARGS
-- of a command. If it has, it removes it and returns 1. Otherwise it
-- does nothing and returns 0. */
-+/* This function strips the '&' character (indicating background
-+ execution) that is added as *the last* of the arguments ARGS of a
-+ command. A copy of the incoming ARGS without the '&' is returned,
-+ unless the resulting string after stripping is empty, in which case
-+ NULL is returned. *BG_CHAR_P is an output boolean that indicates
-+ whether the '&' character was found. */
-
--static int
--strip_bg_char (char **args)
-+static char *
-+strip_bg_char (const char *args, int *bg_char_p)
- {
-- char *p = NULL;
-+ const char *p;
-
-- p = strchr (*args, '&');
-+ if (args == NULL || *args == '\0')
-+ {
-+ *bg_char_p = 0;
-+ return NULL;
-+ }
-
-- if (p)
-+ p = args + strlen (args);
-+ if (p[-1] == '&')
- {
-- if (p == (*args + strlen (*args) - 1))
-- {
-- if (strlen (*args) > 1)
-- {
-- do
-- p--;
-- while (*p == ' ' || *p == '\t');
-- *(p + 1) = '\0';
-- }
-- else
-- *args = 0;
-- return 1;
-- }
-+ p--;
-+ while (p > args && isspace (p[-1]))
-+ p--;
-+
-+ *bg_char_p = 1;
-+ if (p != args)
-+ return savestring (args, p - args);
-+ else
-+ return NULL;
- }
-- return 0;
-+
-+ *bg_char_p = 0;
-+ return xstrdup (args);
- }
-
- /* Common actions to take after creating any sort of inferior, by any
-@@ -530,7 +533,8 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main)
- ptid_t ptid;
- struct ui_out *uiout = current_uiout;
- struct target_ops *run_target;
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
-
- dont_repeat ();
-
-@@ -553,8 +557,8 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main)
- reopen_exec_file ();
- reread_symbols ();
-
-- if (args != NULL)
-- async_exec = strip_bg_char (&args);
-+ args = strip_bg_char (args, &async_exec);
-+ args_chain = make_cleanup (xfree, args);
-
- /* Do validation and preparation before possibly changing anything
- in the inferior. */
-@@ -600,6 +604,9 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main)
- ui_out_flush (uiout);
- }
-
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
-+
- /* We call get_inferior_args() because we might need to compute
- the value now. */
- run_target->to_create_inferior (run_target, exec_file, get_inferior_args (),
-@@ -773,13 +780,15 @@ continue_1 (int all_threads)
- static void
- continue_command (char *args, int from_tty)
- {
-- int async_exec = 0;
-+ int async_exec;
- int all_threads = 0;
-+ struct cleanup *args_chain;
-+
- ERROR_NO_INFERIOR;
-
- /* Find out whether we must run in the background. */
-- if (args != NULL)
-- async_exec = strip_bg_char (&args);
-+ args = strip_bg_char (args, &async_exec);
-+ args_chain = make_cleanup (xfree, args);
-
- prepare_execution_command (¤t_target, async_exec);
-
-@@ -843,6 +852,9 @@ continue_command (char *args, int from_tty)
- }
- }
-
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
-+
- if (from_tty)
- printf_filtered (_("Continuing.\n"));
-
-@@ -902,21 +914,25 @@ step_1 (int skip_subroutines, int single_inst, char *count_string)
- {
- int count = 1;
- struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
-- int async_exec = 0;
-+ int async_exec;
- int thread = -1;
-+ struct cleanup *args_chain;
-
- ERROR_NO_INFERIOR;
- ensure_not_tfind_mode ();
- ensure_valid_thread ();
- ensure_not_running ();
-
-- if (count_string)
-- async_exec = strip_bg_char (&count_string);
-+ count_string = strip_bg_char (count_string, &async_exec);
-+ args_chain = make_cleanup (xfree, count_string);
-
- prepare_execution_command (¤t_target, async_exec);
-
- count = count_string ? parse_and_eval_long (count_string) : 1;
-
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
-+
- if (!single_inst || skip_subroutines) /* Leave si command alone. */
- {
- struct thread_info *tp = inferior_thread ();
-@@ -1137,7 +1153,8 @@ jump_command (char *arg, int from_tty)
- struct symtab_and_line sal;
- struct symbol *fn;
- struct symbol *sfn;
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
-
- ERROR_NO_INFERIOR;
- ensure_not_tfind_mode ();
-@@ -1145,8 +1162,8 @@ jump_command (char *arg, int from_tty)
- ensure_not_running ();
-
- /* Find out whether we must run in the background. */
-- if (arg != NULL)
-- async_exec = strip_bg_char (&arg);
-+ arg = strip_bg_char (arg, &async_exec);
-+ args_chain = make_cleanup (xfree, arg);
-
- prepare_execution_command (¤t_target, async_exec);
-
-@@ -1162,6 +1179,9 @@ jump_command (char *arg, int from_tty)
- sal = sals.sals[0];
- xfree (sals.sals);
-
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
-+
- if (sal.symtab == 0 && sal.pc == 0)
- error (_("No source file has been specified."));
-
-@@ -1230,7 +1250,8 @@ static void
- signal_command (char *signum_exp, int from_tty)
- {
- enum gdb_signal oursig;
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
-
- dont_repeat (); /* Too dangerous. */
- ERROR_NO_INFERIOR;
-@@ -1239,8 +1260,8 @@ signal_command (char *signum_exp, int from_tty)
- ensure_not_running ();
-
- /* Find out whether we must run in the background. */
-- if (signum_exp != NULL)
-- async_exec = strip_bg_char (&signum_exp);
-+ signum_exp = strip_bg_char (signum_exp, &async_exec);
-+ args_chain = make_cleanup (xfree, signum_exp);
-
- prepare_execution_command (¤t_target, async_exec);
-
-@@ -1372,7 +1393,8 @@ until_next_command (int from_tty)
- static void
- until_command (char *arg, int from_tty)
- {
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
-
- ERROR_NO_INFERIOR;
- ensure_not_tfind_mode ();
-@@ -1380,8 +1402,8 @@ until_command (char *arg, int from_tty)
- ensure_not_running ();
-
- /* Find out whether we must run in the background. */
-- if (arg != NULL)
-- async_exec = strip_bg_char (&arg);
-+ arg = strip_bg_char (arg, &async_exec);
-+ args_chain = make_cleanup (xfree, arg);
-
- prepare_execution_command (¤t_target, async_exec);
-
-@@ -1389,12 +1411,16 @@ until_command (char *arg, int from_tty)
- until_break_command (arg, from_tty, 0);
- else
- until_next_command (from_tty);
-+
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
- }
-
- static void
- advance_command (char *arg, int from_tty)
- {
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
-
- ERROR_NO_INFERIOR;
- ensure_not_tfind_mode ();
-@@ -1405,12 +1431,15 @@ advance_command (char *arg, int from_tty)
- error_no_arg (_("a location"));
-
- /* Find out whether we must run in the background. */
-- if (arg != NULL)
-- async_exec = strip_bg_char (&arg);
-+ arg = strip_bg_char (arg, &async_exec);
-+ args_chain = make_cleanup (xfree, arg);
-
- prepare_execution_command (¤t_target, async_exec);
-
- until_break_command (arg, from_tty, 1);
-+
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
- }
-
- /* Return the value of the result of a function at the end of a 'finish'
-@@ -1686,8 +1715,8 @@ finish_command (char *arg, int from_tty)
- {
- struct frame_info *frame;
- struct symbol *function;
--
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
-
- ERROR_NO_INFERIOR;
- ensure_not_tfind_mode ();
-@@ -1695,14 +1724,17 @@ finish_command (char *arg, int from_tty)
- ensure_not_running ();
-
- /* Find out whether we must run in the background. */
-- if (arg != NULL)
-- async_exec = strip_bg_char (&arg);
-+ arg = strip_bg_char (arg, &async_exec);
-+ args_chain = make_cleanup (xfree, arg);
-
- prepare_execution_command (¤t_target, async_exec);
-
- if (arg)
- error (_("The \"finish\" command does not take any arguments."));
-
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
-+
- frame = get_prev_frame (get_selected_frame (_("No selected frame.")));
- if (frame == 0)
- error (_("\"finish\" not meaningful in the outermost frame."));
-@@ -2476,7 +2508,8 @@ attach_command_continuation_free_args (void *args)
- void
- attach_command (char *args, int from_tty)
- {
-- int async_exec = 0;
-+ int async_exec;
-+ struct cleanup *args_chain;
- struct target_ops *attach_target;
-
- dont_repeat (); /* Not for the faint of heart */
-@@ -2497,8 +2530,8 @@ attach_command (char *args, int from_tty)
- this function should probably be moved into target_pre_inferior. */
- target_pre_inferior (from_tty);
-
-- if (args != NULL)
-- async_exec = strip_bg_char (&args);
-+ args = strip_bg_char (args, &async_exec);
-+ args_chain = make_cleanup (xfree, args);
-
- attach_target = find_attach_target ();
-
-@@ -2512,6 +2545,9 @@ attach_command (char *args, int from_tty)
- shouldn't refer to attach_target again. */
- attach_target = NULL;
-
-+ /* Done with ARGS. */
-+ do_cleanups (args_chain);
-+
- /* Set up the "saved terminal modes" of the inferior
- based on what modes we are starting it with. */
- target_terminal_init ();
-### a/gdb/testsuite/ChangeLog
-### b/gdb/testsuite/ChangeLog
-## -1,5 +1,11 @@
- 2014-10-17 Pedro Alves <palves at redhat.com>
-
-+ PR gdb/17471
-+ * gdb.base/bg-execution-repeat.c: New file.
-+ * gdb.base/bg-execution-repeat.exp: New file.
-+
-+2014-10-17 Pedro Alves <palves at redhat.com>
-+
- PR gdb/17300
- * gdb.base/continue-all-already-running.c: New file.
- * gdb.base/continue-all-already-running.exp: New file.
---- /dev/null
-+++ b/gdb/testsuite/gdb.base/bg-execution-repeat.c
-@@ -0,0 +1,33 @@
-+/* This testcase is part of GDB, the GNU debugger.
-+
-+ Copyright 2014 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/>. */
-+
-+#include <unistd.h>
-+
-+int
-+foo (void)
-+{
-+ return 0; /* set break here */
-+}
-+
-+int
-+main (void)
-+{
-+ foo ();
-+ sleep (5);
-+ foo ();
-+ return 0;
-+}
---- /dev/null
-+++ b/gdb/testsuite/gdb.base/bg-execution-repeat.exp
-@@ -0,0 +1,86 @@
-+# Copyright (C) 2014 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 that repeating a background command doesn't lose the "&" in the
-+# repeat, turning a background command into a foreground command. See
-+# PR gdb/17471.
-+
-+standard_testfile
-+
-+if { [build_executable "failed to prepare" ${testfile} $srcfile] } {
-+ return -1
-+}
-+
-+set linenum [gdb_get_line_number "set break here"]
-+
-+# Run the test proper. CONTINUE_CMD is the background continue
-+# command to issue.
-+
-+proc test {continue_cmd} {
-+ global gdb_prompt
-+ global binfile
-+ global linenum
-+
-+ clean_restart $binfile
-+
-+ if ![runto_main] {
-+ return
-+ }
-+
-+ gdb_breakpoint "$linenum"
-+
-+ set test $continue_cmd
-+ gdb_test_multiple $test $test {
-+ -re "Continuing\\.\r\n$gdb_prompt " {
-+ # Note no end anchor. If the breakpoint triggers soon enough
-+ # enough we see further output after the prompt.
-+ pass $test
-+ }
-+ }
-+
-+ # Wait for the stop. Don't expect a prompt, as we had resumed the
-+ # inferior in the background.
-+ set test "breakpoint hit 1"
-+ gdb_test_multiple "" $test {
-+ -re "set break here" {
-+ pass $test
-+ }
-+ }
-+
-+ # Trigger a repeat. Buggy GDB used to lose the "&", making this a
-+ # foreground command...
-+ send_gdb "\n"
-+ gdb_test "" "Continuing\\." "repeat bg command"
-+
-+ # ... and thus further input wouldn't be processed until the target
-+ # stopped.
-+ gdb_test "print 1" " = 1" "input still accepted"
-+
-+ # Make sure we see a stop after the print, and not before. Don't
-+ # expect a prompt, as we had resumed the inferior in the background.
-+ set test "breakpoint hit 2"
-+ gdb_test_multiple "" $test {
-+ -re "set break here ..\r\n" {
-+ pass $test
-+ }
-+ }
-+}
-+
-+# Test with and without extra arguments.
-+foreach cmd {"c&" "c 1&"} {
-+ with_test_prefix $cmd {
-+ test $cmd
-+ }
-+}
---
-1.9.3
-
-
-
-commit 54fbc750b54271efb75ae11ce49f14c4234a9476
-Author: Jan Kratochvil <jan.kratochvil at redhat.com>
-Date: Thu Sep 18 08:21:40 2014 +0200
-
- Fix regression for Linux vDSO in GDB (PR gdb/17407).
-
- since
- 5979d6b69b20a8355ea94b75fad97415fce4788c
- https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=5979d6b69b20a8355ea94b75fad97415fce4788c
- vdso handling
- https://sourceware.org/ml/binutils/2014-03/msg00082.html
- https://sourceware.org/ml/binutils/2014-04/msg00003.html
- Message-ID: <A78C989F6D9628469189715575E55B230AA884EB at IRSMSX104.ger.corp.intel.com>
- I get on
- kernel-3.16.2-200.fc20.x86_64
- https://koji.fedoraproject.org/koji/buildinfo?buildID=575860
- attaching its vdso.bin.gz
- GDB (FSF HEAD 5e43d46791c4c66fd83947a12d4f716b561a9103) regression:
- reproducer:
- ./gdb -ex start ./gdb
- actual result / FAIL:
- Got object file from memory but can't read symbols: File truncated.
- expected result / PASS:
- <nothing>
- or / PASS:
- warning: Could not load shared library symbols for linux-vdso.so.1.
- Do you need "set solib-search-path" or "set sysroot"?
-
- That "warning: Could not load shared library..." is mostly harmless (it is
- a bug in GDB), in the FAIL case it is not printed just because
- bfd_check_format() fails there.
-
- It seems logical to me this way when the 'size' parameter has been already
- added.
- Alan Modra:
- I was wrongly thinking that the section headers were
- always last when I wrote that code. (They are now! If you relink
- that vdso with current binutils master you won't hit this problem, but
- that of course doesn't help existing kernels.)
-
- I do not see a regression for add-symbol-file-from-memory for libncurses.so.5
- from the original thread above.
-
- Start of section headers: 1080 (bytes into file)
- Size of section headers: 64 (bytes)
- Number of section headers: 13
- Section header string table index: 8
- Section Headers:
- [Nr] Name Type Address Off Size ES Flg Lk Inf Al
- [ 8] .fake_shstrtab STRTAB 0000000000000780 000780 000076 00 A 0 0 32
- Program Headers:
- Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
- LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0012fe 0x0012fe R E 0x1000
-
- size == 0x2000
- shdr_end == 0x778 == 1080 + 13 * 64
- high_offset == 0x12fe
-
- else if (size >= shdr_end)
- - high_offset = shdr_end;
- + high_offset = size;
-
- But then 0x778 < 0x780 for "Section header string table index" so whole
- bfd_check_format() fails because section headers were not cleared here:
- /* If the segments visible in memory didn't include the section headers,
- then clear them from the file header. */
- if (high_offset < shdr_end)
-
- bfd/ChangeLog
- 2014-09-18 Jan Kratochvil <jan.kratochvil at redhat.com>
-
- PR gdb/17407
- * elfcode.h (bfd_from_remote_memory): Use SIZE for HIGH_OFFSET.
-
-### a/bfd/ChangeLog
-### b/bfd/ChangeLog
-## -1,3 +1,8 @@
-+2014-09-18 Jan Kratochvil <jan.kratochvil at redhat.com>
-+
-+ PR gdb/17407
-+ * elfcode.h (bfd_from_remote_memory): Use SIZE for HIGH_OFFSET.
-+
- 2014-07-16 H.J. Lu <hongjiu.lu at intel.com>
-
- * elf32-i386.c (elf_i386_plt_sym_val): Match PLT entry only for
---- a/bfd/elfcode.h
-+++ b/bfd/elfcode.h
-@@ -1749,7 +1749,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
- headers. */
- }
- else if (size >= shdr_end)
-- high_offset = shdr_end;
-+ high_offset = size;
- else
- {
- bfd_vma page_size = get_elf_backend_data (templ)->minpagesize;
diff --git a/gdb.spec b/gdb.spec
index 691bbef..3fb14c4 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -22,17 +22,17 @@ Name: %{?scl_prefix}gdb
# See timestamp of source gnulib installed into gdb/gnulib/ .
%global snapgnulib 20121213
%global tarname gdb-%{version}
-Version: 7.8
+Version: 7.8.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.
-Release: 29%{?dist}
+Release: 30%{?dist}
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
# Do not provide URL for snapshots as the file lasts there only for 2 days.
-# ftp://sourceware.org/pub/gdb/releases/gdb-%{version}.tar.gz
-Source: %{tarname}.tar.gz
+# ftp://sourceware.org/pub/gdb/releases/gdb-%{version}.tar.xz
+Source: ftp://sourceware.org/pub/gdb/releases/%{tarname}.tar.xz
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
URL: http://gnu.org/software/gdb/
@@ -524,20 +524,10 @@ Patch921: gdb-python-completer-2of2.patch
# Display Fortran strings in backtraces.
Patch925: gdb-fortran-frame-string.patch
-# Fix -Werror=unused-variable error configuring babeltrace.
-# Fix babeltrace errors (Yao Qi).
-Patch926: gdb-babeltrace-configure.patch
-Patch928: gdb-babeltrace-minsize.patch
-
# Fix Python GIL with gdb.execute("continue") (Phil Muldoon, BZ 1116957).
Patch927: gdb-python-gil.patch
-# Fix crash on Python frame filters with unreadable arg (BZ 1126177).
-Patch929: python-framefilter-invalidarg.patch
-
# Fix GDB SIGTT* Stopped when using the PID argument (BZ 1136704, Pedro Alves).
-Patch930: gdb-async-stopped-on-pid-arg-1of2.patch
-Patch931: gdb-async-stopped-on-pid-arg-2of2.patch
Patch970: gdb-async-stopped-on-pid-arg-testsuite.patch
# Fix "save breakpoints" for signal catchpoints and disabled breakpoints
@@ -833,12 +823,7 @@ find -name "*.info*"|xargs rm -f
%patch920 -p1
%patch921 -p1
%patch925 -p1
-%patch926 -p1
-%patch928 -p1
%patch927 -p1
-%patch929 -p1
-%patch930 -p1
-%patch931 -p1
%patch970 -p1
%patch971 -p1
%patch973 -p1
@@ -1343,6 +1328,9 @@ then
fi
%changelog
+* Thu Oct 30 2014 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.8.1-30.fc21
+- Rebase to FSF GDB 7.8.1.
+
* Mon Oct 27 2014 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.8-29.fc21
- Backport vDSO regression.
- Revert the makeinfo workaround from 7.8-27.fc21.
diff --git a/sources b/sources
index b7836be..e48805d 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
4981307aa9619bbec5b73261e4e41c8d gdb-libstdc++-v3-python-r155978.tar.bz2
-38d816d641093db2e13ba284e26090b4 gdb-7.8.tar.gz
+8072be87a94be0936bc3b4b6941b0862 gdb-7.8.1.tar.xz
More information about the scm-commits
mailing list