aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <xdje42@gmail.com>2015-01-11 15:45:43 -0800
committerDoug Evans <xdje42@gmail.com>2015-01-11 15:45:43 -0800
commitf2e0d4b4ebd224797385ca22a031d74346b2475a (patch)
treed5d73d05ac3ff3121ac80958e9ed2876574a9f60
parent6a3ca067521821b6c2ad9a836104d11e6dd760cb (diff)
downloadgdb-f2e0d4b4ebd224797385ca22a031d74346b2475a.zip
gdb-f2e0d4b4ebd224797385ca22a031d74346b2475a.tar.gz
gdb-f2e0d4b4ebd224797385ca22a031d74346b2475a.tar.bz2
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.
-rw-r--r--gdb/testsuite/ChangeLog11
-rw-r--r--gdb/testsuite/gdb.dwarf2/arr-subrange.exp4
-rw-r--r--gdb/testsuite/gdb.dwarf2/corrupt.exp10
-rw-r--r--gdb/testsuite/gdb.dwarf2/enum-type.exp2
-rw-r--r--gdb/testsuite/gdb.trace/entry-values.exp6
-rw-r--r--gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp12
-rw-r--r--gdb/testsuite/lib/dwarf.exp8
7 files changed, 35 insertions, 18 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 4bcd4f5..6e967c7 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,16 @@
2015-01-11 Doug Evans <xdje42@gmail.com>
+ * 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 <xdje42@gmail.com>
+
PR gdb/15830
* gdb.base/maint.exp: Remove references to "maint demangle".
* gdb.cp/demangle.exp: Update. "maint demangle" -> "demangle".
diff --git a/gdb/testsuite/gdb.dwarf2/arr-subrange.exp b/gdb/testsuite/gdb.dwarf2/arr-subrange.exp
index 6aacb27..417ee44 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 a8558be..4e86f4a 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 48a9f0f..351e51f 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 2548e89..0cf5615 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 75b8bf5..17d3a14 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 f44ecd7..8ea7a0f 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]