From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: Re: [PATCH][gdb/testsuite] Work around skip_prologue problems in gdb.threads/process-dies-while-detaching.exp
Date: Tue, 2 Nov 2021 12:38:26 +0100 [thread overview]
Message-ID: <2cc5e63d-5be1-a5c7-b1cd-6058223a5a19@suse.de> (raw)
In-Reply-To: <20211029192419.GA26416@delia>
On 10/29/21 9:24 PM, Tom de Vries via Gdb-patches wrote:
> 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,
Filed here: https://sourceware.org/bugzilla/show_bug.cgi?id=28527 .
Submitted patch here:
https://sourceware.org/pipermail/gdb-patches/2021-November/183016.html .
Thanks,
- Tom
> 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.
>
next prev parent reply other threads:[~2021-11-02 11:38 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-29 19:24 Tom de Vries
2021-11-02 11:38 ` Tom de Vries [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2cc5e63d-5be1-a5c7-b1cd-6058223a5a19@suse.de \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).