From cecf854779049c3f491caf23f80d13eabbb90c86 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Tue, 4 Feb 2020 17:50:40 +0000 Subject: [PATCH] gdb/testsuite: Add is-stmt support to the DWARF compiler This commit adds the ability to set and toggle the DWARF line table is-stmt flag. A DWARF line table can now be created with the attribute 'default_is_stmt' like this: lines {version 2 default_is_stmt 0} label { ... } If 'default_is_stmt' is not specified then the current default is 1, which matches the existing behaviour. Inside the DWARF line table program you can now make use of {DW_LNS_negate_stmt} to toggle the is-stmt flag, for example this meaningless program: lines {version 2 default_is_stmt 0} label { include_dir "some_directory" file_name "some_filename" 1 program { {DW_LNS_negate_stmt} {DW_LNE_end_sequence} } } This new functionality will be used in a later commit. gdb/testsuite/ChangeLog: * lib/dwarf.exp (Dwarf::lines) Add support for modifying the is-stmt flag in the line table. Change-Id: Ia3f61d523826382dd2333f65b9aae368ad29c4a5 --- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/lib/dwarf.exp | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f9e0c201c1f..a98e56dca23 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-03-10 Andrew Burgess + + * lib/dwarf.exp (Dwarf::lines) Add support for modifying the + is-stmt flag in the line table. + 2020-03-09 Tom de Vries * lib/gdb.exp (cached_file): Create cache dir. diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp index 6c6ffbe7c2f..417b22d2345 100644 --- a/gdb/testsuite/lib/dwarf.exp +++ b/gdb/testsuite/lib/dwarf.exp @@ -1311,12 +1311,14 @@ namespace eval Dwarf { set _unit_addr_size default set _line_saw_program 0 set _line_saw_file 0 + set _default_is_stmt 1 foreach { name value } $options { switch -exact -- $name { is_64 { set is_64 $value } version { set _unit_version $value } addr_size { set _unit_addr_size $value } + default_is_stmt { set _default_is_stmt $value } default { error "unknown option $name" } } } @@ -1363,7 +1365,7 @@ namespace eval Dwarf { define_label $header_len_label _op .byte 1 "minimum_instruction_length" - _op .byte 1 "default_is_stmt" + _op .byte $_default_is_stmt "default_is_stmt" _op .byte 1 "line_base" _op .byte 1 "line_range" _op .byte 10 "opcode_base" @@ -1438,6 +1440,10 @@ namespace eval Dwarf { _op .byte 1 } + proc DW_LNS_negate_stmt {} { + _op .byte 6 + } + proc DW_LNS_advance_pc {offset} { _op .byte 2 _op .uleb128 ${offset} -- 2.30.2