From: Pedro Alves Date: Wed, 20 May 2026 10:22:56 +0000 (+0100) Subject: Adjust gdb.python/py-events.exp for Cygwin/MinGW, no fork X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22143ca474bb7154a5c9b4aa20a3aba256c0137a;p=thirdparty%2Fbinutils-gdb.git Adjust gdb.python/py-events.exp for Cygwin/MinGW, no fork The gdb.python/py-events.exp testcase currently uses fork, and relies on "set detach-on-fork off". Cygwin does support the fork syscall, but GDB can't follow forks there, so "detach-on-fork off" has no effect. And also, there is no fork on native Windows, which makes the testcase unusable on MinGW currently. I don't see any reason the testcase needs to use fork or multiple inferiors. We can replace what those parts were testing by more focused tests: - The clear_objfiles event was tested via following a fork. Instead, test a more directed "file" command. - Two-inferior quit was being used to test that gdb.ExitedEvent has no "exit_code". Quitting while an inferior is being debugged makes GDB kill the inferior. What's really being tested is the kill path, so write an explicit (single-inferior) kill test. Tested on x86_64-unknown-linux-gnu. Change-Id: I21ee8af7b52653c6fdff9b4c1596cdde3cfe751a --- diff --git a/gdb/testsuite/gdb.python/py-events.c b/gdb/testsuite/gdb.python/py-events.c index b1910f75ed9..6a0b407042a 100644 --- a/gdb/testsuite/gdb.python/py-events.c +++ b/gdb/testsuite/gdb.python/py-events.c @@ -15,12 +15,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include - extern void do_nothing (void); int second(){ - fork() ; return 12; } diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp index b07eb2ec9b0..a34a423c014 100644 --- a/gdb/testsuite/gdb.python/py-events.exp +++ b/gdb/testsuite/gdb.python/py-events.exp @@ -45,8 +45,6 @@ gdb_breakpoint "main" {temporary} gdb_test "run" ".*event type: new_objfile.*new objfile name.*" "new objfile notification" -gdb_test_no_output "set detach-on-fork off" "" - gdb_test "test-events" "Event testers registered." gdb_breakpoint "first" @@ -217,24 +215,13 @@ proc get_process_id {test} { return ${process_id} } -set process_id [get_process_id "get inferior 1 process id"] +set process_id [get_process_id "get inferior process id"] gdb_test "continue" ".*event type: continue.* -.*clear_objfiles\[\r\n\]*progspace: .*py-events.* .*event type: exit.* .*exit code: 12.* .*exit inf: 1.* .*exit pid: $process_id.* -dir ok: True.*" "Inferior 1 terminated." - -gdb_test "inferior 2" ".*Switching to inferior 2.*" -set process_id [get_process_id "get inferior 2 process id"] -gdb_test "continue" ".*event type: continue.* -.*event type: exit.* -.*exit code: 12.* -.*exit inf: 2.* -.*exit pid: $process_id.* -dir ok: True.*" "Inferior 2 terminated." - +dir ok: True.*" "inferior terminated" # Test before_prompt event. gdb_test_multiline "define new user command" \ @@ -286,29 +273,30 @@ with_test_prefix "inferior continue exit" { gdb_test "print \$_foo" "= 2" "check foo after start continue" } -# Check that when GDB exits, we see gdb.ExitedEvent objects with no -# 'exit_code' attribute, and that a gdb.GdbExitingEvent is emitted. -with_test_prefix "gdb exiting: normal" { +# Check that when GDB kills an inferior, we see gdb.ExitedEvent +# objects with no 'exit_code' attribute. +with_test_prefix "kill inferior" { + if {![runto_main]} { + return + } gdb_test "test-exiting-event normal" "GDB exiting event registered\\." + gdb_test "with confirm off -- kill" \ + "event type: exit\r\nexit code: not-present\r\nexit inf: $decimal\r\nexit pid: $decimal\r\ndir ok: False\r\n.*" \ + "exit code not present" +} + +# Check that when GDB exits, we see that a gdb.GdbExitingEvent is +# emitted. +with_test_prefix "gdb exiting: normal" { set saw_exiting_event 0 - set saw_inferior_exit 0 - gdb_test_multiple "quit" "" { - -re "Quit anyway\\? \\(y or n\\) $" { - send_gdb "y\n" - exp_continue - } + gdb_test_multiple "with confirm off -- quit" "quit" { -re "event type: gdb-exiting\r\nexit code: $decimal" { incr saw_exiting_event exp_continue } - -re "event type: exit\r\nexit code: not-present\r\nexit inf: $decimal\r\nexit pid: $decimal\r\ndir ok: False\r\n" { - incr saw_inferior_exit - exp_continue - } eof { gdb_assert { $saw_exiting_event == 1 } - gdb_assert { $saw_inferior_exit == 2 } pass $gdb_test_name } } @@ -354,3 +342,16 @@ with_test_prefix "gdb exiting: error" { } } } + +# Test clear_objfiles event. + +with_test_prefix "clear_objfiles" { + clean_restart ${testfile} + + gdb_test_no_output "source ${pyfile}" "load python file" + gdb_test "test-objfile-events" "Object file events registered." + + gdb_test "with confirm off -- file" \ + "event type: clear_objfiles\r\nprogspace: None\r\n.*" \ + "file cleared" +}