Created
January 9, 2019 14:21
-
-
Save bjoto/e1b450e75f692d49200756e83aaf178f to your computer and use it in GitHub Desktop.
RV64G JIT example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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