diff options
author | Pedro Alves <pedro@palves.net> | 2022-07-07 13:05:50 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2022-07-07 13:27:39 +0100 |
commit | a2a176c46bcb739db47c88b5641a23c1129accf0 (patch) | |
tree | df57a7305b3c48084fd316d45651e81148a2bb25 /gdb/testsuite | |
parent | 83f477f25ad63ea9f2e5e5fc9c0a7297a46a7a21 (diff) | |
download | gdb-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
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp | 4 |
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} |