aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <pedro@palves.net>2022-07-07 13:05:50 +0100
committerPedro Alves <pedro@palves.net>2022-07-07 13:27:39 +0100
commita2a176c46bcb739db47c88b5641a23c1129accf0 (patch)
treedf57a7305b3c48084fd316d45651e81148a2bb25
parent83f477f25ad63ea9f2e5e5fc9c0a7297a46a7a21 (diff)
downloadgdb-a2a176c46bcb739db47c88b5641a23c1129accf0.zip
gdb-a2a176c46bcb739db47c88b5641a23c1129accf0.tar.gz
gdb-a2a176c46bcb739db47c88b5641a23c1129accf0.tar.bz2
Fix pedantically invalid DWARF in gdb.trace/unavailable-dwarf-piece.exp
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
-rw-r--r--gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp4
1 files changed, 2 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp b/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp
index c6b1382..f80f800 100644
--- a/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp
+++ b/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp
@@ -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}