On 9/22/21 7:41 PM, Andrii Nakryiko wrote: > Implement strict ELF section name handling for BPF programs. It utilizes > `libbpf_set_strict_mode()` framework and adds new flag: LIBBPF_STRICT_SEC_NAME. > > If this flag is set, libbpf will enforce exact section name matching for > a lot of program types that previously allowed just partial prefix > match. E.g., if previously SEC("xdp_whatever_i_want") was allowed, now > in strict mode only SEC("xdp") will be accepted, which makes SEC("") > definitions cleaner and more structured. SEC() now won't be used as yet > another way to uniquely encode BPF program identifier (for that > C function name is better and is guaranteed to be unique within > bpf_object). Now SEC() is strictly BPF program type and, depending on > program type, extra load/attach parameter specification. > > Libbpf completely supports multiple BPF programs in the same ELF > section, so multiple BPF programs of the same type/specification easily > co-exist together within the same bpf_object scope. > > Additionally, a new (for now internal) convention is introduced: section > name that can be a stand-alone exact BPF program type specificator, but > also could have extra parameters after '/' delimiter. An example of such > section is "struct_ops", which can be specified by itself, but also > allows to specify the intended operation to be attached to, e.g., > "struct_ops/dctcp_init". Note, that "struct_ops_some_op" is not allowed. > Such section definition is specified as "struct_ops+". > > This change is part of libbpf 1.0 effort ([0], [1]). > > [0] Closes: https://github.com/libbpf/libbpf/issues/271 > [1] https://github.com/libbpf/libbpf/wiki/Libbpf:-the-road-to-v1.0#stricter-and-more-uniform-bpf-program-section-name-sec-handling > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > --- Acked-by: Dave Marchevsky <davemarchevsky@xxxxxx>