On Wed, Aug 9, 2023 at 4:44 AM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > Add support to libbpf to append exception callbacks when loading a > program. The exception callback is found by discovering the declaration > tag 'exception_callback:<value>' and finding the callback in the value > of the tag. ... > + /* After adding all programs, now pair them with their exception > + * callbacks if specified. > + */ > + if (!kernel_supports(obj, FEAT_BTF_DECL_TAG)) > + goto out; > +out: The above looks odd. Accidental leftover? > return 0; > } > > @@ -3137,6 +3148,80 @@ static int bpf_object__sanitize_and_load_btf(struct bpf_object *obj) > } > } > > + if (!kernel_supports(obj, FEAT_BTF_DECL_TAG)) > + goto skip_exception_cb; > + for (i = 0; i < obj->nr_programs; i++) { > + struct bpf_program *prog = &obj->programs[i]; > + int j, k, n; > + > + if (prog_is_subprog(obj, prog)) > + continue; > + n = btf__type_cnt(obj->btf); > + for (j = 1; j < n; j++) { > + const char *str = "exception_callback:", *name; On the first read of this patch and corresponding kernel support I started doubting my earlier suggestion to use decl_tag and reconsidered going back to fake bpf_register_except_cb() call, but after sleeping on it I think it is a useful extension for both kernel and libbpf to support such tagging. We might specify ctors and dtors with decl_tag in the future and other various callbacks that are never explicitly referenced in bpf_call, ld_imm64 or other bpf insns. So having libbpf and kernel support such tagging will help in the long run. It's not going to be limited to exceptions. Despite the extra complexity this is a good step forward. > +static int > +bpf_object__append_subprog_code(struct bpf_object *obj, struct bpf_program *main_prog, > + struct bpf_program *subprog) > +{ Please split this refactoring into a separate patch for ease of review.