Fix pedantically invalid DWARF in gdb.trace/unavailable-dwarf-piece.exp
authorPedro Alves <pedro@palves.net>
Thu, 7 Jul 2022 12:05:50 +0000 (13:05 +0100)
committerPedro Alves <pedro@palves.net>
Thu, 7 Jul 2022 12:27:39 +0000 (13:27 +0100)
The DWARF spec says:

  Any debugging information entry representing the declaration of an object,
  module, subprogram or type may have DW_AT_decl_file, DW_AT_decl_line and
  DW_AT_decl_column attributes, each of whose value is an unsigned integer
  ^^^^^^^^
  constant.

Grepping around the DWARF-assembler-based testcases, I noticed that
gdb.trace/unavailable-dwarf-piece.exp emits decl_line with
DW_FORM_sdata, a signed integer form.  This commit tweaks it to use
DW_FORM_udata instead.

Unsurprisingly, this:

  $ make check \
      TESTS="gdb.trace/unavailable-dwarf-piece.exp" \
      RUNTESTFLAGS="--target_board=native-gdbserver"

... still passes cleanly for me after this change.

I've noticed this because current llvm-dwarfdump crashed on an
ROCm-internal DWARF-assembler-based testcase that incorrectly used
signed forms for DW_AT_decl_file/DW_AT_decl_line.

The older llvm-dwarfdump found on Ubuntu 20.04 (LLVM 10) reads the
line numbers with signed forms as "0" instead of crashing.  Here's the
before/after fix for gdb.trace/unavailable-dwarf-piece.exp with that
llvm-dwarfdump version:

  $ diff -up before.txt after.txt
  --- before.txt    2022-07-07 13:21:28.387690334 +0100
  +++ after.txt     2022-07-07 13:21:39.379801092 +0100
  @@ -18,7 +18,7 @@
   DW_AT_name     ("s")
   DW_AT_byte_size        (3)
   DW_AT_decl_file        (0)
  -                DW_AT_decl_line        (0)
  +                DW_AT_decl_line        (1)

   0x0000002f:     DW_TAG_member
     DW_AT_name   ("a")
  @@ -41,7 +41,7 @@
   DW_AT_name     ("t")
   DW_AT_byte_size        (3)
   DW_AT_decl_file        (0)
  -                DW_AT_decl_line        (0)
  +                DW_AT_decl_line        (1)

   0x00000054:     DW_TAG_member
     DW_AT_name   ("a")

Change-Id: I5c866946356da421ff944019d0eca2607b2b738f

gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp

index c6b1382e9b144841b38e1822ce006859e9403a7a..f80f8005fcf047c0489b7047ee0ec371400e4616 100644 (file)
@@ -45,7 +45,7 @@ Dwarf::assemble $asm_file {
                {name s}
                {byte_size 3 DW_FORM_sdata}
                {decl_file 0 DW_FORM_udata}
-               {decl_line 1 DW_FORM_sdata}
+               {decl_line 1 DW_FORM_udata}
            } {
                DW_TAG_member {
                    {name a}
@@ -74,7 +74,7 @@ Dwarf::assemble $asm_file {
                {name t}
                {byte_size 3 DW_FORM_sdata}
                {decl_file 0 DW_FORM_udata}
-               {decl_line 1 DW_FORM_sdata}
+               {decl_line 1 DW_FORM_udata}
            } {
                DW_TAG_member {
                    {name a}