diff options
Diffstat (limited to 'arch/arm/boot/compressed/Makefile')
-rw-r--r-- | arch/arm/boot/compressed/Makefile | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 8ebbb511c783..23aad0722303 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile | |||
@@ -74,7 +74,7 @@ ZTEXTADDR := $(CONFIG_ZBOOT_ROM_TEXT) | |||
74 | ZBSSADDR := $(CONFIG_ZBOOT_ROM_BSS) | 74 | ZBSSADDR := $(CONFIG_ZBOOT_ROM_BSS) |
75 | else | 75 | else |
76 | ZTEXTADDR := 0 | 76 | ZTEXTADDR := 0 |
77 | ZBSSADDR := ALIGN(4) | 77 | ZBSSADDR := ALIGN(8) |
78 | endif | 78 | endif |
79 | 79 | ||
80 | SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ | 80 | SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ |
@@ -98,8 +98,6 @@ endif | |||
98 | ccflags-y := -fpic -fno-builtin | 98 | ccflags-y := -fpic -fno-builtin |
99 | asflags-y := -Wa,-march=all | 99 | asflags-y := -Wa,-march=all |
100 | 100 | ||
101 | # Provide size of uncompressed kernel to the decompressor via a linker symbol. | ||
102 | LDFLAGS_vmlinux = --defsym _image_size=$(shell stat -c "%s" $(obj)/../Image) | ||
103 | # Supply ZRELADDR to the decompressor via a linker symbol. | 101 | # Supply ZRELADDR to the decompressor via a linker symbol. |
104 | ifneq ($(CONFIG_AUTO_ZRELADDR),y) | 102 | ifneq ($(CONFIG_AUTO_ZRELADDR),y) |
105 | LDFLAGS_vmlinux += --defsym zreladdr=$(ZRELADDR) | 103 | LDFLAGS_vmlinux += --defsym zreladdr=$(ZRELADDR) |
@@ -122,10 +120,23 @@ lib1funcs = $(obj)/lib1funcs.o | |||
122 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE | 120 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE |
123 | $(call cmd,shipped) | 121 | $(call cmd,shipped) |
124 | 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 | |||
125 | $(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 \ |
126 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE | 137 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE |
127 | $(call if_changed,ld) | 138 | $(call if_changed,ld) |
128 | @: | 139 | @$(check_for_bad_syms) |
129 | 140 | ||
130 | $(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE | 141 | $(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE |
131 | $(call if_changed,$(suffix_y)) | 142 | $(call if_changed,$(suffix_y)) |