add BPF disassembler, so tools like llvm-objdump can be used:
$ llvm-objdump -d -no-show-raw-insn ./sockex1_kern.o
./sockex1_kern.o: file format ELF64-BPF
Disassembly of section socket1:
bpf_prog1:
0: r6 = r1
8: r0 = *(u8 *)skb[23]
10: *(u32 *)(r10 - 4) = r0
18: r1 = *(u32 *)(r6 + 4)
20: if r1 != 4 goto 8
28: r2 = r10
30: r2 += -4
ld_imm64 (the only 16-byte insn) and special ld_abs/ld_ind instructions
had to be treated in a special way. The decoders for the rest of the insns
are automatically generated.
Add tests to cover new functionality.
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
llvm-svn: 287477
20 lines
485 B
LLVM
20 lines
485 B
LLVM
; RUN: llc -march=bpfel -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
|
|
|
|
; CHECK-LABEL: test_load_add_32
|
|
; CHECK: c3 21
|
|
; CHECK: lock *(u32 *)(r1 + 0) += r2
|
|
define void @test_load_add_32(i32* %p, i32 zeroext %v) {
|
|
entry:
|
|
atomicrmw add i32* %p, i32 %v seq_cst
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: test_load_add_64
|
|
; CHECK: db 21
|
|
; CHECK: lock *(u64 *)(r1 + 0) += r2
|
|
define void @test_load_add_64(i64* %p, i64 zeroext %v) {
|
|
entry:
|
|
atomicrmw add i64* %p, i64 %v seq_cst
|
|
ret void
|
|
}
|