Skip to content

Conversation

@puranjaymohan
Copy link
Contributor

No description provided.

Add support for the instructions array map type in the arm64 JIT by
calling bpf_prog_update_insn_ptrs() with the offsets that map
xlated_offset to the jited_offset in the final image. arm64 JIT already
has this offset array which was being used for
bpf_prog_fill_jited_linfo() and can be used directly for
bpf_prog_update_insn_ptrs.

Signed-off-by: Puranjay Mohan <[email protected]>
Add support for a new instruction

	BPF_JMP|BPF_X|BPF_JA, SRC=0, DST=Rx, off=0, imm=0

which does an indirect jump to a location stored in Rx.  The register
Rx should have type PTR_TO_INSN. This new type assures that the Rx
register contains a value (or a range of values) loaded from a
correct jump table – map of type instruction array.

ARM64 JIT supports indirect jumps to all registers through the A64_BR()
macro, use it to implement this new instruction.

Signed-off-by: Puranjay Mohan <[email protected]>
.jumptables sections generated by LLVM store byte offsets from the start
of the section to the jump's target instruction. On arm64 builds of
LLVM, it generates a rel section to add the section address to each
entry in the jump table, therefore storing the absolute address of the
jump target into the table. For BPF usage of .jumptables, we only care
about the instruction offsets and calculate the final address much later
after the JIT has finished, and called bpf_prog_update_insn_ptrs()

Without the change in this commit, compilation fails with:

libbpf: relocation against STT_SECTION in non-exec section is not
supported!  Error: failed to link
'tools/testing/selftests/bpf/cpuv4/bpf_gotox.bpf.o': Invalid argument (22)

This is due to the presence of a relocation section for .jumptables
(non-exec) against syscall (STT_SECTION):

Relocation section '.rel.jumptables' at offset 0x5b50 contains 263 entries:
  Offset        Info             Type         Symbol's Value  Symbol's Name
000000000000  0000000300000002 R_BPF_64_ABS64  0000000000000000 syscall
000000000008  0000000300000002 R_BPF_64_ABS64  0000000000000000 syscall
[...]

Signed-off-by: Puranjay Mohan <[email protected]>
arm64 JIT now supports gotox instruction and jumptables, so run tests in
verifier_gotox.c for arm64.

Signed-off-by: Puranjay Mohan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant