gdb.dwarf2: Don't hardcode certain constants in Dwarf::assemble constructs

Message ID 20151029220954.3964b354@pinnacle.lan
State New, archived
Headers

Commit Message

Kevin Buettner Oct. 30, 2015, 5:09 a.m. UTC
  Two tests in gdb.dwarf2, data-loc.exp and dynarr-ptr.exp assume that
sizeof(int) is 4.  This patch looks up the integer size and uses this
constant for DW_AT_byte_size, DW_AT_lower_bound, and DW_AT_upper_bound.

I discovered this problem while looking at test results for this
msp430 multilib:

msp430-sim/-msim/-mcpu=msp430x/-mlarge/-mdata-region=either/-mcode-region=either

It fixes the following set of failures:

FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr.all'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr_tdef.all'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr_tdef'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr.all'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr_tdef.all'first
FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr_tdef'first
FAIL: gdb.dwarf2/data-loc.exp: print foo.three
FAIL: gdb.dwarf2/data-loc.exp: print foo.three(1)
FAIL: gdb.dwarf2/data-loc.exp: print foo.three(2)
FAIL: gdb.dwarf2/data-loc.exp: print foo.three(3)
FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef
FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef(1)
FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef(2)
FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef(3)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five
FAIL: gdb.dwarf2/data-loc.exp: print foo.five(2)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five(3)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five(4)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five(5)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five(6)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef
FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(2)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(3)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(4)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(5)
FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(6)
FAIL: gdb.dwarf2/data-loc.exp: print foo__three
FAIL: gdb.dwarf2/data-loc.exp: print foo__three_tdef
FAIL: gdb.dwarf2/data-loc.exp: print foo__five
FAIL: gdb.dwarf2/data-loc.exp: print foo__five_tdef

As I recall, there are still (other) problems with msp430 multilibs
which don't use -mlarge.

gdb/testsuite/ChangeLog:
    
    	* gdb.dwarf2/data-loc.exp (Dwarf::assemble): Don't hardcode
    	value associated with DW_AT_byte_size.
    	* gdb.dwarf2/dynarr-ptr.exp (Dwarf::assemble): Don't hardcode
    	constants for DW_AT_lower_bound, and DW_AT_upper_bound.
---
 gdb/testsuite/gdb.dwarf2/data-loc.exp   | 3 ++-
 gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp | 7 ++++---
 2 files changed, 6 insertions(+), 4 deletions(-)
  

Comments

