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.

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