diff options
author | Cupertino Miranda <cupertino.miranda@oracle.com> | 2024-01-03 11:37:34 +0000 |
---|---|---|
committer | Cupertino Miranda <cupertino.miranda@oracle.com> | 2024-01-08 18:35:25 +0000 |
commit | dfc88fb51c1f9c26215adf6a308c18e23992cdd9 (patch) | |
tree | b2e806abde6b9bdfc7b5fe7533b203fa5654bd5b /gcc/btfout.cc | |
parent | 4a5bb8bc1c562ba4d6e97f1979de6b8ac566f04f (diff) | |
download | gcc-dfc88fb51c1f9c26215adf6a308c18e23992cdd9.zip gcc-dfc88fb51c1f9c26215adf6a308c18e23992cdd9.tar.gz gcc-dfc88fb51c1f9c26215adf6a308c18e23992cdd9.tar.bz2 |
bpf: Correct BTF for kernel_helper attributed decls
This patch fix a problem with kernel_helper attribute BTF information,
which incorrectly generates BTF_KIND_FUNC entry.
This BTF entry although accurate with traditional extern function
declarations, once the function is attributed with kernel_helper, it is
semantically incompatible of the kernel helpers in BPF infrastructure.
gcc/ChangeLog:
PR target/113225
* btfout.cc (btf_collect_datasec): Skip creating BTF info for
extern and kernel_helper attributed function decls.
gcc/testsuite/ChangeLog:
* gcc.target/bpf/attr-kernel-helper.c: New test.
Diffstat (limited to 'gcc/btfout.cc')
-rw-r--r-- | gcc/btfout.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/btfout.cc b/gcc/btfout.cc index 669d357d..dcf751f 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -35,6 +35,8 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic-core.h" #include "cgraph.h" #include "varasm.h" +#include "stringpool.h" /* For lookup_attribute. */ +#include "attribs.h" /* For lookup_attribute. */ #include "dwarf2out.h" /* For lookup_decl_die. */ static int btf_label_num; @@ -440,6 +442,11 @@ btf_collect_datasec (ctf_container_ref ctfc) if (dtd == NULL) continue; + if (DECL_EXTERNAL (func->decl) + && (lookup_attribute ("kernel_helper", + DECL_ATTRIBUTES (func->decl))) != NULL_TREE) + continue; + /* Functions actually get two types: a BTF_KIND_FUNC_PROTO, and also a BTF_KIND_FUNC. But the CTF container only allocates one type per function, which matches closely with BTF_KIND_FUNC_PROTO. |