* Add gdb.base/errno.exp FAILs for PR29244 (SLE-12). * Add PR31308 kfail. - Maintenance script import-patches.sh: * Handle filename clash with existing file. - Patches added: * gdb-record-fix-out-of-bounds-write-in-aarch64_record.patch * gdb-block-sigterm-during-fetch_inferior_event.patch * gdb-testsuite-fix-another-timeout-in-gdb.base-bg-exe.1.patch * gdb-testsuite-fix-regexp-in-gdb.multi-pending-bp-del.patch * gdb-testsuite-fix-timeout-in-gdb.threads-main-thread.patch * gdb-testsuite-fix-gdb.threads-clone-attach-detach.ex.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=456
79 lines
2.3 KiB
Diff
79 lines
2.3 KiB
Diff
From a4f602690bdc46428b7e9003612b524dec3ab014 Mon Sep 17 00:00:00 2001
|
|
From: Tom de Vries <tdevries@suse.de>
|
|
Date: Mon, 14 Apr 2025 13:05:35 +0200
|
|
Subject: [PATCH 3/5] [gdb/testsuite] Fix another timeout in
|
|
gdb.base/bg-execution-repeat.exp
|
|
|
|
With test-case gdb.base/bg-execution-repeat.exp, occasionally I run into a
|
|
timeout:
|
|
...
|
|
(gdb) c 1&
|
|
Will stop next time breakpoint 1 is reached. Continuing.
|
|
(gdb) PASS: $exp: c 1&: c 1&
|
|
|
|
Breakpoint 2, foo () at bg-execution-repeat.c:23
|
|
23 return 0; /* set break here */
|
|
PASS: $exp: c 1&: breakpoint hit 1
|
|
|
|
Will stop next time breakpoint 2 is reached. Continuing.
|
|
(gdb) PASS: $exp: c 1&: repeat bg command
|
|
print 1
|
|
$1 = 1
|
|
(gdb) PASS: $exp: c 1&: input still accepted
|
|
interrupt
|
|
(gdb) PASS: $exp: c 1&: interrupt
|
|
|
|
Program received signal SIGINT, Interrupt.
|
|
foo () at bg-execution-repeat.c:24
|
|
24 }
|
|
PASS: $exp: c 1&: interrupt received
|
|
set var do_wait=0
|
|
(gdb) PASS: $exp: c 1&: set var do_wait=0
|
|
continue&
|
|
Continuing.
|
|
(gdb) PASS: $exp: c 1&: continue&
|
|
FAIL: $exp: c 1&: breakpoint hit 2 (timeout)
|
|
...
|
|
|
|
I can reproduce it reliably by adding a "sleep (1)" before the "do_wait = 1"
|
|
in the .c file.
|
|
|
|
The timeout happens as follows:
|
|
- with the inferior stopped at main, gdb continues (command c 1&)
|
|
- the inferior hits the breakpoint at foo
|
|
- gdb continues (using the repeat command functionality)
|
|
- the inferior is interrupted
|
|
- inferior variable do_wait gets set to 0. The assumption here is that the
|
|
inferior has progressed enough that do_wait is set to 1 at that point, but
|
|
that happens not to be the case. Consequently, this has no effect.
|
|
- gdb continues
|
|
- the inferior sets do_wait to 1
|
|
- the inferior enters the wait function, and wait for do_wait to become 0,
|
|
which never happens.
|
|
|
|
Fix this by moving the "do_wait = 1" to before the first call to foo.
|
|
|
|
Tested on x86_64-linux.
|
|
---
|
|
gdb/testsuite/gdb.base/bg-execution-repeat.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/gdb/testsuite/gdb.base/bg-execution-repeat.c b/gdb/testsuite/gdb.base/bg-execution-repeat.c
|
|
index d5b48ee4f94..3e9132b3ee5 100644
|
|
--- a/gdb/testsuite/gdb.base/bg-execution-repeat.c
|
|
+++ b/gdb/testsuite/gdb.base/bg-execution-repeat.c
|
|
@@ -37,9 +37,9 @@ main (void)
|
|
{
|
|
alarm (60);
|
|
|
|
+ do_wait = 1;
|
|
foo ();
|
|
|
|
- do_wait = 1;
|
|
wait ();
|
|
/* do_wait set to 0 externally. */
|
|
|
|
--
|
|
2.43.0
|
|
|