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: Michael Ellerman <michael@ellerman.id.au> Acked-by: Matt Evans <matt@ozlabs.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
9acc7bde23
commit
7784655acc
|
@ -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:
|
||||||
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); \
|
||||||
|
|
Loading…
Reference in New Issue