public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] [gdb/testsuite] Require DW_LNE_end_sequence
@ 2024-04-17 10:55 Tom de Vries
0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2024-04-17 10:55 UTC (permalink / raw)
To: gdb-cvs
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0f91492fcf3e75a014c605bc61fc7eed8ad5100e
commit 0f91492fcf3e75a014c605bc61fc7eed8ad5100e
Author: Tom de Vries <tdevries@suse.de>
Date: Wed Apr 17 12:55:00 2024 +0200
[gdb/testsuite] Require DW_LNE_end_sequence
The dwarf standard requires that every line number program sequence ends
with a DW_LNE_end_sequence instruction.
Enforce this in the dwarf assembler for the last sequence in a line number
program (we have no means to enforce this for earlier sequences), and fix a
few test-case that don't have it.
Tested on aarch64-linux.
PR testsuite/31618
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31618
Diff:
---
gdb/testsuite/gdb.dwarf2/dw2-noloc.exp | 3 +++
.../gdb.dwarf2/dw2-symtab-includes-lookup.exp | 7 ++++++
gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp | 7 ++++++
gdb/testsuite/lib/dwarf.exp | 26 ++++++++++++++++++++++
4 files changed, 43 insertions(+)
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp b/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
index 8c96ab8b0c5..bd74760e29c 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
@@ -203,6 +203,9 @@ Dwarf::assemble $asm_file {
line [gdb_get_line_number "main start"]
DW_LNS_set_prologue_end
DW_LNS_copy
+
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp
index 14bc84882be..96a528498da 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp
@@ -50,6 +50,8 @@ Dwarf::assemble $asm_file {
declare_labels partial_label lines_label
global srcdir subdir srcfile
+ get_func_info main
+
cu {} {
partial_label: partial_unit {
{stmt_list ${lines_label} DW_FORM_sec_offset}
@@ -77,7 +79,12 @@ Dwarf::assemble $asm_file {
include_dir "${srcdir}/${subdir}"
file_name "dw2-symtab-includes.h" 1
program {
+ DW_LNE_set_address $main_start
DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp
index 09007f22200..dc4a788bd70 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp
@@ -29,6 +29,8 @@ Dwarf::assemble $asm_file {
declare_labels partial_label lines_label
global srcdir subdir srcfile
+ get_func_info main
+
cu {} {
partial_label: partial_unit {} {
}
@@ -49,7 +51,12 @@ Dwarf::assemble $asm_file {
include_dir "${srcdir}/${subdir}"
file_name "dw2-symtab-includes.h" 1
program {
+ DW_LNE_set_address $main_start
DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp
index 254f88f1055..c694375b534 100644
--- a/gdb/testsuite/lib/dwarf.exp
+++ b/gdb/testsuite/lib/dwarf.exp
@@ -2546,16 +2546,20 @@ namespace eval Dwarf {
variable _line_header_end_label
variable _line
variable _line_address_update
+ variable _line_program_terminated
set _line 1
set _line_address_update 0
+ set _line_program_terminated 0
_line_finalize_header
proc DW_LNE_set_address {addr} {
variable _line_address_update
set _line_address_update 1
+ variable _line_program_terminated
+ set _line_program_terminated 0
_op .byte 0
set start [new_label "set_address_start"]
set end [new_label "set_address_end"]
@@ -2576,6 +2580,8 @@ namespace eval Dwarf {
error "Missing address update for end_sequence"
}
set _line_address_update 0
+ variable _line_program_terminated
+ set _line_program_terminated 1
variable _line
_op .byte 0
_op .uleb128 1
@@ -2584,6 +2590,8 @@ namespace eval Dwarf {
}
proc DW_LNE_user { len opcode } {
+ variable _line_program_terminated
+ set _line_program_terminated 0
set DW_LNE_lo_usr 0x80
set DW_LNE_hi_usr 0xff
if { $DW_LNE_lo_usr <= $opcode
@@ -2605,22 +2613,32 @@ namespace eval Dwarf {
error "Missing address update for copy"
}
set _line_address_update 0
+ variable _line_program_terminated
+ set _line_program_terminated 0
_op .byte 1
}
proc DW_LNS_negate_stmt {} {
+ variable _line_program_terminated
+ set _line_program_terminated 0
_op .byte 6
}
proc DW_LNS_set_prologue_end {} {
+ variable _line_program_terminated
+ set _line_program_terminated 0
_op .byte 0x0a
}
proc DW_LNS_set_epilogue_begin {} {
+ variable _line_program_terminated
+ set _line_program_terminated 0
_op .byte 0x0b
}
proc DW_LNS_advance_pc {offset} {
+ variable _line_program_terminated
+ set _line_program_terminated 0
variable _line_address_update
set _line_address_update 1
_op .byte 2
@@ -2628,6 +2646,8 @@ namespace eval Dwarf {
}
proc DW_LNS_advance_line {offset} {
+ variable _line_program_terminated
+ set _line_program_terminated 0
variable _line
_op .byte 3
_op .sleb128 ${offset}
@@ -2650,11 +2670,17 @@ namespace eval Dwarf {
}
proc DW_LNS_set_file {num} {
+ variable _line_program_terminated
+ set _line_program_terminated 0
_op .byte 4
_op .sleb128 ${num}
}
uplevel $body
+
+ if { $_line_program_terminated == 0 } {
+ error "Missing end_seq"
+ }
}
uplevel $body
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-04-17 10:55 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-17 10:55 [binutils-gdb] [gdb/testsuite] Require DW_LNE_end_sequence Tom de Vries
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).