gdb/testsuite: test for a function with no line table
authorAndrew Burgess <aburgess@redhat.com>
Wed, 17 May 2023 14:14:15 +0000 (15:14 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Fri, 19 May 2023 09:16:44 +0000 (10:16 +0100)
commitef56b006501ba52b128d4e5f36657ddbf56d22bc
tree52579ec30401cb403f720e57c8840bd7b84e94a9
parenta500c3d8e0260a556d48c7d5ee2bc4212982dfe2
gdb/testsuite: test for a function with no line table

This commit adds a test for the following commit:

  commit e86e87f77fd5d8afb3e714f1d9e09e0ff5b4e6ff
  Date:   Tue Nov 28 16:23:32 2006 +0000

              * symtab.c (find_pc_sect_line): Do not return a line before
              the start of a symtab.

We have been carrying a test for that commit in the Fedora GDB tree
since that commit was added to GDB.  I don't know why the test wasn't
added along with the original commit, but as was written, the test is
pretty gross, it uses objcopy to pull the .text section from an object
file, which was then injected into another source file within a .asm
statement...

... these days we can just make use of the DWARF assembler to achieve
the same results, so I've rewritten the test and think it is worth
adding this to upstream GDB.

The original patch was about about how we find the best symtab and
line table entry, and what to do when GDB can't find a good match.

The new test creates a CU with two functions, only one of which is
covered by the line table.  With the above patch reverted GDB returns
an invalid address.

With the above patch reverted I did run the testsuite to see what
other tests might already be exercising this functionality, and I
found two tests:

  gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp
  gdb.dwarf2/dw2-vendor-extended-opcode.exp

These are pretty similar, they either create minimal, or no line table
for one of the functions in the source file, and as a consequence GDB
returns an unexpected address at some point during the test.

However, both of those tests are really focused on other issues, so I
think this new test does add some value.  Plus the new test is not
large, so it's not a huge cost to also run this new test.

Reviewed-By: Tom Tromey <tom@tromey.com>
gdb/testsuite/gdb.dwarf2/missing-line-table.c [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/missing-line-table.exp [new file with mode: 0644]