首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >func_info在eBPF验证器中是什么?

func_info在eBPF验证器中是什么?
EN

Stack Overflow用户
提问于 2021-09-15 11:57:41
回答 1查看 278关注 0票数 1

我正在开发一个XDP程序,当我试图在NIC驱动程序中挂载它时,我遇到了这个错误:

代码语言:javascript
复制
libbpf: failed to guess program type based on ELF section name '.text'
libbpf: supported section(type) names are: socket kprobe/ uprobe/ kretprobe/ uretprobe/ classifier action tracepoint/ tp/ raw_tracepoint/ raw_tp/ tp_btf/ xdp perf_event lwt_in lwt_out lwt_xmit lwt_seg6local cgroup_skb/ingress cgroup_skb/egress cgroup/skb cgroup/sock cgroup/post_bind4 cgroup/post_bind6 cgroup/dev sockops sk_skb/stream_parser sk_skb/stream_verdict sk_skb sk_msg lirc_mode2 flow_dissector cgroup/bind4 cgroup/bind6 cgroup/connect4 cgroup/connect6 cgroup/sendmsg4 cgroup/sendmsg6 cgroup/recvmsg4 cgroup/recvmsg6 cgroup/sysctl cgroup/getsockopt cgroup/setsockopt
libbpf: load bpf program failed: Invalid argument
libbpf: -- BEGIN DUMP LOG ---
libbpf: 
number of funcs in func_info doesn't match number of subprogs
processed 0 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
libbpf: -- END LOG --
libbpf: failed to load program '.text'

我搜索并发现,当eBPF验证器试图比较attr->func_info_cntenv->subprog_cnt时,出现了错误,但我不明白在验证器处理之前如何设置这两个值。我有一个XDP程序与一个部分和6个功能作为帮助,我不确定这个信息是否可以帮助,但我可以提供更多关于程序的结构,如果需要。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 14:07:04

你没有把你的节目放在一个专门的ELF部分吗?类似于:

代码语言:javascript
复制
SEC("xdp")
int my_prog(struct xdp_md *ctx)
{
        ...
}

(其中SEC()是在libbpf的bpf_helpers.h头中定义的宏。)

如果您没有指定任何ELF节名,则clang/LLVM默认为.text,如您的错误消息中所示。当尝试用libbpf加载程序时,库通常根据程序所在的ELF部分的名称猜测程序类型。如果您不使用专用的节名,并且不指定程序类型(例如,在libbpf中使用bpf_program__set_type()),那么libbpf将无法为您的程序选择相关的类型。

这可能导致您的一些程序无法加载。从上面的错误消息来看,您似乎在程序中使用函数调用(而不是将您的函数声明为static inline)。当您的主程序通过验证器时,一些部分将丢失:“函数”可能没有加载,因此验证程序抱怨从主程序(env->subprog_cnt)推断出的函数/子程序的预期数量与加载程序应用程序(attr->func_info_cnt)收集的函数数(attr->func_info_cnt)不同,并在用bpf()系统调用加载程序时传递给内核。

如果是这样的话,您可能可以通过将您的代码放在专用的ELF函数( static inline )中的来解决这个问题,如果您不需要在生成的字节码中调用函数,则可以通过将您的函数声明为

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69192685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档