Skip to content

Instantly share code, notes, and snippets.

@bjoto
Created January 9, 2019 14:21
Show Gist options
  • Save bjoto/e1b450e75f692d49200756e83aaf178f to your computer and use it in GitHub Desktop.
Save bjoto/e1b450e75f692d49200756e83aaf178f to your computer and use it in GitHub Desktop.
RV64G JIT example
So, e.g., this program ebpf program is jited to (scroll down)
test_pkt_access.o: file format ELF64-BPF
Disassembly of section test1:
process:
0: b7 00 00 00 02 00 00 00 r0 = 2
1: 61 12 50 00 00 00 00 00 r2 = *(u32 *)(r1 + 80)
2: 61 11 4c 00 00 00 00 00 r1 = *(u32 *)(r1 + 76)
3: bf 13 00 00 00 00 00 00 r3 = r1
4: 07 03 00 00 0e 00 00 00 r3 += 14
5: 2d 23 23 00 00 00 00 00 if r3 > r2 goto +35 <LBB0_12>
6: 71 14 0c 00 00 00 00 00 r4 = *(u8 *)(r1 + 12)
7: 71 13 0d 00 00 00 00 00 r3 = *(u8 *)(r1 + 13)
8: 67 03 00 00 08 00 00 00 r3 <<= 8
9: 4f 43 00 00 00 00 00 00 r3 |= r4
10: 15 03 0d 00 86 dd 00 00 if r3 == 56710 goto +13 <LBB0_5>
11: 55 03 1b 00 08 00 00 00 if r3 != 8 goto +27 <LBB0_11>
12: bf 13 00 00 00 00 00 00 r3 = r1
13: 07 03 00 00 22 00 00 00 r3 += 34
14: 2d 23 1a 00 00 00 00 00 if r3 > r2 goto +26 <LBB0_12>
15: 71 14 0e 00 00 00 00 00 r4 = *(u8 *)(r1 + 14)
16: 67 04 00 00 02 00 00 00 r4 <<= 2
17: 57 04 00 00 3c 00 00 00 r4 &= 60
18: bf 13 00 00 00 00 00 00 r3 = r1
19: 07 03 00 00 0e 00 00 00 r3 += 14
20: 0f 43 00 00 00 00 00 00 r3 += r4
21: 07 01 00 00 17 00 00 00 r1 += 23
22: 15 03 10 00 00 00 00 00 if r3 == 0 goto +16 <LBB0_11>
23: 05 00 05 00 00 00 00 00 goto +5 <LBB0_7>
LBB0_5:
24: bf 13 00 00 00 00 00 00 r3 = r1
25: 07 03 00 00 36 00 00 00 r3 += 54
26: 2d 23 0e 00 00 00 00 00 if r3 > r2 goto +14 <LBB0_12>
27: 07 01 00 00 14 00 00 00 r1 += 20
28: 15 03 0a 00 00 00 00 00 if r3 == 0 goto +10 <LBB0_11>
LBB0_7:
29: bf 34 00 00 00 00 00 00 r4 = r3
30: 07 04 00 00 14 00 00 00 r4 += 20
31: 2d 24 09 00 00 00 00 00 if r4 > r2 goto +9 <LBB0_12>
32: 71 11 00 00 00 00 00 00 r1 = *(u8 *)(r1 + 0)
33: 55 01 07 00 06 00 00 00 if r1 != 6 goto +7 <LBB0_12>
34: 07 03 00 00 12 00 00 00 r3 += 18
35: 2d 23 05 00 00 00 00 00 if r3 > r2 goto +5 <LBB0_12>
36: b7 00 00 00 00 00 00 00 r0 = 0
37: 69 31 00 00 00 00 00 00 r1 = *(u16 *)(r3 + 0)
38: 15 01 02 00 7b 00 00 00 if r1 == 123 goto +2 <LBB0_12>
LBB0_11:
39: 18 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 r0 = 4294967295 ll
LBB0_12:
41: 95 00 00 00 00 00 00 00 exit
to:
[ 54.200000] flen=42 proglen=216 pass=2 image=(____ptrval____) from=test_progs pid=106
[ 54.200000] JIT code: 00000000: 13 01 01 ff 23 34 81 00 13 04 01 01 93 07 20 00
[ 54.204000] JIT code: 00000010: 83 35 05 05 03 35 05 0c 13 06 05 00 13 06 e6 00
[ 54.204000] JIT code: 00000020: 63 e8 c5 0a 83 06 c5 00 03 06 d5 00 13 16 86 00
[ 54.204000] JIT code: 00000030: 33 66 d6 00 37 e3 00 00 13 03 63 d8 63 00 66 04
[ 54.204000] JIT code: 00000040: 13 03 80 00 63 10 66 08 13 06 05 00 13 06 26 02
[ 54.204000] JIT code: 00000050: 63 e0 c5 08 83 06 e5 00 93 96 26 00 93 f6 c6 03
[ 54.204000] JIT code: 00000060: 13 06 05 00 13 06 e6 00 33 06 d6 00 13 05 75 01
[ 54.204000] JIT code: 00000070: 13 03 00 00 63 08 66 04 6f 00 c0 01 13 06 05 00
[ 54.204000] JIT code: 00000080: 13 06 66 03 63 e6 c5 04 13 05 45 01 13 03 00 00
[ 54.204000] JIT code: 00000090: 63 0a 66 02 93 06 06 00 93 86 46 01 63 ea d5 02
[ 54.204000] JIT code: 000000a0: 03 05 05 00 13 03 60 00 63 14 65 02 13 06 26 01
[ 54.204000] JIT code: 000000b0: 63 e0 c5 02 93 07 00 00 03 15 06 00 13 03 b0 07
[ 54.204000] JIT code: 000000c0: 63 08 65 00 93 07 10 00 93 97 07 02 93 87 f7 ff
[ 54.204000] JIT code: 000000d0: 03 34 81 00 67 80 00 00
0000000000000000 <.text>:
0: ff010113 addi sp,sp,-16 ; prologue
4: 00813423 sd s0,8(sp)
8: 01010413 addi s0,sp,16
c: 00200793 addi a5,zero,2 ; r0 = 2
10: 05053583 ld a1,80(a0) ; r2 = *(u32 *)(r1 + 80)
14: 0c053503 ld a0,192(a0) ; r1 = *(u32 *)(r1 + 76)
18: 00050613 addi a2,a0,0 ; r3 = r1
1c: 00e60613 addi a2,a2,14 ; r3 += 14
20: 0ac5e863 bltu a1,a2,0xd0 ; if r3 > r2 goto +35 <LBB0_12>
24: 00c50683 lb a3,12(a0) ; r4 = *(u8 *)(r1 + 12)
28: 00d50603 lb a2,13(a0) ; r3 = *(u8 *)(r1 + 13)
2c: 00861613 slli a2,a2,0x8 ; r3 <<= 8
30: 00d66633 or a2,a2,a3 ; r3 |= r4
34: 0000e337 lui t1,0xe ;if r3 == 56710 goto +13 <LBB0_5>
38: d8630313 addi t1,t1,-634 # 0xdd86
3c: 04660063 beq a2,t1,0x7c
40: 00800313 addi t1,zero,8 ; if r3 != 8 goto +27 <LBB0_11>
44: 08661063 bne a2,t1,0xc4
48: 00050613 addi a2,a0,0 ; r3 = r1
4c: 02260613 addi a2,a2,34 ; r3 += 34
50: 08c5e063 bltu a1,a2,0xd0 ; if r3 > r2 goto +26 <LBB0_12>
54: 00e50683 lb a3,14(a0) ; r4 = *(u8 *)(r1 + 14)
58: 00269693 slli a3,a3,0x2 ; r4 <<= 2
5c: 03c6f693 andi a3,a3,60 ; r4 &= 60
60: 00050613 addi a2,a0,0 ; r3 = r1
64: 00e60613 addi a2,a2,14 ; r3 += 14
68: 00d60633 add a2,a2,a3 ; r3 += r4
6c: 01750513 addi a0,a0,23 ; r1 += 23
70: 00000313 addi t1,zero,0 ; if r3 == 0 goto +16 <LBB0_11>
74: 04660863 beq a2,t1,0xc4
78: 01c0006f jal zero,0x94 ; goto +5 <LBB0_7>
7c: 00050613 addi a2,a0,0 ; r3 = r1
80: 03660613 addi a2,a2,54 ; r3 += 54
84: 04c5e663 bltu a1,a2,0xd0 ; if r3 > r2 goto +14 <LBB0_12>
88: 01450513 addi a0,a0,20 ; r1 += 20
8c: 00000313 addi t1,zero,0 ; if r3 == 0 goto +10 <LBB0_11>
90: 02660a63 beq a2,t1,0xc4
94: 00060693 addi a3,a2,0 ; r4 = r3
98: 01468693 addi a3,a3,20 ; r4 += 20
9c: 02d5ea63 bltu a1,a3,0xd0 ; if r4 > r2 goto +9 <LBB0_12>
a0: 00050503 lb a0,0(a0) ; r1 = *(u8 *)(r1 + 0)
a4: 00600313 addi t1,zero,6 ; if r1 != 6 goto +7 <LBB0_12>
a8: 02651463 bne a0,t1,0xd0
ac: 01260613 addi a2,a2,18 ; r3 += 18
b0: 02c5e063 bltu a1,a2,0xd0 ; if r3 > r2 goto +5 <LBB0_12>
b4: 00000793 addi a5,zero,0 ; r0 = 0
b8: 00061503 lh a0,0(a2) ; r1 = *(u16 *)(r3 + 0)
bc: 07b00313 addi t1,zero,123 ; if r1 == 123 goto +2 <LBB0_12>
c0: 00650863 beq a0,t1,0xd0
c4: 00100793 addi a5,zero,1 ; r0 = 4294967295 ll
c8: 02079793 slli a5,a5,0x20
cc: fff78793 addi a5,a5,-1
d0: 00813403 ld s0,8(sp) ; epilogue
d4: 00008067 jalr zero,0(ra)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment