diff options
-rw-r--r-- | arch/arm/boot/compressed/Makefile | 15 | ||||
-rw-r--r-- | arch/arm/boot/compressed/head.S | 6 |
2 files changed, 17 insertions, 4 deletions
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 79b5c62746df..23aad0722303 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile | |||
@@ -120,10 +120,23 @@ lib1funcs = $(obj)/lib1funcs.o | |||
120 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE | 120 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE |
121 | $(call cmd,shipped) | 121 | $(call cmd,shipped) |
122 | 122 | ||
123 | # We need to prevent any GOTOFF relocs being used with references | ||
124 | # to symbols in the .bss section since we cannot relocate them | ||
125 | # independently from the rest at run time. This can be achieved by | ||
126 | # ensuring that no private .bss symbols exist, as global symbols | ||
127 | # always have a GOT entry which is what we need. | ||
128 | # The .data section is already discarded by the linker script so no need | ||
129 | # to bother about it here. | ||
130 | check_for_bad_syms = \ | ||
131 | bad_syms=$$($(CROSS_COMPILE)nm $@ | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && \ | ||
132 | [ -z "$$bad_syms" ] || \ | ||
133 | ( echo "following symbols must have non local/private scope:" >&2; \ | ||
134 | echo "$$bad_syms" >&2; rm -f $@; false ) | ||
135 | |||
123 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ | 136 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ |
124 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE | 137 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE |
125 | $(call if_changed,ld) | 138 | $(call if_changed,ld) |
126 | @: | 139 | @$(check_for_bad_syms) |
127 | 140 | ||
128 | $(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE | 141 | $(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE |
129 | $(call if_changed,$(suffix_y)) | 142 | $(call if_changed,$(suffix_y)) |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index b541217bd040..8d5d91aefbb9 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -372,7 +372,7 @@ LC0: .word LC0 @ r1 | |||
372 | .word input_data_end - 4 @ r10 (inflated size location) | 372 | .word input_data_end - 4 @ r10 (inflated size location) |
373 | .word _got_start @ r11 | 373 | .word _got_start @ r11 |
374 | .word _got_end @ ip | 374 | .word _got_end @ ip |
375 | .word user_stack_end @ sp | 375 | .word .L_user_stack_end @ sp |
376 | .size LC0, . - LC0 | 376 | .size LC0, . - LC0 |
377 | 377 | ||
378 | #ifdef CONFIG_ARCH_RPC | 378 | #ifdef CONFIG_ARCH_RPC |
@@ -1100,5 +1100,5 @@ reloc_code_end: | |||
1100 | 1100 | ||
1101 | .align | 1101 | .align |
1102 | .section ".stack", "aw", %nobits | 1102 | .section ".stack", "aw", %nobits |
1103 | user_stack: .space 4096 | 1103 | .L_user_stack: .space 4096 |
1104 | user_stack_end: | 1104 | .L_user_stack_end: |