]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
bpf: correct neg and neg32 instruction encoding
authorDavid Faust <david.faust@oracle.com>
Mon, 21 Aug 2023 16:07:11 +0000 (09:07 -0700)
committerDavid Faust <david.faust@oracle.com>
Mon, 21 Aug 2023 17:07:25 +0000 (10:07 -0700)
commit41aa80c5440ff24fc931fa2a3e681213dc1dbdec
treeeeda5e5d2a14d7f6927af428599c89d089a259d8
parent11e3488d3f787d51196a115fd9c6085e57bd9626
bpf: correct neg and neg32 instruction encoding

The neg/neg32 BPF instructions always use BPF_SRC_K (=0) in their header
source bit, despite operating on registers.  If BPF_SRC_X (=1) is set,
the instructions are rejected by the kernel.

Because of this there are also no neg/neg32 instructions which operate
on immediates, so remove them.

bd434cc4d94ec3d2f9fc1e7c00c27b074f962bc1 was a similar fix in the old
CGEN-based port, but was not carried forward in the new port.

include/
* opcode/bpf.h (enum bpf_insn_id): Remove spurious entries
BPF_INSN_NEGI and BPF_INSN_NEG32I.

opcodes/
* bpf-opc.c (bpf_opcodes): Remove erroneous NEGI and NEG32I
instructions.

gas/
* doc/c-bpf.texi (BPF Instructions): Remove erroneous neg and
neg32 instructions operating on immediates.
* testsuite/gas/bpf/alu.s: Adapt accordingly.
* testsuite/gas/bpf/alu.d: Likewise.
* testsuite/gas/bpf/alu-be.d: Likewise
* testsuite/gas/bpf/alu32.s: Likewise.
* testsuite/gas/bpf/alu32.d: Likewise.
* testsuite/gas/bpf/alu32-be.d: Likewise.
* testsuite/gas/bpf/alu-pseudoc.s: Likewise.
* testsuite/gas/bpf/alu-pseudoc.d: Likewise.
* testsuite/gas/bpf/alu-be-pseudoc.d: Likewise.
* testsuite/gas/bpf/alu32-pseudoc.s: Likewise.
* testsuite/gas/bpf/alu32-pseudoc.d: Likewise.
* testsuite/gas/bpf/alu32-be-pseudoc.d: Likewise.
15 files changed:
gas/doc/c-bpf.texi
gas/testsuite/gas/bpf/alu-be-pseudoc.d
gas/testsuite/gas/bpf/alu-be.d
gas/testsuite/gas/bpf/alu-pseudoc.d
gas/testsuite/gas/bpf/alu-pseudoc.s
gas/testsuite/gas/bpf/alu.d
gas/testsuite/gas/bpf/alu.s
gas/testsuite/gas/bpf/alu32-be-pseudoc.d
gas/testsuite/gas/bpf/alu32-be.d
gas/testsuite/gas/bpf/alu32-pseudoc.d
gas/testsuite/gas/bpf/alu32-pseudoc.s
gas/testsuite/gas/bpf/alu32.d
gas/testsuite/gas/bpf/alu32.s
include/opcode/bpf.h
opcodes/bpf-opc.c