On Wed, Apr 24, 2024 at 8:48 AM Alan Maguire <alan.maguire@xxxxxxxxxx> wrote: > > Forward declaration of BTF_KIND_ENUM64 is added by supporting BTF_FWD_ENUM64 > as an enumerated value for btf_fwd_kind; an ENUM64 forward is an 8-byte > signed enum64 with no values. > > Signed-off-by: Alan Maguire <alan.maguire@xxxxxxxxxx> > --- > tools/lib/bpf/btf.c | 7 ++++++- > tools/lib/bpf/btf.h | 1 + > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c > index 2d0840ef599a..44afae098369 100644 > --- a/tools/lib/bpf/btf.c > +++ b/tools/lib/bpf/btf.c > @@ -2418,7 +2418,7 @@ int btf__add_enum64_value(struct btf *btf, const char *name, __u64 value) > * Append new BTF_KIND_FWD type with: > * - *name*, non-empty/non-NULL name; > * - *fwd_kind*, kind of forward declaration, one of BTF_FWD_STRUCT, > - * BTF_FWD_UNION, or BTF_FWD_ENUM; > + * BTF_FWD_UNION, BTF_FWD_ENUM or BTF_FWD_ENUM64; > * Returns: > * - >0, type ID of newly added BTF type; > * - <0, on error. > @@ -2446,6 +2446,11 @@ int btf__add_fwd(struct btf *btf, const char *name, enum btf_fwd_kind fwd_kind) > * values; we also assume a standard 4-byte size for it > */ > return btf__add_enum(btf, name, sizeof(int)); > + case BTF_FWD_ENUM64: > + /* enum64 forward is similarly just an enum64 with no enum > + * values; assume 8 byte size, signed. > + */ > + return btf__add_enum64(btf, name, sizeof(__u64), true); > default: > return libbpf_err(-EINVAL); > } > diff --git a/tools/lib/bpf/btf.h b/tools/lib/bpf/btf.h > index 8e6880d91c84..47d3e00b25c7 100644 > --- a/tools/lib/bpf/btf.h > +++ b/tools/lib/bpf/btf.h > @@ -194,6 +194,7 @@ enum btf_fwd_kind { > BTF_FWD_STRUCT = 0, > BTF_FWD_UNION = 1, > BTF_FWD_ENUM = 2, > + BTF_FWD_ENUM64 = 3, one can argue that having BTF_FWD_ENUM64 isn't necessary if we allow to use BTF_KIND_ENUM and BTF_KIND_ENUM64 interchangeably (when resolving such fwd declarations). "Original" enum can record size 8, so you can have enum64 forwarding with just BTF_KIND_ENUM vlen=0 size=8? Would that be sufficient? > }; > > LIBBPF_API int btf__add_fwd(struct btf *btf, const char *name, enum btf_fwd_kind fwd_kind); > -- > 2.31.1 >