diff options
author | Nicolas Pitre <nico@fluxnic.net> | 2014-06-02 12:32:25 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-07-01 10:00:28 -0400 |
commit | 33656d565da51bd01779600352ec28385ab806c8 (patch) | |
tree | 47b1dfdc7c2716c0553d41572d3775c410c50425 | |
parent | 5c65c360da06635f985684fa0ab41027660d0804 (diff) |
ARM: 8067/1: zImage: ensure header in LE format for BE8 kernels
All known BE8-capable systems have LE bootloaders, so we need to ensure
that the magic number and image start/end values are in little endian
format.
[ben.dooks@codethink.co.uk: from nico's original email on this subject]
[taras.kondratiuk@linaro.org: removed lds.S->lds rule, added target to extra-y]
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/boot/compressed/.gitignore | 1 | ||||
-rw-r--r-- | arch/arm/boot/compressed/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/boot/compressed/head.S | 7 | ||||
-rw-r--r-- | arch/arm/boot/compressed/vmlinux.lds.in | 14 |
4 files changed, 21 insertions, 5 deletions
diff --git a/arch/arm/boot/compressed/.gitignore b/arch/arm/boot/compressed/.gitignore index 0714e0334e33..6a26e7bcb714 100644 --- a/arch/arm/boot/compressed/.gitignore +++ b/arch/arm/boot/compressed/.gitignore | |||
@@ -10,6 +10,7 @@ piggy.xzkern | |||
10 | piggy.lz4 | 10 | piggy.lz4 |
11 | vmlinux | 11 | vmlinux |
12 | vmlinux.lds | 12 | vmlinux.lds |
13 | vmlinux.lds.S | ||
13 | 14 | ||
14 | # borrowed libfdt files | 15 | # borrowed libfdt files |
15 | fdt.c | 16 | fdt.c |
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 68c918362b79..8a8090694d89 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile | |||
@@ -114,7 +114,7 @@ targets := vmlinux vmlinux.lds \ | |||
114 | # Make sure files are removed during clean | 114 | # Make sure files are removed during clean |
115 | extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 \ | 115 | extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 \ |
116 | lib1funcs.S ashldi3.S bswapsdi2.S $(libfdt) $(libfdt_hdrs) \ | 116 | lib1funcs.S ashldi3.S bswapsdi2.S $(libfdt) $(libfdt_hdrs) \ |
117 | hyp-stub.S | 117 | hyp-stub.S vmlinux.lds.S |
118 | 118 | ||
119 | ifeq ($(CONFIG_FUNCTION_TRACER),y) | 119 | ifeq ($(CONFIG_FUNCTION_TRACER),y) |
120 | ORIG_CFLAGS := $(KBUILD_CFLAGS) | 120 | ORIG_CFLAGS := $(KBUILD_CFLAGS) |
@@ -199,7 +199,7 @@ CFLAGS_font.o := -Dstatic= | |||
199 | $(obj)/font.c: $(FONTC) | 199 | $(obj)/font.c: $(FONTC) |
200 | $(call cmd,shipped) | 200 | $(call cmd,shipped) |
201 | 201 | ||
202 | $(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG) | 202 | $(obj)/vmlinux.lds.S: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG) |
203 | @sed "$(SEDFLAGS)" < $< > $@ | 203 | @sed "$(SEDFLAGS)" < $< > $@ |
204 | 204 | ||
205 | $(obj)/hyp-stub.S: $(srctree)/arch/$(SRCARCH)/kernel/hyp-stub.S | 205 | $(obj)/hyp-stub.S: $(srctree)/arch/$(SRCARCH)/kernel/hyp-stub.S |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 3a8b32df6b31..c95feab6ce7f 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -125,9 +125,10 @@ start: | |||
125 | THUMB( adr r12, BSYM(1f) ) | 125 | THUMB( adr r12, BSYM(1f) ) |
126 | THUMB( bx r12 ) | 126 | THUMB( bx r12 ) |
127 | 127 | ||
128 | .word 0x016f2818 @ Magic numbers to help the loader | 128 | .word _magic_sig @ Magic numbers to help the loader |
129 | .word start @ absolute load/run zImage address | 129 | .word _magic_start @ absolute load/run zImage address |
130 | .word _edata @ zImage end address | 130 | .word _magic_end @ zImage end address |
131 | |||
131 | THUMB( .thumb ) | 132 | THUMB( .thumb ) |
132 | 1: | 133 | 1: |
133 | ARM_BE8( setend be ) @ go BE8 if compiled for BE8 | 134 | ARM_BE8( setend be ) @ go BE8 if compiled for BE8 |
diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in index 4919f2ac8b89..60162231c7ea 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.in +++ b/arch/arm/boot/compressed/vmlinux.lds.in | |||
@@ -7,6 +7,16 @@ | |||
7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | |||
11 | #ifdef CONFIG_CPU_ENDIAN_BE8 | ||
12 | #define ZIMAGE_MAGIC(x) ( (((x) >> 24) & 0x000000ff) | \ | ||
13 | (((x) >> 8) & 0x0000ff00) | \ | ||
14 | (((x) << 8) & 0x00ff0000) | \ | ||
15 | (((x) << 24) & 0xff000000) ) | ||
16 | #else | ||
17 | #define ZIMAGE_MAGIC(x) (x) | ||
18 | #endif | ||
19 | |||
10 | OUTPUT_ARCH(arm) | 20 | OUTPUT_ARCH(arm) |
11 | ENTRY(_start) | 21 | ENTRY(_start) |
12 | SECTIONS | 22 | SECTIONS |
@@ -57,6 +67,10 @@ SECTIONS | |||
57 | .pad : { BYTE(0); . = ALIGN(8); } | 67 | .pad : { BYTE(0); . = ALIGN(8); } |
58 | _edata = .; | 68 | _edata = .; |
59 | 69 | ||
70 | _magic_sig = ZIMAGE_MAGIC(0x016f2818); | ||
71 | _magic_start = ZIMAGE_MAGIC(_start); | ||
72 | _magic_end = ZIMAGE_MAGIC(_edata); | ||
73 | |||
60 | . = BSS_START; | 74 | . = BSS_START; |
61 | __bss_start = .; | 75 | __bss_start = .; |
62 | .bss : { *(.bss) } | 76 | .bss : { *(.bss) } |