From f2e0d4b4ebd224797385ca22a031d74346b2475a Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Sun, 11 Jan 2015 15:45:43 -0800 Subject: [PATCH] Require numeric attributes to specify the form. gdb/testsuite/ChangeLog: * lib/dwarf.exp (Dwarf): Flag an error if a numeric attribute value is given without an explicit form. * gdb.dwarf2/arr-subrange.exp: Specify forms for all numeric attributes. * gdb.dwarf/corrupt.exp: Ditto. * gdb.dwarf2/enum-type.exp: Ditto. * gdb.trace/entry-values.exp: Ditto. * gdb.trace/unavailable-dwarf-piece.exp: Ditto. --- gdb/testsuite/ChangeLog | 11 +++++++++++ gdb/testsuite/gdb.dwarf2/arr-subrange.exp | 4 ++-- gdb/testsuite/gdb.dwarf2/corrupt.exp | 10 +++++----- gdb/testsuite/gdb.dwarf2/enum-type.exp | 2 +- gdb/testsuite/gdb.trace/entry-values.exp | 6 +++--- gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp | 12 ++++++------ gdb/testsuite/lib/dwarf.exp | 8 +++++++- 7 files changed, 35 insertions(+), 18 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4bcd4f594e9..6e967c7822e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2015-01-11 Doug Evans + + * lib/dwarf.exp (Dwarf): Flag an error if a numeric attribute value + is given without an explicit form. + * gdb.dwarf2/arr-subrange.exp: Specify forms for all numeric + attributes. + * gdb.dwarf/corrupt.exp: Ditto. + * gdb.dwarf2/enum-type.exp: Ditto. + * gdb.trace/entry-values.exp: Ditto. + * gdb.trace/unavailable-dwarf-piece.exp: Ditto. + 2015-01-11 Doug Evans PR gdb/15830 diff --git a/gdb/testsuite/gdb.dwarf2/arr-subrange.exp b/gdb/testsuite/gdb.dwarf2/arr-subrange.exp index 6aacb270e70..417ee4430c4 100644 --- a/gdb/testsuite/gdb.dwarf2/arr-subrange.exp +++ b/gdb/testsuite/gdb.dwarf2/arr-subrange.exp @@ -29,8 +29,8 @@ Dwarf::assemble $asm_file { {DW_AT_language @DW_LANG_Ada95} {DW_AT_name foo.adb} {DW_AT_comp_dir /tmp} - {DW_AT_low_pc 0x1000} - {DW_AT_high_pc 0x2000} + {DW_AT_low_pc 0x1000 addr} + {DW_AT_high_pc 0x2000 addr} } { declare_labels boolean_label typedef_label array_label enum_label diff --git a/gdb/testsuite/gdb.dwarf2/corrupt.exp b/gdb/testsuite/gdb.dwarf2/corrupt.exp index a8558be779c..4e86f4abc82 100644 --- a/gdb/testsuite/gdb.dwarf2/corrupt.exp +++ b/gdb/testsuite/gdb.dwarf2/corrupt.exp @@ -38,25 +38,25 @@ Dwarf::assemble $asm_file { declare_labels int_label int_label: base_type { - {byte_size 4} + {byte_size 4 sdata} {name "int"} } enumeration_type { {name "ENUM"} - {byte_size 4} + {byte_size 4 sdata} } { enumerator { {name "A"} - {const_value 0} + {const_value 0 sdata} } enumerator { {name "B"} - {const_value 1} + {const_value 1 sdata} {sibling 12345678 DW_FORM_ref4} } { base_type { - {byte_size 1} + {byte_size 1 sdata} {name "char"} } } diff --git a/gdb/testsuite/gdb.dwarf2/enum-type.exp b/gdb/testsuite/gdb.dwarf2/enum-type.exp index 48a9f0fea4f..351e51f8ca6 100644 --- a/gdb/testsuite/gdb.dwarf2/enum-type.exp +++ b/gdb/testsuite/gdb.dwarf2/enum-type.exp @@ -50,7 +50,7 @@ Dwarf::assemble $asm_file { } { DW_TAG_enumerator { {DW_AT_name ONE} - {DW_AT_const_value 1} + {DW_AT_const_value 1 DW_FORM_sdata} } } diff --git a/gdb/testsuite/gdb.trace/entry-values.exp b/gdb/testsuite/gdb.trace/entry-values.exp index 2548e89cceb..0cf56151fc3 100644 --- a/gdb/testsuite/gdb.trace/entry-values.exp +++ b/gdb/testsuite/gdb.trace/entry-values.exp @@ -102,7 +102,7 @@ Dwarf::assemble $asm_file { } foo_label: subprogram { - {decl_file 1} + {decl_file 1 sdata} {MACRO_AT_func { foo ${srcdir}/${subdir}/${srcfile} }} } { formal_parameter { @@ -119,10 +119,10 @@ Dwarf::assemble $asm_file { subprogram { {name bar} - {decl_file 1} + {decl_file 1 sdata} {low_pc $bar_start addr} {high_pc "$bar_start + $bar_length" addr} - {GNU_all_call_sites 1} + {GNU_all_call_sites 1 sdata} } { formal_parameter { {type :$int_label} diff --git a/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp b/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp index 75b8bf57166..17d3a140f14 100644 --- a/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp +++ b/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp @@ -44,8 +44,8 @@ Dwarf::assemble $asm_file { struct_s_label: DW_TAG_structure_type { {name s} {byte_size 3 DW_FORM_sdata} - {decl_file 1} - {decl_line 1} + {decl_file 1 DW_FORM_sdata} + {decl_line 1 DW_FORM_sdata} } { DW_TAG_member { {name a} @@ -73,8 +73,8 @@ Dwarf::assemble $asm_file { struct_t_label: DW_TAG_structure_type { {name t} {byte_size 3 DW_FORM_sdata} - {decl_file 1} - {decl_line 1} + {decl_file 1 DW_FORM_sdata} + {decl_line 1 DW_FORM_sdata} } { DW_TAG_member { {name a} @@ -174,7 +174,7 @@ Dwarf::assemble $asm_file { DW_TAG_subprogram { {name foo} - {decl_file 1} + {decl_file 1 sdata} {low_pc foo addr} {high_pc foo_end_lbl addr} } { @@ -219,7 +219,7 @@ Dwarf::assemble $asm_file { DW_TAG_subprogram { {name bar} - {decl_file 1} + {decl_file 1 sdata} {low_pc bar addr} {high_pc bar_end_lbl addr} } { diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp index f44ecd7524c..8ea7a0fdc42 100644 --- a/gdb/testsuite/lib/dwarf.exp +++ b/gdb/testsuite/lib/dwarf.exp @@ -225,7 +225,9 @@ proc function_range { func src } { # reference. The rest of VALUE is taken to be the name of a label, # and DW_FORM_ref4 is used. See 'new_label' and 'define_label'. # * Otherwise, VALUE is taken to be a string and DW_FORM_string is -# used. +# used. In order to prevent bugs where a numeric value is given but +# no form is specified, it is an error if the value looks like a number +# (using Tcl's "string is integer") and no form is provided. # More form-guessing functionality may be added. # # CHILDREN is just Tcl code that can be used to define child DIEs. It @@ -614,6 +616,10 @@ namespace eval Dwarf { if {[llength $attr] > 2} { set attr_form [lindex $attr 2] } else { + # If the value looks like an integer, a form is required. + if [string is integer $attr_value] { + error "Integer value requires a form" + } set attr_form [_guess_form $attr_value attr_value] } set attr_form [_map_name $attr_form _FORM] -- 2.30.2