Files
linux/include/linux
Alexei Starovoitov 142fd4d2dc bpf: Add x86-64 JIT support for bpf_addr_space_cast instruction.
LLVM generates bpf_addr_space_cast instruction while translating
pointers between native (zero) address space and
__attribute__((address_space(N))).
The addr_space=1 is reserved as bpf_arena address space.

rY = addr_space_cast(rX, 0, 1) is processed by the verifier and
converted to normal 32-bit move: wX = wY

rY = addr_space_cast(rX, 1, 0) has to be converted by JIT:

aux_reg = upper_32_bits of arena->user_vm_start
aux_reg <<= 32
wX = wY // clear upper 32 bits of dst register
if (wX) // if not zero add upper bits of user_vm_start
  wX |= aux_reg

JIT can do it more efficiently:

mov dst_reg32, src_reg32  // 32-bit move
shl dst_reg, 32
or dst_reg, user_vm_start
rol dst_reg, 32
xor r11, r11
test dst_reg32, dst_reg32 // check if lower 32-bit are zero
cmove r11, dst_reg	  // if so, set dst_reg to zero
			  // Intel swapped src/dst register encoding in CMOVcc

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/bpf/20240308010812.89848-5-alexei.starovoitov@gmail.com
2024-03-11 15:37:24 -07:00
..
2023-10-24 13:08:14 -07:00
2024-01-02 17:54:05 +01:00
2023-12-20 19:26:32 -05:00
2024-02-01 13:06:40 +01:00
2024-03-11 15:37:23 -07:00
2023-12-02 22:24:36 +00:00
2023-12-15 16:25:55 -08:00
2023-12-20 14:48:13 -08:00
2024-02-09 23:31:16 -05:00
2023-12-20 07:39:52 -05:00
2023-12-12 14:24:14 +01:00
2024-01-08 09:36:55 +09:00
2024-01-19 11:59:11 -08:00
2024-01-02 11:25:28 +01:00
2024-01-18 21:10:43 +01:00
2024-02-28 19:36:39 -08:00
2024-02-23 16:45:05 +01:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:30 -05:00
2023-11-28 15:48:39 +01:00
2023-11-15 22:41:27 -05:00
2024-03-01 08:44:54 +00:00
2024-01-04 10:47:56 -05:00
2023-12-20 19:26:30 -05:00
2024-01-15 12:10:41 -06:00
2024-01-15 12:10:41 -06:00
2023-11-15 10:15:40 +01:00
2024-02-17 18:45:06 +00:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:31 -05:00
2024-01-09 15:00:09 +01:00
2023-12-20 19:26:30 -05:00
2023-12-27 11:49:56 -05:00
2023-12-20 19:26:32 -05:00
2023-12-27 11:49:56 -05:00
2023-12-20 19:26:31 -05:00
2023-11-15 10:15:33 +01:00
2023-12-20 19:26:32 -05:00
2024-01-24 16:21:01 -08:00
2023-12-20 19:26:32 -05:00
2023-12-20 19:26:32 -05:00
2024-02-15 12:17:28 -05:00
2023-12-08 12:02:38 +01:00
2023-12-20 19:26:31 -05:00
2024-01-21 18:09:30 +00:00
2024-01-19 11:59:11 -08:00
2023-12-28 05:02:42 -08:00
2023-11-17 15:48:03 +01:00
2023-12-20 19:26:31 -05:00
2023-12-20 19:26:31 -05:00
2023-12-08 12:02:37 +01:00
2023-12-20 19:26:30 -05:00
2023-12-29 11:58:24 -08:00
2024-02-09 12:07:48 +00:00