* [PATCH] btf: do not skip emitting void variables [PR106773]
@ 2022-09-01 19:53 David Faust
2022-09-04 16:57 ` Indu Bhagat
0 siblings, 1 reply; 2+ messages in thread
From: David Faust @ 2022-09-01 19:53 UTC (permalink / raw)
To: gcc-patches; +Cc: indu.bhagat
The eBPF loader expects to find BTF_KIND_VAR records for references to
extern const void symbols. We were mistakenly identifing these as
unsupported types, and as a result skipping emitting VAR records for
them.
Tested on bpf-unknown-none and x86_64, no known regressions.
OK?
Thanks.
gcc/ChangeLog:
PR target/106773
* btfout.cc (btf_dvd_emit_preprocess_cb): Do not skip emitting
variables which refer to void types.
gcc/testsuite/ChangeLog:
PR target/106773
* gcc.dg/debug/btf/btf-pr106773.c: New test.
---
gcc/btfout.cc | 2 +-
gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c | 21 +++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c
diff --git a/gcc/btfout.cc b/gcc/btfout.cc
index 997a33fa089..37ec662c190 100644
--- a/gcc/btfout.cc
+++ b/gcc/btfout.cc
@@ -430,7 +430,7 @@ btf_dvd_emit_preprocess_cb (ctf_dvdef_ref *slot, ctf_container_ref arg_ctfc)
ctf_dvdef_ref var = (ctf_dvdef_ref) * slot;
/* Do not add variables which refer to unsupported types. */
- if (btf_removed_type_p (var->dvd_type))
+ if (!voids.contains (var->dvd_type) && btf_removed_type_p (var->dvd_type))
return 1;
arg_ctfc->ctfc_vars_list[num_vars_added] = var;
diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c
new file mode 100644
index 00000000000..4de15f76546
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c
@@ -0,0 +1,21 @@
+/* Test BTF generation for extern const void symbols.
+ BTF_KIND_VAR records should be emitted for such symbols if they are used. */
+
+/* { dg-do compile } */
+/* { dg-options "-O0 -gbtf -dA" } */
+
+/* Expect 1 variable record only for foo. */
+/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btv_linkage" 1 } } */
+
+/* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
+
+extern const void foo;
+extern const void bar;
+
+unsigned long func () {
+ unsigned long x = (unsigned long) &foo;
+
+ return x;
+}
+
--
2.36.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] btf: do not skip emitting void variables [PR106773]
2022-09-01 19:53 [PATCH] btf: do not skip emitting void variables [PR106773] David Faust
@ 2022-09-04 16:57 ` Indu Bhagat
0 siblings, 0 replies; 2+ messages in thread
From: Indu Bhagat @ 2022-09-04 16:57 UTC (permalink / raw)
To: David Faust, gcc-patches
On 9/1/22 12:53, David Faust wrote:
> The eBPF loader expects to find BTF_KIND_VAR records for references to
> extern const void symbols. We were mistakenly identifing these as
> unsupported types, and as a result skipping emitting VAR records for
> them.
>
> Tested on bpf-unknown-none and x86_64, no known regressions.
> OK?
Hi David,
LGTM.
Thanks,
>
> Thanks.
>
> gcc/ChangeLog:
>
> PR target/106773
> * btfout.cc (btf_dvd_emit_preprocess_cb): Do not skip emitting
> variables which refer to void types.
>
> gcc/testsuite/ChangeLog:
>
> PR target/106773
> * gcc.dg/debug/btf/btf-pr106773.c: New test.
> ---
> gcc/btfout.cc | 2 +-
> gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c | 21 +++++++++++++++++++
> 2 files changed, 22 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c
>
> diff --git a/gcc/btfout.cc b/gcc/btfout.cc
> index 997a33fa089..37ec662c190 100644
> --- a/gcc/btfout.cc
> +++ b/gcc/btfout.cc
> @@ -430,7 +430,7 @@ btf_dvd_emit_preprocess_cb (ctf_dvdef_ref *slot, ctf_container_ref arg_ctfc)
> ctf_dvdef_ref var = (ctf_dvdef_ref) * slot;
>
> /* Do not add variables which refer to unsupported types. */
> - if (btf_removed_type_p (var->dvd_type))
> + if (!voids.contains (var->dvd_type) && btf_removed_type_p (var->dvd_type))
> return 1;
>
> arg_ctfc->ctfc_vars_list[num_vars_added] = var;
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c
> new file mode 100644
> index 00000000000..4de15f76546
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c
> @@ -0,0 +1,21 @@
> +/* Test BTF generation for extern const void symbols.
> + BTF_KIND_VAR records should be emitted for such symbols if they are used. */
> +
> +/* { dg-do compile } */
> +/* { dg-options "-O0 -gbtf -dA" } */
> +
> +/* Expect 1 variable record only for foo. */
> +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 1 } } */
> +/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btv_linkage" 1 } } */
> +
> +/* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
> +
> +extern const void foo;
> +extern const void bar;
> +
> +unsigned long func () {
> + unsigned long x = (unsigned long) &foo;
> +
> + return x;
> +}
> +
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-09-04 16:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-01 19:53 [PATCH] btf: do not skip emitting void variables [PR106773] David Faust
2022-09-04 16:57 ` Indu Bhagat
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).