]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
dwarf2ctf: the unit of sou field location is bits [PR101283]
authorIndu Bhagat <indu.bhagat@oracle.com>
Tue, 6 Jul 2021 20:53:58 +0000 (13:53 -0700)
committerIndu Bhagat <indu.bhagat@oracle.com>
Tue, 6 Jul 2021 21:07:39 +0000 (14:07 -0700)
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-06  Indu Bhagat  <indu.bhagat@oracle.com>

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
gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c

index 08e12520daaf8e38c51db63f62afa535619c28bf..5e8a72585830b00466b53ba1c0386a584db74347 100644 (file)
@@ -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)
index 9e698fde89ee4cb8062f970e0fb393c1726411a1..37094b5d4202006db16c9dfb5e5caaa30439d0c8 100644 (file)
@@ -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}};