bpf: add support for jal/gotol jump instruction with 32-bit target
authorJose E. Marchesi <jose.marchesi@oracle.com>
Sun, 23 Jul 2023 23:15:08 +0000 (01:15 +0200)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Sun, 23 Jul 2023 23:20:03 +0000 (01:20 +0200)
commitc2ca88d74ba3618c4aac6744e923c279ca4cb7f1
treecdd500a8a997bd1a8f908176d8f5fe4143d0542d
parent338b21b0881e16bb7116e4eb5bc41817f805ec23
bpf: add support for jal/gotol jump instruction with 32-bit target

This patch adds support for the V4 BPF instruction jal/gotol, which is
like ja/goto but it supports a signed 32-bit PC-relative (in number of
64-bit words minus one) target operand instead of the 16-bit signed
operand of the other instruction.  This greatly increases the jump
range in BPF programs.

Tested in bpf-unkown-none.

bfd/ChangeLog:

2023-07-24  Jose E. Marchesi  <jose.marchesi@oracle.com>

* reloc.c: New reloc BFD_RELOC_BPF_DISPCALL32.
* elf64-bpf.c (bpf_reloc_type_lookup): Handle the new reloc.
* libbfd.h (bfd_reloc_code_real_names): Regenerate.

gas/ChangeLog:

2023-07-24  Jose E. Marchesi  <jose.marchesi@oracle.com>

* config/tc-bpf.c (struct bpf_insn): New field `id'.
(md_assemble): Save the ids of successfully parsed instructions
and use the new BFD_RELOC_BPF_DISPCALL32 whenever appropriate.
(md_apply_fix): Adapt to the new BFD reloc.
* testsuite/gas/bpf/jump.s: Test JAL.
* testsuite/gas/bpf/jump.d: Likewise.
* testsuite/gas/bpf/jump-pseudoc.d: Likewise.
* testsuite/gas/bpf/jump-be.d: Likewise.
* testsuite/gas/bpf/jump-be-pseudoc.d: Likewise.
* doc/c-bpf.texi (BPF Instructions): Document new instruction
jal/gotol.
Document new operand type disp32.

include/ChangeLog:

2023-07-24  Jose E. Marchesi  <jose.marchesi@oracle.com>

* opcode/bpf.h (enum bpf_insn_id): Add entry BPF_INSN_JAL.
(enum bpf_insn_id): Remove spurious entry BPF_INSN_CALLI.

opcodes/ChangeLog:

2023-07-23  Jose E. Marchesi  <jose.marchesi@oracle.com>

* bpf-opc.c (bpf_opcodes): Add entry for jal.
18 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf64-bpf.c
bfd/libbfd.h
bfd/reloc.c
gas/ChangeLog
gas/config/tc-bpf.c
gas/doc/c-bpf.texi
gas/testsuite/gas/bpf/jump-be-pseudoc.d
gas/testsuite/gas/bpf/jump-be.d
gas/testsuite/gas/bpf/jump-pseudoc.d
gas/testsuite/gas/bpf/jump-pseudoc.s
gas/testsuite/gas/bpf/jump.d
gas/testsuite/gas/bpf/jump.s
include/ChangeLog
include/opcode/bpf.h
opcodes/ChangeLog
opcodes/bpf-opc.c