This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Sporadic failures of selftest tests


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]