On Tue, Jul 6, 2021 at 3:26 AM Indu Bhagat via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> If the value of the DW_AT_data_member_location attribute is constant, the
> associated unit is bytes. This patch amends incorrect behaviour which was 
> being
> exercised with -gdwarf-2. This caused some of the failures as noted in PR
> debug/101283 (specifically the BTF tests involving btm_offset).
>
> The testcase ctf-struct-array-2.c was erroneously checking for the value of
> ctm_offset in number of bytes.
>
> The patch fixes the calculation of the field location value for a struct 
> member
> in dwarf2ctf and adjusts the testcase. This patch also fixes some of the
> failing tests as noted in PR debug/101283.

OK

> 2021-07-05  Indu Bhagat  <indu.bha...@oracle.com>
>
>   PR debug/101283 - Several tests fail on Darwin with -gctf/gbtf
>
> gcc/ChangeLog:
>
>         PR debug/101283
>         * dwarf2ctf.c (ctf_get_AT_data_member_location): Multiply by 8 to get
>         number of bits.
>
> gcc/testsuite/ChangeLog:
>
>         PR debug/101283
>         * gcc.dg/debug/ctf/ctf-struct-array-2.c: Adjust the value in the 
> testcase.
> ---
>  gcc/dwarf2ctf.c                                     | 4 ++--
>  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/dwarf2ctf.c b/gcc/dwarf2ctf.c
> index 08e1252..5e8a725 100644
> --- a/gcc/dwarf2ctf.c
> +++ b/gcc/dwarf2ctf.c
> @@ -100,13 +100,13 @@ ctf_get_AT_data_member_location (dw_die_ref die)
>           gcc_assert (!descr->dw_loc_oprnd2.v.val_unsigned);
>           gcc_assert (descr->dw_loc_oprnd2.val_class
>                       == dw_val_class_unsigned_const);
> -         field_location = descr->dw_loc_oprnd1.v.val_unsigned;
> +         field_location = descr->dw_loc_oprnd1.v.val_unsigned * 8;
>         }
>        else
>         {
>           attr = get_AT (die, DW_AT_data_member_location);
>           if (attr && AT_class (attr) == dw_val_class_const)
> -           field_location = AT_int (attr);
> +           field_location = AT_int (attr) * 8;
>           else
>             field_location = (get_AT_unsigned (die,
>                                            DW_AT_data_member_location)
> diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c 
> b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c
> index 9e698fd..37094b5 100644
> --- a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c
> @@ -10,6 +10,6 @@
>  /* { dg-final { scan-assembler-times "0x12000000\[\t \]+\[^\n\]*ctt_info" 1 
> } } */
>  /* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*cta_nelems" 
> 1 } } */
>  /* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctm_offset" 1 
> } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*ctm_offset" 
> 1 } } */
> +/* { dg-final { scan-assembler-times "\[\t \]0x20\[\t \]+\[^\n\]*ctm_offset" 
> 1 } } */
>
>  static struct ranges {int from, to;} lim_regs[] = {{ 16, 7}, { 16, 6}, { 20, 
> 7},{ 20, 6}};
> --
> 1.8.3.1
>

Reply via email to