Message ID | 1625534754-13995-1-git-send-email-indu.bhagat@oracle.com |
---|---|
State | New |
Headers | show |
Series | dwarf2ctf: the unit of sou field location is bits [PR101283] | expand |
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.bhagat@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 >
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}};