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

Doug Evans dje@google.com
Sun Nov 1 04:24:00 GMT 2015


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?



More information about the Gdb-patches mailing list