Accepting request 256632 from devel:gcc
Added gdb-async-stopped-on-pid-arg-testsuite.patch and gdb-async-stopped-on-pid-arg.patch from upstream to resolve https://sourceware.org/bugzilla/show_bug.cgi?id=17347 and kde#339476 Please forward to 13.2, so we can have a working DrKonqi there (forwarded request 255033 from sumski) OBS-URL: https://build.opensuse.org/request/show/256632 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdb?expand=0&rev=102
This commit is contained in:
commit
429b91f81f
350
gdb-async-stopped-on-pid-arg-1of2.patch
Normal file
350
gdb-async-stopped-on-pid-arg-1of2.patch
Normal file
@ -0,0 +1,350 @@
|
||||
http://sourceware.org/ml/gdb-patches/2014-09/msg00102.html
|
||||
Subject: Re: Regression: GDB stopped on run with attached process (PR 17347) [Re: [pushed+7.8] Re: [PATCH] Fix "attach" command vs user input race
|
||||
|
||||
On 09/03/2014 08:58 AM, Jan Kratochvil wrote:
|
||||
|
||||
> https://sourceware.org/bugzilla/show_bug.cgi?id=17347
|
||||
|
||||
Thanks Jan.
|
||||
|
||||
Here's a fix, test included. Comments?
|
||||
|
||||
Thanks,
|
||||
Pedro Alves
|
||||
|
||||
--------------------------
|
||||
[PATCH] gdb/17347 - Regression: GDB stopped on run with attached process
|
||||
|
||||
Doing:
|
||||
|
||||
gdb --pid=PID -ex run
|
||||
|
||||
Results in GDB getting a SIGTTIN, and thus ending stopped. That's
|
||||
usually indicative of a missing target_terminal_ours call.
|
||||
|
||||
E.g., from the PR:
|
||||
|
||||
$ sleep 1h & p=$!; sleep 0.1; gdb -batch sleep $p -ex run
|
||||
[1] 28263
|
||||
[1] Killed sleep 1h
|
||||
|
||||
[2]+ Stopped gdb -batch sleep $p -ex run
|
||||
|
||||
The workaround is doing:
|
||||
|
||||
gdb -ex "attach $PID" -ex "run"
|
||||
|
||||
instead of
|
||||
|
||||
gdb [-p] $PID -ex "run"
|
||||
|
||||
With the former, gdb waits for the attach command to complete before
|
||||
moving on to the "run" command, because the interpreter is in sync
|
||||
mode at this point, within execute_command. But for the latter,
|
||||
attach_command is called directly from captured_main, and thus misses
|
||||
that waiting. IOW, "run" is running before the attach continuation
|
||||
has run, before the program stops and attach completes. The broken
|
||||
terminal settings are just one symptom of that. Any command that
|
||||
queries or requires input results in the same.
|
||||
|
||||
The fix is to wait in catch_command_errors (which is specific to
|
||||
main.c nowadays), just like we wait in execute_command.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2014-09-03 Pedro Alves <palves@redhat.com>
|
||||
|
||||
PR gdb/17347
|
||||
* main.c: Include "infrun.h".
|
||||
(catch_command_errors, catch_command_errors_const): Wait for the
|
||||
foreground command to complete.
|
||||
* top.c (maybe_wait_sync_command_done): New function, factored out
|
||||
from ...
|
||||
(maybe_wait_sync_command_done): ... here.
|
||||
* top.h (maybe_wait_sync_command_done): New declaration.
|
||||
|
||||
gdb/testsuite/ChangeLog:
|
||||
2014-09-03 Pedro Alves <palves@redhat.com>
|
||||
|
||||
PR gdb/17347
|
||||
* gdb.base/attach.exp (spawn_test_prog): New, factored out from
|
||||
...
|
||||
(do_attach_tests, do_call_attach_tests, do_command_attach_tests):
|
||||
... here.
|
||||
(gdb_spawn_with_cmdline_opts): New procedure.
|
||||
(test_command_line_attach_run): New procedure.
|
||||
(top level): Call it.
|
||||
---
|
||||
gdb/main.c | 9 +++
|
||||
gdb/testsuite/gdb.base/attach.exp | 118 ++++++++++++++++++++++++++------------
|
||||
gdb/top.c | 26 +++++----
|
||||
gdb/top.h | 8 +++
|
||||
4 files changed, 114 insertions(+), 47 deletions(-)
|
||||
|
||||
Index: gdb-7.8/gdb/main.c
|
||||
===================================================================
|
||||
--- gdb-7.8.orig/gdb/main.c 2014-09-07 19:12:45.066981588 +0200
|
||||
+++ gdb-7.8/gdb/main.c 2014-09-07 19:14:22.613095201 +0200
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "filenames.h"
|
||||
#include "filestuff.h"
|
||||
#include "event-top.h"
|
||||
+#include "infrun.h"
|
||||
|
||||
/* The selected interpreter. This will be used as a set command
|
||||
variable, so it should always be malloc'ed - since
|
||||
@@ -350,7 +351,11 @@ catch_command_errors (catch_command_erro
|
||||
|
||||
TRY_CATCH (e, mask)
|
||||
{
|
||||
+ int was_sync = sync_execution;
|
||||
+
|
||||
command (arg, from_tty);
|
||||
+
|
||||
+ maybe_wait_sync_command_done (was_sync);
|
||||
}
|
||||
return handle_command_errors (e);
|
||||
}
|
||||
@@ -369,7 +374,11 @@ catch_command_errors_const (catch_comman
|
||||
|
||||
TRY_CATCH (e, mask)
|
||||
{
|
||||
+ int was_sync = sync_execution;
|
||||
+
|
||||
command (arg, from_tty);
|
||||
+
|
||||
+ maybe_wait_sync_command_done (was_sync);
|
||||
}
|
||||
return handle_command_errors (e);
|
||||
}
|
||||
Index: gdb-7.8/gdb/testsuite/gdb.base/attach.exp
|
||||
===================================================================
|
||||
--- gdb-7.8.orig/gdb/testsuite/gdb.base/attach.exp 2014-09-07 19:12:45.067981589 +0200
|
||||
+++ gdb-7.8/gdb/testsuite/gdb.base/attach.exp 2014-09-07 19:12:48.601985706 +0200
|
||||
@@ -58,6 +58,37 @@ if [get_compiler_info] {
|
||||
return -1
|
||||
}
|
||||
|
||||
+# Start the program running and then wait for a bit, to be sure that
|
||||
+# it can be attached to. Return the process's PID.
|
||||
+
|
||||
+proc spawn_test_prog { executable } {
|
||||
+ set testpid [eval exec $executable &]
|
||||
+ exec sleep 2
|
||||
+ if { [istarget "*-*-cygwin*"] } {
|
||||
+ # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
|
||||
+ # different due to the way fork/exec works.
|
||||
+ set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
|
||||
+ }
|
||||
+
|
||||
+ return $testpid
|
||||
+}
|
||||
+
|
||||
+# Spawn GDB with CMDLINE_FLAGS appended to the GDBFLAGS global.
|
||||
+
|
||||
+proc gdb_spawn_with_cmdline_opts { cmdline_flags } {
|
||||
+ global GDBFLAGS
|
||||
+
|
||||
+ set saved_gdbflags $GDBFLAGS
|
||||
+
|
||||
+ append GDBFLAGS $cmdline_flags
|
||||
+
|
||||
+ set res [gdb_spawn]
|
||||
+
|
||||
+ set GDBFLAGS $saved_gdbflags
|
||||
+
|
||||
+ return $res
|
||||
+}
|
||||
+
|
||||
proc do_attach_tests {} {
|
||||
global gdb_prompt
|
||||
global binfile
|
||||
@@ -70,13 +101,7 @@ proc do_attach_tests {} {
|
||||
# Start the program running and then wait for a bit, to be sure
|
||||
# that it can be attached to.
|
||||
|
||||
- set testpid [eval exec $binfile &]
|
||||
- exec sleep 2
|
||||
- if { [istarget "*-*-cygwin*"] } {
|
||||
- # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
|
||||
- # different due to the way fork/exec works.
|
||||
- set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
|
||||
- }
|
||||
+ set testpid [spawn_test_prog $binfile]
|
||||
|
||||
# Verify that we cannot attach to nonsense.
|
||||
|
||||
@@ -279,16 +304,7 @@ proc do_attach_tests {} {
|
||||
|
||||
remote_exec build "kill -9 ${testpid}"
|
||||
|
||||
- # Start the program running and then wait for a bit, to be sure
|
||||
- # that it can be attached to.
|
||||
-
|
||||
- set testpid [eval exec $binfile &]
|
||||
- exec sleep 2
|
||||
- if { [istarget "*-*-cygwin*"] } {
|
||||
- # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
|
||||
- # different due to the way fork/exec works.
|
||||
- set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
|
||||
- }
|
||||
+ set testpid [spawn_test_prog $binfile]
|
||||
|
||||
# Verify that we can attach to the process, and find its a.out
|
||||
# when we're cd'd to some directory that doesn't contain the
|
||||
@@ -335,16 +351,7 @@ proc do_call_attach_tests {} {
|
||||
global gdb_prompt
|
||||
global binfile2
|
||||
|
||||
- # Start the program running and then wait for a bit, to be sure
|
||||
- # that it can be attached to.
|
||||
-
|
||||
- set testpid [eval exec $binfile2 &]
|
||||
- exec sleep 2
|
||||
- if { [istarget "*-*-cygwin*"] } {
|
||||
- # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
|
||||
- # different due to the way fork/exec works.
|
||||
- set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
|
||||
- }
|
||||
+ set testpid [spawn_test_prog $binfile2]
|
||||
|
||||
# Attach
|
||||
|
||||
@@ -397,16 +404,7 @@ proc do_command_attach_tests {} {
|
||||
return 0
|
||||
}
|
||||
|
||||
- # Start the program running and then wait for a bit, to be sure
|
||||
- # that it can be attached to.
|
||||
-
|
||||
- set testpid [eval exec $binfile &]
|
||||
- exec sleep 2
|
||||
- if { [istarget "*-*-cygwin*"] } {
|
||||
- # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
|
||||
- # different due to the way fork/exec works.
|
||||
- set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
|
||||
- }
|
||||
+ set testpid [spawn_test_prog $binfile]
|
||||
|
||||
gdb_exit
|
||||
if $verbose>1 then {
|
||||
@@ -429,6 +427,50 @@ proc do_command_attach_tests {} {
|
||||
remote_exec build "kill -9 ${testpid}"
|
||||
}
|
||||
|
||||
+# Test ' gdb --pid PID -ex "run" '. GDB used to have a bug where
|
||||
+# "run" would run before the attach finished - PR17347.
|
||||
+
|
||||
+proc test_command_line_attach_run {} {
|
||||
+ global gdb_prompt
|
||||
+ global binfile
|
||||
+ global verbose
|
||||
+ global GDB
|
||||
+ global INTERNAL_GDBFLAGS
|
||||
+
|
||||
+ if ![isnative] then {
|
||||
+ unsupported "commandline attach run test"
|
||||
+ return 0
|
||||
+ }
|
||||
+
|
||||
+ with_test_prefix "cmdline attach run" {
|
||||
+ set testpid [spawn_test_prog $binfile]
|
||||
+
|
||||
+ set test "run to prompt"
|
||||
+ gdb_exit
|
||||
+ set res [gdb_spawn_with_cmdline_opts "--pid=$testpid -ex \"start\""]
|
||||
+ if { $res != 0} {
|
||||
+ fail $test
|
||||
+ return $res
|
||||
+ }
|
||||
+ gdb_test_multiple "" $test {
|
||||
+ -re {Attaching to.*Start it from the beginning\? \(y or n\) } {
|
||||
+ pass $test
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ send_gdb "y\n"
|
||||
+
|
||||
+ set test "run to main"
|
||||
+ gdb_test_multiple "" $test {
|
||||
+ -re "Temporary breakpoint .* main .*$gdb_prompt $" {
|
||||
+ pass $test
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ # Get rid of the process
|
||||
+ remote_exec build "kill -9 ${testpid}"
|
||||
+ }
|
||||
+}
|
||||
|
||||
# Start with a fresh gdb
|
||||
|
||||
@@ -453,4 +495,6 @@ do_call_attach_tests
|
||||
|
||||
do_command_attach_tests
|
||||
|
||||
+test_command_line_attach_run
|
||||
+
|
||||
return 0
|
||||
Index: gdb-7.8/gdb/top.c
|
||||
===================================================================
|
||||
--- gdb-7.8.orig/gdb/top.c 2014-09-07 19:12:45.067981589 +0200
|
||||
+++ gdb-7.8/gdb/top.c 2014-09-07 19:12:48.601985706 +0200
|
||||
@@ -375,6 +375,21 @@ check_frame_language_change (void)
|
||||
}
|
||||
}
|
||||
|
||||
+void
|
||||
+maybe_wait_sync_command_done (int was_sync)
|
||||
+{
|
||||
+ /* If the interpreter is in sync mode (we're running a user
|
||||
+ command's list, running command hooks or similars), and we
|
||||
+ just ran a synchronous command that started the target, wait
|
||||
+ for that command to end. */
|
||||
+ if (!interpreter_async && !was_sync && sync_execution)
|
||||
+ {
|
||||
+ while (gdb_do_one_event () >= 0)
|
||||
+ if (!sync_execution)
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* Execute the line P as a command, in the current user context.
|
||||
Pass FROM_TTY as second argument to the defining function. */
|
||||
|
||||
@@ -461,16 +476,7 @@ execute_command (char *p, int from_tty)
|
||||
else
|
||||
cmd_func (c, arg, from_tty);
|
||||
|
||||
- /* If the interpreter is in sync mode (we're running a user
|
||||
- command's list, running command hooks or similars), and we
|
||||
- just ran a synchronous command that started the target, wait
|
||||
- for that command to end. */
|
||||
- if (!interpreter_async && !was_sync && sync_execution)
|
||||
- {
|
||||
- while (gdb_do_one_event () >= 0)
|
||||
- if (!sync_execution)
|
||||
- break;
|
||||
- }
|
||||
+ maybe_wait_sync_command_done (was_sync);
|
||||
|
||||
/* If this command has been post-hooked, run the hook last. */
|
||||
execute_cmd_post_hook (c);
|
||||
Index: gdb-7.8/gdb/top.h
|
||||
===================================================================
|
||||
--- gdb-7.8.orig/gdb/top.h 2014-09-07 19:12:45.068981590 +0200
|
||||
+++ gdb-7.8/gdb/top.h 2014-09-07 19:12:48.601985706 +0200
|
||||
@@ -42,6 +42,14 @@ extern void quit_command (char *, int);
|
||||
extern void quit_cover (void);
|
||||
extern void execute_command (char *, int);
|
||||
|
||||
+/* If the interpreter is in sync mode (we're running a user command's
|
||||
+ list, running command hooks or similars), and we just ran a
|
||||
+ synchronous command that started the target, wait for that command
|
||||
+ to end. WAS_SYNC indicates whether sync_execution was set before
|
||||
+ the command was run. */
|
||||
+
|
||||
+extern void maybe_wait_sync_command_done (int was_sync);
|
||||
+
|
||||
extern void check_frame_language_change (void);
|
||||
|
||||
/* Prepare for execution of a command.
|
216
gdb-async-stopped-on-pid-arg-2of2.patch
Normal file
216
gdb-async-stopped-on-pid-arg-2of2.patch
Normal file
@ -0,0 +1,216 @@
|
||||
http://sourceware.org/ml/gdb-patches/2014-09/msg00174.html
|
||||
Subject: Re: Regression: GDB stopped on run with attached process (PR 17347) [Re: [pushed+7.8] Re: [PATCH] Fix "attach" command vs user input race
|
||||
|
||||
|
||||
--a8Wt8u1KmwUX3Y2C
|
||||
Content-Type: text/plain; charset=us-ascii
|
||||
Content-Disposition: inline
|
||||
|
||||
On Wed, 03 Sep 2014 22:11:03 +0200, Pedro Alves wrote:
|
||||
> On 09/03/2014 08:58 AM, Jan Kratochvil wrote:
|
||||
>
|
||||
> > https://sourceware.org/bugzilla/show_bug.cgi?id=17347
|
||||
>
|
||||
> Thanks Jan.
|
||||
>
|
||||
> Here's a fix, test included. Comments?
|
||||
|
||||
In the testsuite run from the Fedora rpm packaging I get:
|
||||
|
||||
GNU gdb (GDB) Fedora 7.8-21.fc21^M
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.^M
|
||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>^M
|
||||
This is free software: you are free to change and redistribute it.^M
|
||||
There is NO WARRANTY, to the extent permitted by law. Type "show copying"^M
|
||||
and "show warranty" for details.^M
|
||||
This GDB was configured as "i686-redhat-linux-gnu".^M
|
||||
Type "show configuration" for configuration details.^M
|
||||
For bug reporting instructions, please see:^M
|
||||
<http://www.gnu.org/software/gdb/bugs/>.^M
|
||||
Find the GDB manual and other documentation resources online at:^M
|
||||
<http://www.gnu.org/software/gdb/documentation/>.^M
|
||||
For help, type "help".^M
|
||||
Type "apropos word" to search for commands related to "word".^M
|
||||
Attaching to process 27028^M
|
||||
Reading symbols from /unsafebuild-i686-redhat-linux-gnu/gdb/testsuite.unix.-m32/outputs/gdb.base/attach/attach...done.^M
|
||||
Reading symbols from /lib/libm.so.6...Reading symbols from /usr/lib/debug/usr/lib/libm-2.19.90.so.debug...done.^M
|
||||
done.^M
|
||||
Loaded symbols for /lib/libm.so.6^M
|
||||
Reading symbols from /lib/libc.so.6...Reading symbols from /usr/lib/debug/usr/lib/libc-2.19.90.so.debug...done.^M
|
||||
done.^M
|
||||
Loaded symbols for /lib/libc.so.6^M
|
||||
Reading symbols from /lib/ld-linux.so.2...Reading symbols from /usr/lib/debug/usr/lib/ld-2.19.90.so.debug...done.^M
|
||||
done.^M
|
||||
Loaded symbols for /lib/ld-linux.so.2^M
|
||||
main ()^M
|
||||
at gdb/testsuite/gdb.base/attach.c:15^M
|
||||
15 while (! should_exit)^M
|
||||
The program being debugged has been started already.^M
|
||||
Start it from the beginning? (y or n) PASS: gdb.base/attach.exp: cmdline attach run: run to prompt
|
||||
y^M
|
||||
^M
|
||||
Temporary breakpoint 1 at 0x8048481: file gdb/testsuite/gdb.base/attach.c, line 13.^M
|
||||
Starting program: /unsafe/home/jkratoch/hammock/20140907fedorarel21-f21/fedora-2---Type <return> to continue, or q <return> to quit---ERROR: Window too small.
|
||||
UNRESOLVED: gdb.base/attach.exp: cmdline attach run: run to main
|
||||
|
||||
|
||||
While I do not fully understand why that happens in every run of that Fedora
|
||||
testsuite while it never happens during my reproducibility attempts by hand
|
||||
I find it understandable and the Fedora testsuite issues does get fixed by the
|
||||
attached patch.
|
||||
|
||||
|
||||
> --- a/gdb/testsuite/gdb.base/attach.exp
|
||||
> +++ b/gdb/testsuite/gdb.base/attach.exp
|
||||
> @@ -58,6 +58,37 @@ if [get_compiler_info] {
|
||||
> return -1
|
||||
> }
|
||||
>
|
||||
> +# Start the program running and then wait for a bit, to be sure that
|
||||
> +# it can be attached to. Return the process's PID.
|
||||
> +
|
||||
> +proc spawn_test_prog { executable } {
|
||||
> + set testpid [eval exec $executable &]
|
||||
> + exec sleep 2
|
||||
|
||||
Unrelated to this patch - this patch only moved the code. Also the code move
|
||||
could be a separate patch:
|
||||
|
||||
I do not see why the testsuite commonly uses "exec sleep" while it also uses
|
||||
"sleep" itself which also works fine.
|
||||
|
||||
|
||||
> + if { [istarget "*-*-cygwin*"] } {
|
||||
> + # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
|
||||
> + # different due to the way fork/exec works.
|
||||
> + set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
|
||||
> + }
|
||||
> +
|
||||
> + return $testpid
|
||||
> +}
|
||||
[...]
|
||||
> @@ -429,6 +427,50 @@ proc do_command_attach_tests {} {
|
||||
> remote_exec build "kill -9 ${testpid}"
|
||||
> }
|
||||
>
|
||||
> +# Test ' gdb --pid PID -ex "run" '. GDB used to have a bug where
|
||||
> +# "run" would run before the attach finished - PR17347.
|
||||
> +
|
||||
> +proc test_command_line_attach_run {} {
|
||||
> + global gdb_prompt
|
||||
> + global binfile
|
||||
|
||||
> + global verbose
|
||||
> + global GDB
|
||||
> + global INTERNAL_GDBFLAGS
|
||||
|
||||
These 3 lines are unused.
|
||||
|
||||
|
||||
> +
|
||||
> + if ![isnative] then {
|
||||
> + unsupported "commandline attach run test"
|
||||
> + return 0
|
||||
> + }
|
||||
> +
|
||||
> + with_test_prefix "cmdline attach run" {
|
||||
> + set testpid [spawn_test_prog $binfile]
|
||||
> +
|
||||
> + set test "run to prompt"
|
||||
> + gdb_exit
|
||||
> + set res [gdb_spawn_with_cmdline_opts "--pid=$testpid -ex \"start\""]
|
||||
|
||||
Here see the attachment.
|
||||
|
||||
|
||||
> + if { $res != 0} {
|
||||
> + fail $test
|
||||
> + return $res
|
||||
> + }
|
||||
> + gdb_test_multiple "" $test {
|
||||
> + -re {Attaching to.*Start it from the beginning\? \(y or n\) } {
|
||||
> + pass $test
|
||||
> + }
|
||||
> + }
|
||||
> +
|
||||
> + send_gdb "y\n"
|
||||
> +
|
||||
> + set test "run to main"
|
||||
> + gdb_test_multiple "" $test {
|
||||
> + -re "Temporary breakpoint .* main .*$gdb_prompt $" {
|
||||
> + pass $test
|
||||
> + }
|
||||
> + }
|
||||
> +
|
||||
> + # Get rid of the process
|
||||
> + remote_exec build "kill -9 ${testpid}"
|
||||
> + }
|
||||
> +}
|
||||
>
|
||||
> # Start with a fresh gdb
|
||||
>
|
||||
> @@ -453,4 +495,6 @@ do_call_attach_tests
|
||||
>
|
||||
> do_command_attach_tests
|
||||
>
|
||||
> +test_command_line_attach_run
|
||||
> +
|
||||
> return 0
|
||||
> diff --git a/gdb/top.c b/gdb/top.c
|
||||
> index fc2b84d..ba71f8f 100644
|
||||
> --- a/gdb/top.c
|
||||
> +++ b/gdb/top.c
|
||||
> @@ -373,6 +373,21 @@ check_frame_language_change (void)
|
||||
> }
|
||||
> }
|
||||
>
|
||||
|
||||
Missing:
|
||||
/* See top.h. */
|
||||
|
||||
Unless that rule from me has been abandoned.
|
||||
|
||||
|
||||
> +void
|
||||
> +maybe_wait_sync_command_done (int was_sync)
|
||||
> +{
|
||||
> + /* If the interpreter is in sync mode (we're running a user
|
||||
> + command's list, running command hooks or similars), and we
|
||||
> + just ran a synchronous command that started the target, wait
|
||||
> + for that command to end. */
|
||||
> + if (!interpreter_async && !was_sync && sync_execution)
|
||||
> + {
|
||||
> + while (gdb_do_one_event () >= 0)
|
||||
> + if (!sync_execution)
|
||||
> + break;
|
||||
> + }
|
||||
> +}
|
||||
> +
|
||||
> /* Execute the line P as a command, in the current user context.
|
||||
> Pass FROM_TTY as second argument to the defining function. */
|
||||
>
|
||||
|
||||
|
||||
Thanks,
|
||||
Jan
|
||||
|
||||
--a8Wt8u1KmwUX3Y2C
|
||||
Content-Type: text/plain; charset=us-ascii
|
||||
Content-Disposition: inline; filename=1
|
||||
|
||||
diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
|
||||
index c94c127..6e566a3 100644
|
||||
--- a/gdb/testsuite/gdb.base/attach.exp
|
||||
+++ b/gdb/testsuite/gdb.base/attach.exp
|
||||
@@ -447,7 +444,8 @@ proc test_command_line_attach_run {} {
|
||||
|
||||
set test "run to prompt"
|
||||
gdb_exit
|
||||
- set res [gdb_spawn_with_cmdline_opts "--pid=$testpid -ex \"start\""]
|
||||
+ set res [gdb_spawn_with_cmdline_opts \
|
||||
+ "-iex set\\ height\\ 0 -iex set\\ width\\ 0 --pid=$testpid -ex \"start\""]
|
||||
if { $res != 0} {
|
||||
fail $test
|
||||
return $res
|
||||
|
||||
--a8Wt8u1KmwUX3Y2C--
|
88
gdb-async-stopped-on-pid-arg-testsuite.patch
Normal file
88
gdb-async-stopped-on-pid-arg-testsuite.patch
Normal file
@ -0,0 +1,88 @@
|
||||
http://sourceware.org/ml/gdb-patches/2014-09/msg00381.html
|
||||
Subject: [testsuite patch] runaway attach processes [Re: Regression: GDB stopped on run with attached process (PR 17347)]
|
||||
|
||||
|
||||
--RnlQjJ0d97Da+TV1
|
||||
Content-Type: text/plain; charset=us-ascii
|
||||
Content-Disposition: inline
|
||||
|
||||
On Thu, 11 Sep 2014 14:35:53 +0200, Pedro Alves wrote:
|
||||
> Thanks, pushed to both master and 7.8.
|
||||
|
||||
I have started seeing occasional runaway 'attach' processes these days.
|
||||
I cannot be certain it is really caused by this patch, for example
|
||||
grep 'FAIL.*cmdline attach run' does not show anything in my logs.
|
||||
|
||||
But as I remember this 'attach' runaway process always happened in GDB (but
|
||||
I do not remember it in the past months) I think it would be most safe to just
|
||||
solve it forever by [attached].
|
||||
|
||||
|
||||
Jan
|
||||
|
||||
--RnlQjJ0d97Da+TV1
|
||||
Content-Type: text/plain; charset=us-ascii
|
||||
Content-Disposition: inline; filename=1
|
||||
|
||||
gdb/testsuite/
|
||||
2014-09-12 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/attach.c: Include unistd.h.
|
||||
(main): Call alarm. Add label postloop.
|
||||
* gdb.base/attach.exp (do_attach_tests): Use gdb_get_line_number,
|
||||
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
|
||||
@@ -5,6 +5,7 @@
|
||||
exit unless/until gdb sets the variable to non-zero.)
|
||||
*/
|
||||
#include <stdio.h>
|
||||
+#include <unistd.h>
|
||||
|
||||
int should_exit = 0;
|
||||
|
||||
@@ -12,9 +13,11 @@ int main ()
|
||||
{
|
||||
int local_i = 0;
|
||||
|
||||
+ alarm (60);
|
||||
+
|
||||
while (! should_exit)
|
||||
{
|
||||
local_i++;
|
||||
}
|
||||
- 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
|
||||
@@ -256,11 +256,8 @@ proc do_attach_tests {} {
|
||||
|
||||
# Verify that the modification really happened.
|
||||
|
||||
- gdb_test "tbreak 19" "Temporary breakpoint .*at.*$srcfile, line 19.*" \
|
||||
- "after attach2, set tbreak postloop"
|
||||
-
|
||||
- gdb_test "continue" "main.*at.*$srcfile:19.*" \
|
||||
- "after attach2, reach tbreak postloop"
|
||||
+ gdb_breakpoint [gdb_get_line_number "postloop"] temporary
|
||||
+ gdb_continue_to_breakpoint "postloop" ".* postloop .*"
|
||||
|
||||
# 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\""]
|
||||
if { $res != 0} {
|
||||
fail $test
|
||||
+ remote_exec build "kill -9 ${testpid}"
|
||||
return $res
|
||||
}
|
||||
gdb_test_multiple "" $test {
|
||||
|
||||
--RnlQjJ0d97Da+TV1--
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 10 10:01:27 UTC 2014 - hrvoje.senjan@gmail.com
|
||||
|
||||
- Added gdb-async-stopped-on-pid-arg-1of2.patch,
|
||||
gdb-async-stopped-on-pid-arg-2of2.patch and
|
||||
gdb-async-stopped-on-pid-arg-testsuite.patch to resolve
|
||||
https://sourceware.org/bugzilla/show_bug.cgi?id=17347
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 13 07:54:35 UTC 2014 - rguenther@suse.com
|
||||
|
||||
|
6
gdb.spec
6
gdb.spec
@ -210,6 +210,9 @@ Patch115: gdb-rhel5-compat.patch
|
||||
|
||||
# Upstream patch to fix gcc -Werror
|
||||
Patch1002: gdb-6.6-buildid-locate-rpm-suse.patch
|
||||
Patch1003: gdb-async-stopped-on-pid-arg-1of2.patch
|
||||
Patch1004: gdb-async-stopped-on-pid-arg-2of2.patch
|
||||
Patch1005: gdb-async-stopped-on-pid-arg-testsuite.patch
|
||||
|
||||
BuildRequires: bison
|
||||
BuildRequires: flex
|
||||
@ -468,6 +471,9 @@ find -name "*.info*"|xargs rm -f
|
||||
#Fedora patching end
|
||||
|
||||
%patch1002 -p1
|
||||
%patch1003 -p1
|
||||
%patch1004 -p1
|
||||
%patch1005 -p1
|
||||
|
||||
find -name "*.orig" | xargs rm -f
|
||||
! find -name "*.rej" # Should not happen.
|
||||
|
Loading…
x
Reference in New Issue
Block a user