Doug Evans Nov. 1, 2015, 4:23 a.m. UTC | #1
On Thu, Oct 29, 2015 at 10:09 PM, Kevin Buettner <kevinb@redhat.com> wrote:
> Two tests in gdb.dwarf2, data-loc.exp and dynarr-ptr.exp assume that
> sizeof(int) is 4.  This patch looks up the integer size and uses this
> constant for DW_AT_byte_size, DW_AT_lower_bound, and DW_AT_upper_bound.
>
> I discovered this problem while looking at test results for this
> msp430 multilib:
>
> msp430-sim/-msim/-mcpu=msp430x/-mlarge/-mdata-region=either/-mcode-region=either
>
> It fixes the following set of failures:
>
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr.all'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr_tdef.all'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr_tdef'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr.all'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr_tdef.all'first
> FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.five_ptr_tdef'first
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three(1)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three(2)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three(3)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef(1)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef(2)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.three_tdef(3)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five(2)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five(3)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five(4)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five(5)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five(6)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(2)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(3)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(4)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(5)
> FAIL: gdb.dwarf2/data-loc.exp: print foo.five_tdef(6)
> FAIL: gdb.dwarf2/data-loc.exp: print foo__three
> FAIL: gdb.dwarf2/data-loc.exp: print foo__three_tdef
> FAIL: gdb.dwarf2/data-loc.exp: print foo__five
> FAIL: gdb.dwarf2/data-loc.exp: print foo__five_tdef
>
> As I recall, there are still (other) problems with msp430 multilibs
> which don't use -mlarge.
>
> gdb/testsuite/ChangeLog:
>
>         * gdb.dwarf2/data-loc.exp (Dwarf::assemble): Don't hardcode
>         value associated with DW_AT_byte_size.
>         * gdb.dwarf2/dynarr-ptr.exp (Dwarf::assemble): Don't hardcode
>         constants for DW_AT_lower_bound, and DW_AT_upper_bound.
> ---
>  gdb/testsuite/gdb.dwarf2/data-loc.exp   | 3 ++-
>  gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp | 7 ++++---
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.dwarf2/data-loc.exp b/gdb/testsuite/gdb.dwarf2/data-loc.exp
> index 4802a0a..305d004 100644
> --- a/gdb/testsuite/gdb.dwarf2/data-loc.exp
> +++ b/gdb/testsuite/gdb.dwarf2/data-loc.exp
> @@ -45,9 +45,10 @@ Dwarf::assemble $asm_file {
>                  {DW_AT_comp_dir /tmp}
>          } {
>              declare_labels integer_label array_label array_ptr_label
> +           set int_size [get_sizeof "int" 4]
>
>              integer_label: DW_TAG_base_type {
> -                {DW_AT_byte_size 4 DW_FORM_sdata}
> +                {DW_AT_byte_size $int_size DW_FORM_sdata}
>                  {DW_AT_encoding  @DW_ATE_signed}
>                  {DW_AT_name      integer}
>              }
> diff --git a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
> index d0a74be..0ad09f2 100644
> --- a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
> @@ -47,6 +47,7 @@ Dwarf::assemble $asm_file {
>              declare_labels integer_label array_label array_ptr_label \
>                  array_typedef_label
>              set ptr_size [get_sizeof "void *" 96]
> +           set int_size [get_sizeof "int" 4]
>
>              integer_label: DW_TAG_base_type {
>                  {DW_AT_byte_size 4 DW_FORM_sdata}
> @@ -63,15 +64,15 @@ Dwarf::assemble $asm_file {
>                     {DW_AT_type        :$integer_label}
>                      {DW_AT_lower_bound {
>                          DW_OP_push_object_address
> -                        DW_OP_lit8
> +                        DW_OP_const1u [expr {2 * $int_size}]
>                          DW_OP_minus
> -                        DW_OP_deref_size 4
> +                        DW_OP_deref_size $int_size
>                      } SPECIAL_expr}
>                      {DW_AT_upper_bound {
>                          DW_OP_push_object_address
>                          DW_OP_lit4
>                          DW_OP_minus
> -                        DW_OP_deref_size 4
> +                        DW_OP_deref_size $int_size
>                      } SPECIAL_expr}
>                 }
>             }
>

I don't know array bound support very well, but does the lit4 need to
change too?
Seems odd to have lit8 for lower and lit4 for upper though. Bug?
  

Patch

diff --git a/gdb/testsuite/gdb.dwarf2/data-loc.exp b/gdb/testsuite/gdb.dwarf2/data-loc.exp
index 4802a0a..305d004 100644
--- a/gdb/testsuite/gdb.dwarf2/data-loc.exp
+++ b/gdb/testsuite/gdb.dwarf2/data-loc.exp
@@ -45,9 +45,10 @@  Dwarf::assemble $asm_file {
                 {DW_AT_comp_dir /tmp}
         } {
             declare_labels integer_label array_label array_ptr_label
+	    set int_size [get_sizeof "int" 4]
 
             integer_label: DW_TAG_base_type {
-                {DW_AT_byte_size 4 DW_FORM_sdata}
+                {DW_AT_byte_size $int_size DW_FORM_sdata}
                 {DW_AT_encoding  @DW_ATE_signed}
                 {DW_AT_name      integer}
             }
diff --git a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
index d0a74be..0ad09f2 100644
--- a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
+++ b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
@@ -47,6 +47,7 @@  Dwarf::assemble $asm_file {
             declare_labels integer_label array_label array_ptr_label \
                 array_typedef_label
             set ptr_size [get_sizeof "void *" 96]
+	    set int_size [get_sizeof "int" 4]
 
             integer_label: DW_TAG_base_type {
                 {DW_AT_byte_size 4 DW_FORM_sdata}
@@ -63,15 +64,15 @@  Dwarf::assemble $asm_file {
 		    {DW_AT_type        :$integer_label}
                     {DW_AT_lower_bound {
                         DW_OP_push_object_address
-                        DW_OP_lit8
+                        DW_OP_const1u [expr {2 * $int_size}]
                         DW_OP_minus
-                        DW_OP_deref_size 4
+                        DW_OP_deref_size $int_size
                     } SPECIAL_expr}
                     {DW_AT_upper_bound {
                         DW_OP_push_object_address
                         DW_OP_lit4
                         DW_OP_minus
-                        DW_OP_deref_size 4
+                        DW_OP_deref_size $int_size
                     } SPECIAL_expr}
 		}
 	    }