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:
Michael Ellerman 2012-06-21 17:50:27 +00:00 committed by Benjamin Herrenschmidt
parent 9acc7bde23
commit 7784655acc
1 changed files with 2 additions and 0 deletions

View File

@ -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); \