gdb/testsuite: fix gdb.debuginfod/fetch_src_and_symbols.exp with Clang
authorAndrew Burgess <aburgess@redhat.com>
Fri, 11 Nov 2022 15:58:45 +0000 (15:58 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Fri, 18 Nov 2022 11:21:37 +0000 (11:21 +0000)
commite86741b65ba9a614054241c0be45efb04484e320
tree94492bdc054f4412fb4eb0560d3624963efe776b
parent59d6ca65f5e29a110be55f5057c710e29527e229
gdb/testsuite: fix gdb.debuginfod/fetch_src_and_symbols.exp with Clang

The gdb.debuginfod/fetch_src_and_symbols.exp test is showing a single
failure when run with some older versions of Clang, e.g. 9.0.1.

The problem appears to be with Clang's generated line table.  The test
source looks like this:

  int
  main()
  {
    asm ("main_label: .globl main_label");
    return 0;
  }

In GDB, when we 'start', we expect to stop at the 'return 0;' line.
This is the behaviour when the compiler is gcc, or later versions of
Clang.

However, with Clang 9.0.2, I see GDB stop on the 'asm' line.

In this commit I'll fix this issue by placing a breakpoint on the
return line, and then using gdb_continue_to_breakpoint to ensure we
have stopped in the correct place.

Of course, using gdb_continue_to_breakpoint will only work if we are
not already stopped at the breakpoint location, so I've added some
filler work before the 'return 0;' line.  With this done we can use
gdb_continue_to_breakpoint in all cases.

As a result of adding the new filler work, one of the later tests,
that used the 'list' command, no longer see the correct expected
output (the top line of the source file is no longer included in the
output).  I've fixed this by listing a known specific line, the test
is checking that GDB managed to find the source file, it doesn't
matter which source line we list, as long as we can list something.
gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.c
gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp