This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: Sporadic failures of selftest tests
- From: Pedro Alves <palves at redhat dot com>
- To: Ulrich Weigand <uweigand at de dot ibm dot com>, gdb-patches at sourceware dot org
- Date: Tue, 17 Oct 2017 15:24:57 +0100
- Subject: Re: Sporadic failures of selftest tests
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=palves at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C256B7F7AB
- References: <20171017140032.2D8AAD807C2@oc3748833570.ibm.com>
On 10/17/2017 03:00 PM, Ulrich Weigand wrote:
> Hello,
>
> I'm now seeing sporadic failures of some of the self-test test cases
> running natively on x64_86. A failing case looks like:
>
> (gdb) break captured_command_loop
> Breakpoint 1 at 0x7117b0: file ../../binutils-gdb/gdb/main.c, line 324.
> (gdb) PASS: gdb.gdb/complaints.exp: breakpoint in captured_command_loop
[...]
> Type "apropos word" to search for commands related to "word".
> (gdb)
> Breakpoint 1, captured_main (data=0x7fffffffd2e0) at ../../binutils-gdb/gdb/main.c:1147
> 1147 captured_command_loop ();
> (gdb) XFAIL: gdb.gdb/complaints.exp: run until breakpoint at captured_command_loop (line numbers scrambled?)
>
> Just from reading the logs this looks like the gdb_test_multiple in selftest_setup
> gets the GDB prompt from the inferior GDB and assumes it comes from the outer GDB.
I don't think so. "captured_main" is a function in the inferior
GDB, so that's the superior gdb's prompt. I.e., the test ran
the inferior GDB to main, well before the inferior GDB could print
a prompt.
> Pedro, I'm not sure if this may have anything to do with your recent testsuite
> changes, but I didn't see any other obvious candidates in the logs either :-)
This one kind of looks related:
commit bf4692711232eb96cd840f96d88897a2746d8190
Author: Pedro Alves <palves@redhat.com>
AuthorDate: Tue Oct 10 16:45:50 2017 +0100
Eliminate catch_errors
which did:
--- a/gdb/testsuite/lib/selftest-support.exp
+++ b/gdb/testsuite/lib/selftest-support.exp
@@ -88,10 +88,10 @@ proc selftest_setup { executable function } {
set description "run until breakpoint at $function"
gdb_test_multiple "run $INTERNAL_GDBFLAGS" "$description" {
- -re "Starting program.*Breakpoint \[0-9\]+,.*$function .data.* at .*main.c:.*$gdb_prompt $" {
+ -re "Starting program.*Breakpoint \[0-9\]+,.*$function \\(\\).* at .*main.c:.*$gdb_prompt $" {
pass "$description"
}
- -re "Starting program.*Breakpoint \[0-9\]+,.*$function .data.*$gdb_prompt $" {
+ -re "Starting program.*Breakpoint \[0-9\]+,.*$function \\(\\).*$gdb_prompt $" {
xfail "$description (line numbers scrambled?)"
}
-re "Starting program.*Breakpoint \[0-9\]+,.* at .*main.c:.*$function.*$gdb_prompt $" {
while above in your log, we still see that the test stopped
in the captured_main function, which has a data parameter:
> Breakpoint 1, captured_main (data=0x7fffffffd2e0) at ../../binutils-gdb/gdb/main.c:1147
However, that means GDB stopped in the totally wrong function, so likely
it'd have failed before too.
Now the question should be why did GDB stop there, when breakpoint 1
was supposedly set on captured_command_loop ?
> (gdb) break captured_command_loop
> Breakpoint 1 at 0x7117b0: file ../../binutils-gdb/gdb/main.c, line 324.
> (gdb) PASS: gdb.gdb/complaints.exp: breakpoint in captured_command_loop
...
> (gdb)
> Breakpoint 1, captured_main (data=0x7fffffffd2e0) at ../../binutils-gdb/gdb/main.c:1147
> 1147 captured_command_loop ();
That seems to be the root of the problem.
I wonder whether that's somehow related to the other Power regression
Simon reported:
https://sourceware.org/ml/gdb-patches/2017-10/msg00444.html
I haven't managed to investigate that one.
Does it reproduce easily for you? If so, I'd suggest a git bisect to
find the culprit.
> Have you see this issue before? How is this supposed to work in the first place?
> Is there anything that would allow the testsuite to distinguish the gdb prompts
> emitted by the two GDBs?
The selftests that need to distinguish the prompts do "set prompt (xgdb)" to
change one the prompt of one of the gdb's. But that's a red herring in this case.
Thanks,
Pedro Alves