From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arthur Fabre Subject: [PATCH] bpf, doc: Document Jump X addressing mode Date: Sun, 7 Oct 2018 09:45:19 +0100 Message-ID: <20181007084519.27445-1-arthur@arthurfabre.com> Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Cc: Arthur Fabre To: Alexei Starovoitov , Daniel Borkmann , "David S. Miller" , Jonathan Corbet , netdev@vger.kernel.org, linux-doc@vger.kernel.org Return-path: Received: from mx1.arthurfabre.com ([178.33.183.242]:56342 "EHLO mx1.arthurfabre.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725994AbeJGQDD (ORCPT ); Sun, 7 Oct 2018 12:03:03 -0400 Sender: netdev-owner@vger.kernel.org List-ID: bpf_asm and the other classic BPF tools support jump conditions comparing register A to register X, in addition to comparing register A with constant K. Only the latter was documented in filter.txt, add two new addressing modes that describe the former. Signed-off-by: Arthur Fabre --- Documentation/networking/filter.txt | 30 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Documentation/networking/filter.txt b/Documentation/networki= ng/filter.txt index e6b4ebb2b243..b90dad6fea6d 100644 --- a/Documentation/networking/filter.txt +++ b/Documentation/networking/filter.txt @@ -203,11 +203,11 @@ opcodes as defined in linux/filter.h stand for: =20 Instruction Addressing mode Description =20 - ld 1, 2, 3, 4, 10 Load word into A + ld 1, 2, 3, 4, 12 Load word into A ldi 4 Load word into A ldh 1, 2 Load half-word into A ldb 1, 2 Load byte into A - ldx 3, 4, 5, 10 Load word into X + ldx 3, 4, 5, 12 Load word into X ldxi 4 Load word into X ldxb 5 Load byte into X =20 @@ -216,14 +216,14 @@ opcodes as defined in linux/filter.h stand for: =20 jmp 6 Jump to label ja 6 Jump to label - jeq 7, 8 Jump on A =3D=3D k - jneq 8 Jump on A !=3D k - jne 8 Jump on A !=3D k - jlt 8 Jump on A < k - jle 8 Jump on A <=3D k - jgt 7, 8 Jump on A > k - jge 7, 8 Jump on A >=3D k - jset 7, 8 Jump on A & k + jeq 7, 8, 9, 10 Jump on A =3D=3D + jneq 9, 10 Jump on A !=3D + jne 9, 10 Jump on A !=3D + jlt 9, 10 Jump on A < + jle 9, 10 Jump on A <=3D + jgt 7, 8, 9, 10 Jump on A > + jge 7, 8, 9, 10 Jump on A >=3D + jset 7, 8, 9, 10 Jump on A & =20 add 0, 4 A + sub 0, 4 A - @@ -240,7 +240,7 @@ opcodes as defined in linux/filter.h stand for: tax Copy A into X txa Copy X into A =20 - ret 4, 9 Return + ret 4, 11 Return =20 The next table shows addressing formats from the 2nd column: =20 @@ -254,9 +254,11 @@ The next table shows addressing formats from the 2nd= column: 5 4*([k]&0xf) Lower nibble * 4 at byte offset = k in the packet 6 L Jump label L 7 #k,Lt,Lf Jump to Lt if true, otherwise ju= mp to Lf - 8 #k,Lt Jump to Lt if predicate is true - 9 a/%a Accumulator A - 10 extension BPF extension + 8 x/%x,Lt,Lf Jump to Lt if true, otherwise ju= mp to Lf + 9 #k,Lt Jump to Lt if predicate is true + 10 x/%x,Lt Jump to Lt if predicate is true + 11 a/%a Accumulator A + 12 extension BPF extension =20 The Linux kernel also has a couple of BPF extensions that are used along with the class of load instructions by "overloading" the k argument with --=20 2.19.1