Commit 7784655a authored by Michael Ellerman's avatar Michael Ellerman Committed by Benjamin Herrenschmidt

powerpc: Fix BPF_JIT code to link with multiple TOCs

If the kernel is big enough (eg. allyesconfig), the linker may need to
switch TOCs when calling from the BPF JIT code out to the external
helpers (skb_copy_bits() & bpf_internal_load_pointer_neg_helper()).

In order to do that we need to leave space after the bl for the linker
to insert a reload of our TOC pointer.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Acked-by: default avatarMatt Evans <matt@ozlabs.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 9acc7bde
...@@ -105,6 +105,7 @@ sk_load_byte_msh_positive_offset: ...@@ -105,6 +105,7 @@ sk_load_byte_msh_positive_offset:
mr r4, r_addr; \ mr r4, r_addr; \
li r6, SIZE; \ li r6, SIZE; \
bl skb_copy_bits; \ bl skb_copy_bits; \
nop; \
/* R3 = 0 on success */ \ /* R3 = 0 on success */ \
addi r1, r1, BPF_PPC_SLOWPATH_FRAME; \ addi r1, r1, BPF_PPC_SLOWPATH_FRAME; \
ld r0, 16(r1); \ ld r0, 16(r1); \
...@@ -156,6 +157,7 @@ bpf_slow_path_byte_msh: ...@@ -156,6 +157,7 @@ bpf_slow_path_byte_msh:
mr r4, r_addr; \ mr r4, r_addr; \
li r5, SIZE; \ li r5, SIZE; \
bl bpf_internal_load_pointer_neg_helper; \ bl bpf_internal_load_pointer_neg_helper; \
nop; \
/* R3 != 0 on success */ \ /* R3 != 0 on success */ \
addi r1, r1, BPF_PPC_SLOWPATH_FRAME; \ addi r1, r1, BPF_PPC_SLOWPATH_FRAME; \
ld r0, 16(r1); \ ld r0, 16(r1); \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment