Require numeric attributes to specify the form.
authorDoug Evans <xdje42@gmail.com>
Sun, 11 Jan 2015 23:45:43 +0000 (15:45 -0800)
committerDoug Evans <xdje42@gmail.com>
Sun, 11 Jan 2015 23:45:43 +0000 (15:45 -0800)
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
gdb/testsuite/gdb.dwarf2/arr-subrange.exp
gdb/testsuite/gdb.dwarf2/corrupt.exp
gdb/testsuite/gdb.dwarf2/enum-type.exp
gdb/testsuite/gdb.trace/entry-values.exp
gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp
gdb/testsuite/lib/dwarf.exp

index 4bcd4f5..6e967c7 100644 (file)
@@ -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".
index 6aacb27..417ee44 100644 (file)
@@ -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
 
index a8558be..4e86f4a 100644 (file)
@@ -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"}
                    }
                }
index 48a9f0f..351e51f 100644 (file)
@@ -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}
                }
            }
 
index 2548e89..0cf5615 100644 (file)
@@ -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}
index 75b8bf5..17d3a14 100644 (file)
@@ -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}
            } {
index f44ecd7..8ea7a0f 100644 (file)
@@ -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]