[PATCH v3 1/1] objdump, as: Add callx support for BPF CPU v1

Will Hawkins hawkinsw@obs.cr
Wed Feb 14 16:03:00 GMT 2024


Add support for (dis)assembling the callx instruction back to CPU v1.

gas/ChangeLog:

	* testsuite/gas/bpf/indcall-1-pseudoc.d: Refactor tests ...
	* testsuite/gas/bpf/indcall-1-pseudoc.s: ... to visually match ...
	* testsuite/gas/bpf/indcall-1.d: ... equivalent test in ...
	* testsuite/gas/bpf/indcall-1.s: ... clang/llvm.

include/ChangeLog:

	* opcode/bpf.h (enum bpf_insn_id): BPF_INSN_CALLR to BPF_INSN_CALLX
	* (for consistency) and add it to the v1 ISA variant.

opcodes/ChangeLog:

	* bpf-opc.c: Use BPF_INSN_CALLX instead of BPF_INSN_CALLR.

Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
---
 gas/testsuite/gas/bpf/indcall-1-pseudoc.d |  8 ++++----
 gas/testsuite/gas/bpf/indcall-1-pseudoc.s |  6 +++---
 gas/testsuite/gas/bpf/indcall-1.d         | 10 +++++-----
 gas/testsuite/gas/bpf/indcall-1.s         |  6 +++---
 include/opcode/bpf.h                      |  2 +-
 opcodes/bpf-opc.c                         |  4 ++--
 6 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/gas/testsuite/gas/bpf/indcall-1-pseudoc.d b/gas/testsuite/gas/bpf/indcall-1-pseudoc.d
index 7a95bad8e65..12f9d6a9d49 100644
--- a/gas/testsuite/gas/bpf/indcall-1-pseudoc.d
+++ b/gas/testsuite/gas/bpf/indcall-1-pseudoc.d
@@ -1,4 +1,4 @@
-#as: -EL -mdialect=pseudoc -misa-spec=xbpf
+#as: -EL -mdialect=pseudoc -misa-spec=v1
 #objdump: -M xbpf,pseudoc,dec -dr
 #source: indcall-1-pseudoc.s
 #name: BPF indirect call 1, pseudoc syntax
@@ -10,11 +10,11 @@ Disassembly of section \.text:
 0000000000000000 <main>:
    0:	b7 00 00 00 01 00 00 00 	r0=1
    8:	b7 01 00 00 01 00 00 00 	r1=1
-  10:	b7 02 00 00 02 00 00 00 	r2=2
-  18:	18 06 00 00 38 00 00 00 	r6=56 ll
+  10:	b7 03 00 00 03 00 00 00 	r3=3
+  18:	18 02 00 00 38 00 00 00 	r2=56 ll
   20:	00 00 00 00 00 00 00 00[    ]*
 			18: R_BPF_64_64	.text
-  28:	8d 06 00 00 00 00 00 00 	callx r6
+  28:	8d 02 00 00 00 00 00 00 	callx r2
   30:	95 00 00 00 00 00 00 00 	exit
 
 0000000000000038 <bar>:
diff --git a/gas/testsuite/gas/bpf/indcall-1-pseudoc.s b/gas/testsuite/gas/bpf/indcall-1-pseudoc.s
index 2042697f15b..5639e288869 100644
--- a/gas/testsuite/gas/bpf/indcall-1-pseudoc.s
+++ b/gas/testsuite/gas/bpf/indcall-1-pseudoc.s
@@ -4,9 +4,9 @@
 main:
 	r0 = 1
 	r1 = 1
-	r2 = 2
-	r6 = bar ll
-	callx r6
+	r3 = 3
+	r2 = bar ll
+	callx r2
 	exit
 bar:
 	r0 = 0
diff --git a/gas/testsuite/gas/bpf/indcall-1.d b/gas/testsuite/gas/bpf/indcall-1.d
index 51103bba2a1..1a2c36999b1 100644
--- a/gas/testsuite/gas/bpf/indcall-1.d
+++ b/gas/testsuite/gas/bpf/indcall-1.d
@@ -1,5 +1,5 @@
-#as: -EL -misa-spec=xbpf
-#objdump: -dr -M xbpf,dec
+#as: -EL -misa-spec=v1
+#objdump: -dr -M v1,dec
 #source: indcall-1.s
 #name: BPF indirect call 1, normal syntax
 
