public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH][gdb/testsuite] Work around skip_prologue problems in gdb.threads/process-dies-while-detaching.exp
@ 2021-10-29 19:24 Tom de Vries
  2021-11-02 11:38 ` Tom de Vries
  0 siblings, 1 reply; 11+ messages in thread
From: Tom de Vries @ 2021-10-29 19:24 UTC (permalink / raw)
  To: gdb-patches

Hi,

On powerpc64le-linux, I run into:
...
[Inferior 1 (process 5156) exited normally]^M
(gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: \
  detach: detach: continue to breakpoint: _exit (the program exited)
...

What happens is the following:
- a breakpoint is set on _exit,
- a continue is issued
- the continue is supposed to hit the breakpoint, but instead
  the program exits.

I traced this down to the breakpoint on _exit being set too far from function
entry.  This is caused by the skip_prologue function (in rs6000-tdep.c)
optimistically ignoring insns it doesn't recognize.  In particular, it walks
past the system call instruction "sc" which initiates the actual exit.

While this needs fixing, we don't want to be testing this behaviour in this
test-case.

[ Initially I tried to fix it by setting a breakpoint on "*_exit" instead, but
that one only sets one location.  The breakpoint on "_exit" sets two
locations, one in /lib64/libc.so.6 and one in /lib64/ld64.so.2.  I tried on
x86_64 and there the breakpoint on "*_exit" mapped to the /lib64/libc.so.6
location, and the test-case passed.  But on powerpc it mapped to the
/lib64/ld64.so.2 location and I still got the same failures. ]

Fix this by setting two breakpoints on the calls to _exit and exit instead.

Tested on x86_64-linux and powerpc64le-linux.

Any comments?

Thanks,
- Tom

[gdb/testsuite] Work around skip_prologue problems in gdb.threads/process-dies-while-detaching.exp

---
 gdb/testsuite/gdb.threads/process-dies-while-detaching.c   | 4 ++--
 gdb/testsuite/gdb.threads/process-dies-while-detaching.exp | 8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/gdb/testsuite/gdb.threads/process-dies-while-detaching.c b/gdb/testsuite/gdb.threads/process-dies-while-detaching.c
index 502b4622614..c4c0b0a648b 100644
--- a/gdb/testsuite/gdb.threads/process-dies-while-detaching.c
+++ b/gdb/testsuite/gdb.threads/process-dies-while-detaching.c
@@ -46,7 +46,7 @@ void *
 thread_function (void *arg)
 {
   pthread_barrier_wait (&start_threads_barrier);
-  _exit (0);
+  _exit (0); /* Exit in thread.  */
 }
 
 /* The fork child's entry point.  */
@@ -63,7 +63,7 @@ child_function (void)
     pthread_create (&threads[i], NULL, thread_function, NULL);
   pthread_barrier_wait (&start_threads_barrier);
 
-  exit (0);
+  exit (0); /* Exit in child.  */
 }
 
 /* This is defined by the .exp file if testing the multi-process
diff --git a/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp b/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp
index cabbc4faacc..bbf1e0e6740 100644
--- a/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp
+++ b/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp
@@ -126,8 +126,12 @@ proc detach_and_expect_exit {inf_output_re test} {
 # Run to _exit in the child.
 
 proc continue_to_exit_bp {} {
-    gdb_breakpoint "_exit" temporary
-    gdb_continue_to_breakpoint "_exit" ".*_exit.*"
+    set line [gdb_get_line_number "Exit in child"]
+    gdb_breakpoint $line temporary
+    set line [gdb_get_line_number "Exit in thread"]
+    gdb_breakpoint $line temporary
+    gdb_continue_to_breakpoint "exit" ".*exit.*"
+    delete_breakpoints
 }
 
 # If testing single-process, simply detach from the process.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-11-11  9:51 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-29 19:24 [PATCH][gdb/testsuite] Work around skip_prologue problems in gdb.threads/process-dies-while-detaching.exp Tom de Vries
2021-11-02 11:38 ` Tom de Vries
2021-11-02 17:13   ` Kevin Buettner
2021-11-04 11:20     ` [PATCH][gdb/testsuite] Add gdb.opt/break-on-_exit.exp Tom de Vries
2021-11-09 16:35       ` Kevin Buettner
2021-11-09 16:58         ` Tom de Vries
2021-11-09 17:29           ` Kevin Buettner
2021-11-10 10:57             ` [PATCH][gdb/testsuite] Add gdb.arch/ppc64-break-on-_exit.exp Tom de Vries
2021-11-10 23:50               ` Kevin Buettner
2021-11-11  9:51                 ` Tom de Vries
2021-11-10 11:56             ` [PATCH][gdb/testsuite] Add gdb.opt/break-on-_exit.exp Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).