Commit 0a3a831
bpf, arm64: adjust the offset of str/ldr(immediate) to positive number
The BPF STX/LDX instruction uses offset relative to the FP to address
stack space. Since the BPF_FP locates at the top of the frame, the offset
is usually a negative number. However, arm64 str/ldr immediate instruction
requires that offset be a positive number. Therefore, this patch tries to
convert the offsets.
The method is to find the negative offset furthest from the FP firstly.
Then add it to the FP, calculate a bottom position, called FPB, and then
adjust the offsets in other STR/LDX instructions relative to FPB.
FPB is saved using the callee-saved register x27 of arm64 which is not
used yet.
Before adjusting the offset, the patch checks every instruction to ensure
that the FP does not change in run-time. If the FP may change, no offset
is adjusted.
For example, for the following bpftrace command:
bpftrace -e 'kprobe:do_sys_open { printf("opening: %s\n", str(arg1)); }'
Without this patch, jited code(fragment):
0: bti c
4: stp x29, x30, [sp, #-16]!
8: mov x29, sp
c: stp x19, x20, [sp, #-16]!
10: stp x21, x22, [sp, #-16]!
14: stp x25, x26, [sp, #-16]!
18: mov x25, sp
1c: mov x26, #0x0 // #0
20: bti j
24: sub sp, sp, #0x90
28: add x19, x0, #0x0
2c: mov x0, #0x0 // #0
30: mov x10, #0xffffffffffffff78 // #-136
34: str x0, [x25, x10]
38: mov x10, #0xffffffffffffff80 // #-128
3c: str x0, [x25, x10]
40: mov x10, #0xffffffffffffff88 // #-120
44: str x0, [x25, x10]
48: mov x10, #0xffffffffffffff90 // #-112
4c: str x0, [x25, x10]
50: mov x10, #0xffffffffffffff98 // #-104
54: str x0, [x25, x10]
58: mov x10, #0xffffffffffffffa0 // #-96
5c: str x0, [x25, x10]
60: mov x10, #0xffffffffffffffa8 // #-88
64: str x0, [x25, x10]
68: mov x10, #0xffffffffffffffb0 // #-80
6c: str x0, [x25, x10]
70: mov x10, #0xffffffffffffffb8 // #-72
74: str x0, [x25, x10]
78: mov x10, #0xffffffffffffffc0 // #-64
7c: str x0, [x25, x10]
80: mov x10, #0xffffffffffffffc8 // #-56
84: str x0, [x25, x10]
88: mov x10, #0xffffffffffffffd0 // #-48
8c: str x0, [x25, x10]
90: mov x10, #0xffffffffffffffd8 // #-40
94: str x0, [x25, x10]
98: mov x10, #0xffffffffffffffe0 // #-32
9c: str x0, [x25, x10]
a0: mov x10, #0xffffffffffffffe8 // #-24
a4: str x0, [x25, x10]
a8: mov x10, #0xfffffffffffffff0 // #-16
ac: str x0, [x25, x10]
b0: mov x10, #0xfffffffffffffff8 // #-8
b4: str x0, [x25, x10]
b8: mov x10, #0x8 // #8
bc: ldr x2, [x19, x10]
[...]
With this patch, jited code(fragment):
0: bti c
4: stp x29, x30, [sp, #-16]!
8: mov x29, sp
c: stp x19, x20, [sp, #-16]!
10: stp x21, x22, [sp, #-16]!
14: stp x25, x26, [sp, #-16]!
18: stp x27, x28, [sp, #-16]!
1c: mov x25, sp
20: sub x27, x25, #0x88
24: mov x26, #0x0 // #0
28: bti j
2c: sub sp, sp, #0x90
30: add x19, x0, #0x0
34: mov x0, #0x0 // #0
38: str x0, [x27]
3c: str x0, [x27, #8]
40: str x0, [x27, #16]
44: str x0, [x27, #24]
48: str x0, [x27, #32]
4c: str x0, [x27, #40]
50: str x0, [x27, #48]
54: str x0, [x27, #56]
58: str x0, [x27, #64]
5c: str x0, [x27, #72]
60: str x0, [x27, #80]
64: str x0, [x27, #88]
68: str x0, [x27, #96]
6c: str x0, [x27, #104]
70: str x0, [x27, #112]
74: str x0, [x27, #120]
78: str x0, [x27, #128]
7c: ldr x2, [x19, #8]
[...]
Signed-off-by: Xu Kuohai <xukuohai@huawei.com>1 parent cf32aa6 commit 0a3a831
1 file changed
+128
-27
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| |||
63 | 64 | | |
64 | 65 | | |
65 | 66 | | |
| 67 | + | |
66 | 68 | | |
67 | 69 | | |
68 | 70 | | |
| |||
73 | 75 | | |
74 | 76 | | |
75 | 77 | | |
| 78 | + | |
76 | 79 | | |
77 | 80 | | |
78 | 81 | | |
| |||
218 | 221 | | |
219 | 222 | | |
220 | 223 | | |
221 | | - | |
| 224 | + | |
222 | 225 | | |
223 | 226 | | |
224 | 227 | | |
| |||
234 | 237 | | |
235 | 238 | | |
236 | 239 | | |
237 | | - | |
| 240 | + | |
238 | 241 | | |
239 | | - | |
| 242 | + | |
240 | 243 | | |
241 | 244 | | |
242 | 245 | | |
| |||
248 | 251 | | |
249 | 252 | | |
250 | 253 | | |
| 254 | + | |
251 | 255 | | |
252 | 256 | | |
253 | 257 | | |
| |||
286 | 290 | | |
287 | 291 | | |
288 | 292 | | |
| 293 | + | |
289 | 294 | | |
290 | 295 | | |
291 | 296 | | |
| 297 | + | |
292 | 298 | | |
293 | 299 | | |
294 | 300 | | |
| |||
553 | 559 | | |
554 | 560 | | |
555 | 561 | | |
| 562 | + | |
556 | 563 | | |
557 | 564 | | |
558 | 565 | | |
559 | 566 | | |
| 567 | + | |
| 568 | + | |
560 | 569 | | |
561 | 570 | | |
562 | 571 | | |
| |||
650 | 659 | | |
651 | 660 | | |
652 | 661 | | |
| 662 | + | |
| 663 | + | |
653 | 664 | | |
654 | 665 | | |
655 | 666 | | |
| |||
658 | 669 | | |
659 | 670 | | |
660 | 671 | | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
661 | 675 | | |
662 | 676 | | |
663 | 677 | | |
| |||
1012 | 1026 | | |
1013 | 1027 | | |
1014 | 1028 | | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
1015 | 1036 | | |
1016 | 1037 | | |
1017 | | - | |
1018 | | - | |
| 1038 | + | |
| 1039 | + | |
1019 | 1040 | | |
1020 | 1041 | | |
1021 | 1042 | | |
1022 | 1043 | | |
1023 | 1044 | | |
1024 | 1045 | | |
1025 | | - | |
1026 | | - | |
| 1046 | + | |
| 1047 | + | |
1027 | 1048 | | |
1028 | 1049 | | |
1029 | 1050 | | |
1030 | 1051 | | |
1031 | 1052 | | |
1032 | 1053 | | |
1033 | | - | |
1034 | | - | |
| 1054 | + | |
| 1055 | + | |
1035 | 1056 | | |
1036 | 1057 | | |
1037 | 1058 | | |
1038 | 1059 | | |
1039 | 1060 | | |
1040 | 1061 | | |
1041 | | - | |
1042 | | - | |
| 1062 | + | |
| 1063 | + | |
1043 | 1064 | | |
1044 | 1065 | | |
1045 | 1066 | | |
| |||
1070 | 1091 | | |
1071 | 1092 | | |
1072 | 1093 | | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
1073 | 1101 | | |
1074 | 1102 | | |
1075 | 1103 | | |
1076 | 1104 | | |
1077 | | - | |
1078 | | - | |
| 1105 | + | |
| 1106 | + | |
1079 | 1107 | | |
1080 | 1108 | | |
1081 | 1109 | | |
1082 | 1110 | | |
1083 | 1111 | | |
1084 | 1112 | | |
1085 | | - | |
1086 | | - | |
| 1113 | + | |
| 1114 | + | |
1087 | 1115 | | |
1088 | 1116 | | |
1089 | 1117 | | |
1090 | 1118 | | |
1091 | 1119 | | |
1092 | 1120 | | |
1093 | | - | |
1094 | | - | |
| 1121 | + | |
| 1122 | + | |
1095 | 1123 | | |
1096 | 1124 | | |
1097 | 1125 | | |
1098 | 1126 | | |
1099 | 1127 | | |
1100 | 1128 | | |
1101 | | - | |
1102 | | - | |
| 1129 | + | |
| 1130 | + | |
1103 | 1131 | | |
1104 | 1132 | | |
1105 | 1133 | | |
| |||
1113 | 1141 | | |
1114 | 1142 | | |
1115 | 1143 | | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
1116 | 1151 | | |
1117 | 1152 | | |
1118 | | - | |
1119 | | - | |
| 1153 | + | |
| 1154 | + | |
1120 | 1155 | | |
1121 | 1156 | | |
1122 | 1157 | | |
1123 | 1158 | | |
1124 | 1159 | | |
1125 | 1160 | | |
1126 | | - | |
1127 | | - | |
| 1161 | + | |
| 1162 | + | |
1128 | 1163 | | |
1129 | 1164 | | |
1130 | 1165 | | |
1131 | 1166 | | |
1132 | 1167 | | |
1133 | 1168 | | |
1134 | | - | |
1135 | | - | |
| 1169 | + | |
| 1170 | + | |
1136 | 1171 | | |
1137 | 1172 | | |
1138 | 1173 | | |
1139 | 1174 | | |
1140 | 1175 | | |
1141 | 1176 | | |
1142 | | - | |
1143 | | - | |
| 1177 | + | |
| 1178 | + | |
1144 | 1179 | | |
1145 | 1180 | | |
1146 | 1181 | | |
| |||
1167 | 1202 | | |
1168 | 1203 | | |
1169 | 1204 | | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
| 1235 | + | |
| 1236 | + | |
| 1237 | + | |
| 1238 | + | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
1170 | 1269 | | |
1171 | 1270 | | |
1172 | 1271 | | |
| |||
1288 | 1387 | | |
1289 | 1388 | | |
1290 | 1389 | | |
| 1390 | + | |
| 1391 | + | |
1291 | 1392 | | |
1292 | 1393 | | |
1293 | 1394 | | |
| |||
0 commit comments