|
@@ -120,10 +120,23 @@ lib1funcs = $(obj)/lib1funcs.o
|
|
|
$(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE
|
|
|
$(call cmd,shipped)
|
|
|
|
|
|
+# We need to prevent any GOTOFF relocs being used with references
|
|
|
+# to symbols in the .bss section since we cannot relocate them
|
|
|
+# independently from the rest at run time. This can be achieved by
|
|
|
+# ensuring that no private .bss symbols exist, as global symbols
|
|
|
+# always have a GOT entry which is what we need.
|
|
|
+# The .data section is already discarded by the linker script so no need
|
|
|
+# to bother about it here.
|
|
|
+check_for_bad_syms = \
|
|
|
+bad_syms=$$($(CROSS_COMPILE)nm $@ | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && \
|
|
|
+[ -z "$$bad_syms" ] || \
|
|
|
+ ( echo "following symbols must have non local/private scope:" >&2; \
|
|
|
+ echo "$$bad_syms" >&2; rm -f $@; false )
|
|
|
+
|
|
|
$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
|
|
|
$(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
|
|
|
$(call if_changed,ld)
|
|
|
- @:
|
|
|
+ @$(check_for_bad_syms)
|
|
|
|
|
|
$(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE
|
|
|
$(call if_changed,$(suffix_y))
|