ARM: 8067/1: zImage: ensure header in LE format for BE8 kernels
authorNicolas Pitre <nico@fluxnic.net>
Mon, 2 Jun 2014 16:32:25 +0000 (17:32 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 1 Jul 2014 14:00:28 +0000 (15:00 +0100)
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>
arch/arm/boot/compressed/.gitignore
arch/arm/boot/compressed/Makefile
arch/arm/boot/compressed/head.S
arch/arm/boot/compressed/vmlinux.lds.in

index 0714e0334e33c9790b221d03859574b2f4e774ad..6a26e7bcb714d18ce51ae80e94fb59b3bbb98b75 100644 (file)
@@ -10,6 +10,7 @@ piggy.xzkern
 piggy.lz4
 vmlinux
 vmlinux.lds
+vmlinux.lds.S
 
 # borrowed libfdt files
 fdt.c
index 68c918362b79a7dba1baf799697019be2fb70912..8a8090694d89ccc529fe1b7214cf0c1c6f809db8 100644 (file)
@@ -114,7 +114,7 @@ targets       := vmlinux vmlinux.lds \
 # Make sure files are removed during clean
 extra-y       += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 \
                 lib1funcs.S ashldi3.S bswapsdi2.S $(libfdt) $(libfdt_hdrs) \
-                hyp-stub.S
+                hyp-stub.S vmlinux.lds.S
 
 ifeq ($(CONFIG_FUNCTION_TRACER),y)
 ORIG_CFLAGS := $(KBUILD_CFLAGS)
@@ -199,7 +199,7 @@ CFLAGS_font.o := -Dstatic=
 $(obj)/font.c: $(FONTC)
        $(call cmd,shipped)
 
-$(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG)
+$(obj)/vmlinux.lds.S: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG)
        @sed "$(SEDFLAGS)" < $< > $@
 
 $(obj)/hyp-stub.S: $(srctree)/arch/$(SRCARCH)/kernel/hyp-stub.S
index 3a8b32df6b31e0eafc8f31ffa83eab07559f6d72..c95feab6ce7f0bacb9bbe165dc01b68ee46da285 100644 (file)
@@ -125,9 +125,10 @@ start:
  THUMB(                adr     r12, BSYM(1f)   )
  THUMB(                bx      r12             )
 
-               .word   0x016f2818              @ Magic numbers to help the loader
-               .word   start                   @ absolute load/run zImage address
-               .word   _edata                  @ zImage end address
+               .word   _magic_sig      @ Magic numbers to help the loader
+               .word   _magic_start    @ absolute load/run zImage address
+               .word   _magic_end      @ zImage end address
+
  THUMB(                .thumb                  )
 1:
  ARM_BE8(      setend  be )                    @ go BE8 if compiled for BE8
index 4919f2ac8b89709a6cd3929603b1f3fc401293c5..60162231c7eafe5c61e9dad2469b3d366ebe9b54 100644 (file)
@@ -7,6 +7,16 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  */
+
+#ifdef CONFIG_CPU_ENDIAN_BE8
+#define ZIMAGE_MAGIC(x) ( (((x) >> 24) & 0x000000ff) | \
+                         (((x) >>  8) & 0x0000ff00) | \
+                         (((x) <<  8) & 0x00ff0000) | \
+                         (((x) << 24) & 0xff000000) )
+#else
+#define ZIMAGE_MAGIC(x) (x)
+#endif
+
 OUTPUT_ARCH(arm)
 ENTRY(_start)
 SECTIONS
@@ -57,6 +67,10 @@ SECTIONS
   .pad                 : { BYTE(0); . = ALIGN(8); }
   _edata = .;
 
+  _magic_sig = ZIMAGE_MAGIC(0x016f2818);
+  _magic_start = ZIMAGE_MAGIC(_start);
+  _magic_end = ZIMAGE_MAGIC(_edata);
+
   . = BSS_START;
   __bss_start = .;
   .bss                 : { *(.bss) }