On Tue, Feb 13, 2024 at 9:51 AM Dave Thaler <dthaler1968=40googlemail.com@xxxxxxxxxxxxxx> wrote: > > * Add a "callx" conformance group > * Add callx rows to table > * Update helper function to section to be agnostic between BPF_K vs > BPF_X > * Rename "legacy" conformance group to "packet" > > Based on mailing list discussion at > https://mailarchive.ietf.org/arch/msg/bpf/l5tNEgL-Wo7qSEuaGssOl5VChKk/ > > v1->v2: Incorporated feedback from Will Hawkins > > v2->v3: Use "dst" not "imm" field > > Signed-off-by: Dave Thaler <dthaler1968@xxxxxxxxx> > --- > .../bpf/standardization/instruction-set.rst | 31 ++++++++++++------- > 1 file changed, 20 insertions(+), 11 deletions(-) > > diff --git a/Documentation/bpf/standardization/instruction-set.rst b/Documentation/bpf/standardization/instruction-set.rst > index bdfe0cd0e..4bba656b6 100644 > --- a/Documentation/bpf/standardization/instruction-set.rst > +++ b/Documentation/bpf/standardization/instruction-set.rst > @@ -127,7 +127,7 @@ This document defines the following conformance groups: > * divmul32: includes 32-bit division, multiplication, and modulo instructions. > * divmul64: includes divmul32, plus 64-bit division, multiplication, > and modulo instructions. > -* legacy: deprecated packet access instructions. > +* packet: deprecated packet access instructions. > > Instruction encoding > ==================== > @@ -404,9 +404,12 @@ BPF_JSET 0x4 any PC += offset if dst & src > BPF_JNE 0x5 any PC += offset if dst != src > BPF_JSGT 0x6 any PC += offset if dst > src signed > BPF_JSGE 0x7 any PC += offset if dst >= src signed > -BPF_CALL 0x8 0x0 call helper function by address BPF_JMP | BPF_K only, see `Helper functions`_ > +BPF_CALL 0x8 0x0 call_by_address(imm) BPF_JMP | BPF_K only > +BPF_CALL 0x8 0x0 call_by_address(dst) BPF_JMP | BPF_X only > BPF_CALL 0x8 0x1 call PC += imm BPF_JMP | BPF_K only, see `Program-local functions`_ > -BPF_CALL 0x8 0x2 call helper function by BTF ID BPF_JMP | BPF_K only, see `Helper functions`_ > +BPF_CALL 0x8 0x1 call PC += dst BPF_JMP | BPF_X only, see `Program-local functions`_ > +BPF_CALL 0x8 0x2 call_by_btfid(imm) BPF_JMP | BPF_K only > +BPF_CALL 0x8 0x2 call_by_btfid(dst) BPF_JMP | BPF_X only Sorry, but this takes it too far. This is way too early to define exactly what callx will do. Especially with all the flavors. gcc/llvm generate callx when it's an indirect call. PC += dst and other combinations don't match to what real CPU would do. let's reserve callx BPF_CALL|BPF_X with any src_reg and imm as reserved without defining what it does. pw-bot: cr