@@ -10,11 +10,11 @@ Disassembly of section \.text:
 0000000000000000 <main>:
    0:	b7 00 00 00 01 00 00 00 	mov %r0,1
    8:	b7 01 00 00 01 00 00 00 	mov %r1,1
-  10:	b7 02 00 00 02 00 00 00 	mov %r2,2
-  18:	18 06 00 00 38 00 00 00 	lddw %r6,56
+  10:	b7 03 00 00 03 00 00 00 	mov %r3,3
+  18:	18 02 00 00 38 00 00 00 	lddw %r2,56
   20:	00 00 00 00 00 00 00 00[    ]*
 			18: R_BPF_64_64	.text
-  28:	8d 06 00 00 00 00 00 00 	call %r6
+  28:	8d 02 00 00 00 00 00 00 	call %r2
   30:	95 00 00 00 00 00 00 00 	exit
 
 0000000000000038 <bar>:
diff --git a/gas/testsuite/gas/bpf/indcall-1.s b/gas/testsuite/gas/bpf/indcall-1.s
index 5d49e41040a..7fbeeeb9a38 100644
--- a/gas/testsuite/gas/bpf/indcall-1.s
+++ b/gas/testsuite/gas/bpf/indcall-1.s
@@ -4,9 +4,9 @@
 main:
     mov %r0, 1
     mov %r1, 1
-    mov %r2, 2
-    lddw %r6, bar
-    call %r6
+    mov %r3, 3
+    lddw %r2, bar
+    call %r2
     exit
 
 bar:
diff --git a/include/opcode/bpf.h b/include/opcode/bpf.h
index df1e3bd0918..97e25053175 100644
--- a/include/opcode/bpf.h
+++ b/include/opcode/bpf.h
@@ -202,7 +202,7 @@ enum bpf_insn_id
   BPF_INSN_JAR, BPF_INSN_JEQR, BPF_INSN_JGTR, BPF_INSN_JSGTR,
   BPF_INSN_JGER, BPF_INSN_JSGER, BPF_INSN_JLTR, BPF_INSN_JSLTR,
   BPF_INSN_JSLER, BPF_INSN_JLER, BPF_INSN_JSETR, BPF_INSN_JNER,
-  BPF_INSN_CALLR, BPF_INSN_CALL, BPF_INSN_EXIT,
+  BPF_INSN_CALLX, BPF_INSN_CALL, BPF_INSN_EXIT,
   /* Compare-and-jump instructions (reg OP imm.)  */
   BPF_INSN_JEQI, BPF_INSN_JGTI, BPF_INSN_JSGTI,
   BPF_INSN_JGEI, BPF_INSN_JSGEI, BPF_INSN_JLTI, BPF_INSN_JSLTI,
diff --git a/opcodes/bpf-opc.c b/opcodes/bpf-opc.c
index 19e096501a2..23473fc0cd9 100644
--- a/opcodes/bpf-opc.c
+++ b/opcodes/bpf-opc.c
@@ -272,8 +272,8 @@ const struct bpf_opcode bpf_opcodes[] =
    BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSET|BPF_SRC_X},
   {BPF_INSN_JNER, "jne%W%dr , %sr , %d16", "if%w%dr != %sr%wgoto%w%d16",
    BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JNE|BPF_SRC_X},
-  {BPF_INSN_CALLR, "call%W%dr", "callx%w%dr",
-   BPF_XBPF, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_CALL|BPF_SRC_X},
+  {BPF_INSN_CALLX, "call%W%dr", "callx%w%dr",
+   BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_CALL|BPF_SRC_X},
   {BPF_INSN_CALL, "call%W%d32", "call%w%d32",
    BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_CALL|BPF_SRC_K},
   {BPF_INSN_EXIT, "exit", "exit",
-- 
2.43.0



More information about the Binutils mailing list