On Tue, Mar 26, 2024 at 02:28:52PM +0000, Cupertino Miranda wrote:
> GCC was defining bts_offset entry to always contain 0.
> When comparing with clang, the same entry is instead a label to the
> respective variable or function. The assembler emits relocations for
> those labels.
> 
> gcc/ChangeLog:
>       PR target/114431
>       * btfout.cc (get_name_for_datasec_entry): Add function.
>       (btf_asm_datasec_entry): Print label when possible.
> 
> gcc/testsuite/ChangeLog:
>       gcc.dg/debug/btf/btf-datasec-1.c: Correct for new
>       implementation.
>       gcc.dg/debug/btf/btf-datasec-2.c: Likewise
>       gcc.dg/debug/btf/btf-pr106773.c: Likewise

For next time, missing dot after Likewise

> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c
> @@ -19,8 +19,10 @@
>  /* { dg-final { scan-assembler-times "0xf000003\[\t \]+\[^\n\]*btt_info" 2 } 
> } */
>  /* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } 
> } */
>  
> -/* The offset entry for each variable in a DATSEC should be 0 at compile 
> time.  */
> -/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 7 } } */
> +/* The offset entry for each variable in a DATSEC should contain a label.  */
> +/* { dg-final { scan-assembler-times ".4byte\[\t \]\[a-e\]\[\t 
> \]+\[^\n\]*bts_offset" 5 } } */

Where has this been tested?
4byte is used only on some targets, what exact assembler directive is used
for 4byte unaligned data is heavily target dependent.
git grep define.*TARGET_ASM_UNALIGNED_SI_OP
gcc/config/alpha/alpha.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.align 
0\n\t.long\t"
gcc/config/avr/avr.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t"
gcc/config/cris/cris.cc:#define TARGET_ASM_UNALIGNED_SI_OP 
TARGET_ASM_ALIGNED_SI_OP
gcc/config/csky/csky.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t"
gcc/config/i386/i386.cc:#define TARGET_ASM_UNALIGNED_SI_OP 
TARGET_ASM_ALIGNED_SI_OP
gcc/config/ia64/ia64.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\tdata4.ua\t"
gcc/config/m68k/m68k.cc:#define TARGET_ASM_UNALIGNED_SI_OP 
TARGET_ASM_ALIGNED_SI_OP
gcc/config/mcore/mcore.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t"
gcc/config/pa/pa.cc:#define TARGET_ASM_UNALIGNED_SI_OP TARGET_ASM_ALIGNED_SI_OP
gcc/config/rs6000/rs6000.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.vbyte\t4,"
gcc/config/rs6000/rs6000.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t"
gcc/config/sh/sh.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.ualong\t"
gcc/config/sparc/sparc.cc:#define TARGET_ASM_UNALIGNED_SI_OP "\t.uaword\t"
gcc/target-def.h:#define TARGET_ASM_UNALIGNED_SI_OP "\t.4byte\t"
gcc/target-def.h:#define TARGET_ASM_UNALIGNED_SI_OP NULL
Now
git grep 'define[[:blank:]]*TARGET_ASM_ALIGNED_SI_OP' | grep 
'/\(cris\|i386\|m68k\|pa\)/'
gcc/config/cris/cris.cc:#define TARGET_ASM_ALIGNED_SI_OP "\t.dword\t"
gcc/config/i386/i386.cc:#define TARGET_ASM_ALIGNED_SI_OP ASM_LONG
gcc/config/m68k/m68k.cc:#define TARGET_ASM_ALIGNED_SI_OP "\tlong\t"
gcc/config/m68k/m68k.cc:#define TARGET_ASM_ALIGNED_SI_OP "\tdc.l\t"
gcc/config/pa/pa.cc:#define TARGET_ASM_ALIGNED_SI_OP "\t.word\t"
git grep 'define[[:blank:]]*ASM_LONG'
gcc/config/i386/att.h:#define ASM_LONG "\t.long\t"
gcc/config/i386/bsd.h:#define ASM_LONG "\t.long\t"
gcc/config/i386/darwin.h:#define ASM_LONG "\t.long\t"

So, if you want to handle it for all arches, instead of .4byte\[\t \] you'd 
need to
use
(?:(?:.4byte|.long|data4.ua|.ualong|.uaword|.dword|long|dc.l|.word)\[\t 
\]|.vbyte\t4,\[\t \]?)
or so.

BTW,
/* { dg-options "-O0 -gbtf -dA" } */
/* { dg-options "-O0 -gbtf -dA -msdata=none" { target { { powerpc*-*-* } && 
ilp32 } } } */
/* { dg-options "-O0 -gbtf -dA -msmall-data-limit=0" { target { riscv*-*-* } } 
} */
/* { dg-options "-O0 -gbtf -dA -G0" { target { nios2-*-* } } } */
would be perhaps right for test written 2 decades ago, but for a test
written 3 years ago is something that shouldn't have passed patch review.
This should be done with
/* { dg-options "-O0 -gbtf -dA" } */
/* { dg-additional-options "-msdata=none" { target { { powerpc*-*-* } && ilp32 
} } } */
/* { dg-additional-options "-msmall-data-limit=0" { target { riscv*-*-* } } } */
/* { dg-additional-options "-G0" { target { nios2-*-* } } } */

btf-cvr-quals-1.c test suffers from that too.

        Jakub

Reply via email to