diff mbox series

dwarf2ctf: the unit of sou field location is bits [PR101283]

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

Commit Message

Indu Bhagat July 6, 2021, 1:25 a.m. UTC
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.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(-)

Comments

Richard Biener July 6, 2021, 7:12 a.m. UTC | #1
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 mbox series

Patch

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}};