* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels @ 2014-04-10 16:27 Taras Kondratiuk 2014-04-10 17:03 ` Nicolas Pitre ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: Taras Kondratiuk @ 2014-04-10 16:27 UTC (permalink / raw) To: linux-arm-kernel From: Nico Pitre <nico@fluxnic.net> 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 at codethink.co.uk: from nico's original email on this subject] Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> [taras.kondratiuk at linaro.org: removed lds.S->lds rule, added target to extra-y] Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org> --- Nico, should I add your Signed-off-by? Discussion about the patch: http://www.spinics.net/lists/arm-kernel/msg320670.html Based on v3.14+ master commit 39de65aa2c3eee901db020a4f1396998e09602a3 arch/arm/boot/compressed/.gitignore | 1 + arch/arm/boot/compressed/Makefile | 4 ++-- arch/arm/boot/compressed/head.S | 7 ++++--- 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 0714e03..6a26e7b 100644 --- a/arch/arm/boot/compressed/.gitignore +++ b/arch/arm/boot/compressed/.gitignore @@ -10,6 +10,7 @@ piggy.xzkern piggy.lz4 vmlinux vmlinux.lds +vmlinux.lds.S # borrowed libfdt files fdt.c diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 68c9183..8a80906 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -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 diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 066b034..8ea1773 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -130,9 +130,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 diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in index 4919f2a..6016223 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.in +++ b/arch/arm/boot/compressed/vmlinux.lds.in @@ -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) } -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-04-10 16:27 [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels Taras Kondratiuk @ 2014-04-10 17:03 ` Nicolas Pitre 2014-06-17 14:29 ` Russell King - ARM Linux 2014-06-18 17:55 ` Kevin Hilman 2 siblings, 0 replies; 14+ messages in thread From: Nicolas Pitre @ 2014-04-10 17:03 UTC (permalink / raw) To: linux-arm-kernel On Thu, 10 Apr 2014, Taras Kondratiuk wrote: > From: Nico Pitre <nico@fluxnic.net> Please use "Nicolas Pitre" as my full name. > 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 at codethink.co.uk: from nico's original email on this subject] > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> > [taras.kondratiuk at linaro.org: removed lds.S->lds rule, added target to extra-y] > Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org> > --- > Nico, should I add your Signed-off-by? Sure. > > Discussion about the patch: > http://www.spinics.net/lists/arm-kernel/msg320670.html > > Based on v3.14+ master commit 39de65aa2c3eee901db020a4f1396998e09602a3 > > arch/arm/boot/compressed/.gitignore | 1 + > arch/arm/boot/compressed/Makefile | 4 ++-- > arch/arm/boot/compressed/head.S | 7 ++++--- > 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 0714e03..6a26e7b 100644 > --- a/arch/arm/boot/compressed/.gitignore > +++ b/arch/arm/boot/compressed/.gitignore > @@ -10,6 +10,7 @@ piggy.xzkern > piggy.lz4 > vmlinux > vmlinux.lds > +vmlinux.lds.S > > # borrowed libfdt files > fdt.c > diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile > index 68c9183..8a80906 100644 > --- a/arch/arm/boot/compressed/Makefile > +++ b/arch/arm/boot/compressed/Makefile > @@ -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 > diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S > index 066b034..8ea1773 100644 > --- a/arch/arm/boot/compressed/head.S > +++ b/arch/arm/boot/compressed/head.S > @@ -130,9 +130,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 > diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in > index 4919f2a..6016223 100644 > --- a/arch/arm/boot/compressed/vmlinux.lds.in > +++ b/arch/arm/boot/compressed/vmlinux.lds.in > @@ -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) } > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-04-10 16:27 [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels Taras Kondratiuk 2014-04-10 17:03 ` Nicolas Pitre @ 2014-06-17 14:29 ` Russell King - ARM Linux 2014-06-17 16:07 ` Nicolas Pitre 2014-06-18 17:55 ` Kevin Hilman 2 siblings, 1 reply; 14+ messages in thread From: Russell King - ARM Linux @ 2014-06-17 14:29 UTC (permalink / raw) To: linux-arm-kernel On Thu, Apr 10, 2014 at 07:27:12PM +0300, Taras Kondratiuk wrote: > diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile > index 68c9183..8a80906 100644 > --- a/arch/arm/boot/compressed/Makefile > +++ b/arch/arm/boot/compressed/Makefile > @@ -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)" < $< > $@ Given that we're now passing the linker script through GCC for C preprocessing, it seems to me that we don't need to do the sed trick anymore - we can pass TEXTADDR and ZBSSADDR into GCC via definitions instead, so I've committed this patch after this one. No changes to the vmlinux.lds.* file, it's just a pure rename. Ack? From: Russell King <rmk+kernel@arm.linux.org.uk> Subject: [PATCH] ARM: Simplify generation of compressed vmlinux.lds file As we are now using the C preprocessor, we do not need to use sed to edit constants in this file, and then pass the resulting file through the C preprocessor. Instead, rely solely on the C preprocessor to rewrite TEXT_START and BSS_ADDR. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> --- arch/arm/boot/compressed/.gitignore | 1 - arch/arm/boot/compressed/Makefile | 5 +- arch/arm/boot/compressed/vmlinux.lds.S | 90 +++++++++++++++++++++++++++++++++ arch/arm/boot/compressed/vmlinux.lds.in | 90 --------------------------------- 4 files changed, 91 insertions(+), 95 deletions(-) create mode 100644 arch/arm/boot/compressed/vmlinux.lds.S delete mode 100644 arch/arm/boot/compressed/vmlinux.lds.in diff --git a/arch/arm/boot/compressed/.gitignore b/arch/arm/boot/compressed/.gitignore index 6a26e7bcb714..0714e0334e33 100644 --- a/arch/arm/boot/compressed/.gitignore +++ b/arch/arm/boot/compressed/.gitignore @@ -10,7 +10,6 @@ piggy.xzkern piggy.lz4 vmlinux vmlinux.lds -vmlinux.lds.S # borrowed libfdt files fdt.c diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 8a8090694d89..46055d5e9414 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -81,7 +81,7 @@ ZTEXTADDR := 0 ZBSSADDR := ALIGN(8) endif -SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ +CPPFLAGS_vmlinux.lds := -DTEXT_START="$(ZTEXTADDR)" -DBSS_START="$(ZBSSADDR)" suffix_$(CONFIG_KERNEL_GZIP) = gzip suffix_$(CONFIG_KERNEL_LZO) = lzo @@ -199,8 +199,5 @@ CFLAGS_font.o := -Dstatic= $(obj)/font.c: $(FONTC) $(call cmd,shipped) -$(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 $(call cmd,shipped) diff --git a/arch/arm/boot/compressed/vmlinux.lds.S b/arch/arm/boot/compressed/vmlinux.lds.S new file mode 100644 index 000000000000..60162231c7ea --- /dev/null +++ b/arch/arm/boot/compressed/vmlinux.lds.S @@ -0,0 +1,90 @@ +/* + * linux/arch/arm/boot/compressed/vmlinux.lds.in + * + * Copyright (C) 2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * 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 +{ + /DISCARD/ : { + *(.ARM.exidx*) + *(.ARM.extab*) + /* + * Discard any r/w data - this produces a link error if we have any, + * which is required for PIC decompression. Local data generates + * GOTOFF relocations, which prevents it being relocated independently + * of the text/got segments. + */ + *(.data) + } + + . = TEXT_START; + _text = .; + + .text : { + _start = .; + *(.start) + *(.text) + *(.text.*) + *(.fixup) + *(.gnu.warning) + *(.glue_7t) + *(.glue_7) + } + .rodata : { + *(.rodata) + *(.rodata.*) + } + .piggydata : { + *(.piggydata) + } + + . = ALIGN(4); + _etext = .; + + .got.plt : { *(.got.plt) } + _got_start = .; + .got : { *(.got) } + _got_end = .; + + /* ensure the zImage file size is always a multiple of 64 bits */ + /* (without a dummy byte, ld just ignores the empty section) */ + .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) } + _end = .; + + . = ALIGN(8); /* the stack must be 64-bit aligned */ + .stack : { *(.stack) } + + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } +} + diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in deleted file mode 100644 index 60162231c7ea..000000000000 --- a/arch/arm/boot/compressed/vmlinux.lds.in +++ /dev/null @@ -1,90 +0,0 @@ -/* - * linux/arch/arm/boot/compressed/vmlinux.lds.in - * - * Copyright (C) 2000 Russell King - * - * This program is free software; you can redistribute it and/or modify - * 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 -{ - /DISCARD/ : { - *(.ARM.exidx*) - *(.ARM.extab*) - /* - * Discard any r/w data - this produces a link error if we have any, - * which is required for PIC decompression. Local data generates - * GOTOFF relocations, which prevents it being relocated independently - * of the text/got segments. - */ - *(.data) - } - - . = TEXT_START; - _text = .; - - .text : { - _start = .; - *(.start) - *(.text) - *(.text.*) - *(.fixup) - *(.gnu.warning) - *(.glue_7t) - *(.glue_7) - } - .rodata : { - *(.rodata) - *(.rodata.*) - } - .piggydata : { - *(.piggydata) - } - - . = ALIGN(4); - _etext = .; - - .got.plt : { *(.got.plt) } - _got_start = .; - .got : { *(.got) } - _got_end = .; - - /* ensure the zImage file size is always a multiple of 64 bits */ - /* (without a dummy byte, ld just ignores the empty section) */ - .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) } - _end = .; - - . = ALIGN(8); /* the stack must be 64-bit aligned */ - .stack : { *(.stack) } - - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } -} - -- 1.8.3.1 -- FTTC broadband for 0.8mile line: now@9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it. ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-17 14:29 ` Russell King - ARM Linux @ 2014-06-17 16:07 ` Nicolas Pitre 0 siblings, 0 replies; 14+ messages in thread From: Nicolas Pitre @ 2014-06-17 16:07 UTC (permalink / raw) To: linux-arm-kernel On Tue, 17 Jun 2014, Russell King - ARM Linux wrote: > Given that we're now passing the linker script through GCC for C > preprocessing, it seems to me that we don't need to do the sed trick > anymore - we can pass TEXTADDR and ZBSSADDR into GCC via definitions > instead, so I've committed this patch after this one. No changes to > the vmlinux.lds.* file, it's just a pure rename. Ack? > > From: Russell King <rmk+kernel@arm.linux.org.uk> > Subject: [PATCH] ARM: Simplify generation of compressed vmlinux.lds file > > As we are now using the C preprocessor, we do not need to use sed to > edit constants in this file, and then pass the resulting file through > the C preprocessor. Instead, rely solely on the C preprocessor to > rewrite TEXT_START and BSS_ADDR. > > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> > --- > arch/arm/boot/compressed/.gitignore | 1 - > arch/arm/boot/compressed/Makefile | 5 +- > arch/arm/boot/compressed/vmlinux.lds.S | 90 +++++++++++++++++++++++++++++++++ > arch/arm/boot/compressed/vmlinux.lds.in | 90 --------------------------------- Would be easier to review with git diff -M. > diff --git a/arch/arm/boot/compressed/vmlinux.lds.S b/arch/arm/boot/compressed/vmlinux.lds.S > new file mode 100644 > index 000000000000..60162231c7ea [...] > diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in > deleted file mode 100644 > index 60162231c7ea..000000000000 OK, the SHA1 is the same so both files are identical. > --- a/arch/arm/boot/compressed/vmlinux.lds.in > +++ /dev/null > @@ -1,90 +0,0 @@ > -/* > - * linux/arch/arm/boot/compressed/vmlinux.lds.in You might want to update this comment though. Other than that... Acked-by: Nicolas Pitre <nico@linaro.org> Nicolas ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-04-10 16:27 [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels Taras Kondratiuk 2014-04-10 17:03 ` Nicolas Pitre 2014-06-17 14:29 ` Russell King - ARM Linux @ 2014-06-18 17:55 ` Kevin Hilman 2014-06-18 18:14 ` Stephen Boyd 2 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2014-06-18 17:55 UTC (permalink / raw) To: linux-arm-kernel On Thu, Apr 10, 2014 at 9:27 AM, Taras Kondratiuk <taras.kondratiuk@linaro.org> wrote: > From: Nico Pitre <nico@fluxnic.net> > > 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 at codethink.co.uk: from nico's original email on this subject] > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> > [taras.kondratiuk at linaro.org: removed lds.S->lds rule, added target to extra-y] > Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org> This patch has now hit -next (as of next-20140618) and I noticed all my big-endian boot tests failed[1]. Turns out they failed because I'm deciding whether to pass a big-endian or little-endian initramfs based on the magic number of the zImage. Since it's now always little endian, even the big-endian kernels were boot tested with a little endian initramfs. And guess what.... they failed. I like this patch for several reasons, including the fact that u-boot's bootz support checks the magic number and failed before this patch. All of that to say, with this patch applied, I need a new (and reliable) way to determine the endianness of a kernel just by looking at the zImage. Recommendations welcome. Thanks, Kevin [1] http://lists.linaro.org/pipermail/kernel-build-reports/2014-June/004059.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-18 17:55 ` Kevin Hilman @ 2014-06-18 18:14 ` Stephen Boyd 2014-06-18 18:21 ` Kevin Hilman 0 siblings, 1 reply; 14+ messages in thread From: Stephen Boyd @ 2014-06-18 18:14 UTC (permalink / raw) To: linux-arm-kernel On 06/18/14 10:55, Kevin Hilman wrote: > > All of that to say, with this patch applied, I need a new (and > reliable) way to determine the endianness of a kernel just by looking > at the zImage. Recommendations welcome. Assuming that you have the .config configured to be built into the kernel you could use extract-ikconfig $ ./scripts/extract-ikconfig zImage | grep CONFIG_CPU_ENDIAN_BE8 -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-18 18:14 ` Stephen Boyd @ 2014-06-18 18:21 ` Kevin Hilman 2014-06-18 18:22 ` Stephen Boyd 0 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2014-06-18 18:21 UTC (permalink / raw) To: linux-arm-kernel On Wed, Jun 18, 2014 at 11:14 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: > On 06/18/14 10:55, Kevin Hilman wrote: >> >> All of that to say, with this patch applied, I need a new (and >> reliable) way to determine the endianness of a kernel just by looking >> at the zImage. Recommendations welcome. > > Assuming that you have the .config configured to be built into the > kernel you could use extract-ikconfig > > $ ./scripts/extract-ikconfig zImage | grep CONFIG_CPU_ENDIAN_BE8 Unfortunately, I can't rely on having that built in since I want the boot tools to be as generic as possible. Kevin ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-18 18:21 ` Kevin Hilman @ 2014-06-18 18:22 ` Stephen Boyd 2014-06-18 19:01 ` Kevin Hilman 0 siblings, 1 reply; 14+ messages in thread From: Stephen Boyd @ 2014-06-18 18:22 UTC (permalink / raw) To: linux-arm-kernel On 06/18/14 11:21, Kevin Hilman wrote: > On Wed, Jun 18, 2014 at 11:14 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: >> On 06/18/14 10:55, Kevin Hilman wrote: >>> All of that to say, with this patch applied, I need a new (and >>> reliable) way to determine the endianness of a kernel just by looking >>> at the zImage. Recommendations welcome. >> Assuming that you have the .config configured to be built into the >> kernel you could use extract-ikconfig >> >> $ ./scripts/extract-ikconfig zImage | grep CONFIG_CPU_ENDIAN_BE8 > Unfortunately, I can't rely on having that built in since I want the > boot tools to be as generic as possible. > > Yeah ok. Perhaps you can look for the 'setend be' instruction right after the magic values instead. -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-18 18:22 ` Stephen Boyd @ 2014-06-18 19:01 ` Kevin Hilman 2014-06-18 21:35 ` Nicolas Pitre 0 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2014-06-18 19:01 UTC (permalink / raw) To: linux-arm-kernel On Wed, Jun 18, 2014 at 11:22 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: > On 06/18/14 11:21, Kevin Hilman wrote: >> On Wed, Jun 18, 2014 at 11:14 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: >>> On 06/18/14 10:55, Kevin Hilman wrote: >>>> All of that to say, with this patch applied, I need a new (and >>>> reliable) way to determine the endianness of a kernel just by looking >>>> at the zImage. Recommendations welcome. >>> Assuming that you have the .config configured to be built into the >>> kernel you could use extract-ikconfig >>> >>> $ ./scripts/extract-ikconfig zImage | grep CONFIG_CPU_ENDIAN_BE8 >> Unfortunately, I can't rely on having that built in since I want the >> boot tools to be as generic as possible. >> >> > > Yeah ok. Perhaps you can look for the 'setend be' instruction right > after the magic values instead. Yeah, that works, as long as I can always assume that instruction will be at the same offset (currently at 0x30). Kevin ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-18 19:01 ` Kevin Hilman @ 2014-06-18 21:35 ` Nicolas Pitre 2014-06-19 18:27 ` Kevin Hilman 0 siblings, 1 reply; 14+ messages in thread From: Nicolas Pitre @ 2014-06-18 21:35 UTC (permalink / raw) To: linux-arm-kernel On Wed, 18 Jun 2014, Kevin Hilman wrote: > On Wed, Jun 18, 2014 at 11:22 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: > > On 06/18/14 11:21, Kevin Hilman wrote: > >> On Wed, Jun 18, 2014 at 11:14 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: > >>> On 06/18/14 10:55, Kevin Hilman wrote: > >>>> All of that to say, with this patch applied, I need a new (and > >>>> reliable) way to determine the endianness of a kernel just by looking > >>>> at the zImage. Recommendations welcome. > >>> Assuming that you have the .config configured to be built into the > >>> kernel you could use extract-ikconfig > >>> > >>> $ ./scripts/extract-ikconfig zImage | grep CONFIG_CPU_ENDIAN_BE8 > >> Unfortunately, I can't rely on having that built in since I want the > >> boot tools to be as generic as possible. > >> > >> > > > > Yeah ok. Perhaps you can look for the 'setend be' instruction right > > after the magic values instead. > > Yeah, that works, as long as I can always assume that instruction will > be at the same offset (currently at 0x30). Well... then you also have to test for the Thumb2 variant. And that forces this instruction to always be there. If we're to "officialize" this, I'd much prefer we add another magic value like this: diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index c95feab6ce..413fd94b53 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -128,6 +128,7 @@ start: .word _magic_sig @ Magic numbers to help the loader .word _magic_start @ absolute load/run zImage address .word _magic_end @ zImage end address + .word 0x04030201 @ endianness flag THUMB( .thumb ) 1: > > Kevin > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-18 21:35 ` Nicolas Pitre @ 2014-06-19 18:27 ` Kevin Hilman 2014-06-19 20:32 ` Nicolas Pitre 0 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2014-06-19 18:27 UTC (permalink / raw) To: linux-arm-kernel Nicolas Pitre <nicolas.pitre@linaro.org> writes: > On Wed, 18 Jun 2014, Kevin Hilman wrote: > >> On Wed, Jun 18, 2014 at 11:22 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: >> > On 06/18/14 11:21, Kevin Hilman wrote: >> >> On Wed, Jun 18, 2014 at 11:14 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: >> >>> On 06/18/14 10:55, Kevin Hilman wrote: >> >>>> All of that to say, with this patch applied, I need a new (and >> >>>> reliable) way to determine the endianness of a kernel just by looking >> >>>> at the zImage. Recommendations welcome. >> >>> Assuming that you have the .config configured to be built into the >> >>> kernel you could use extract-ikconfig >> >>> >> >>> $ ./scripts/extract-ikconfig zImage | grep CONFIG_CPU_ENDIAN_BE8 >> >> Unfortunately, I can't rely on having that built in since I want the >> >> boot tools to be as generic as possible. >> >> >> >> >> > >> > Yeah ok. Perhaps you can look for the 'setend be' instruction right >> > after the magic values instead. >> >> Yeah, that works, as long as I can always assume that instruction will >> be at the same offset (currently at 0x30). > > Well... then you also have to test for the Thumb2 variant. Ah, right. > And that forces this instruction to always be there. > > If we're to "officialize" this, I'd much prefer we add another magic > value like this: > > diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S > index c95feab6ce..413fd94b53 100644 > --- a/arch/arm/boot/compressed/head.S > +++ b/arch/arm/boot/compressed/head.S > @@ -128,6 +128,7 @@ start: > .word _magic_sig @ Magic numbers to help the loader > .word _magic_start @ absolute load/run zImage address > .word _magic_end @ zImage end address > + .word 0x04030201 @ endianness flag > > THUMB( .thumb ) > 1: I think this should probably be officialized since we've taken away the ability for magic-number checking tools (like 'file') to distinguish between big- and little-endian zImages. For now, I've updated my tools to check for 'setend be' in ARM and Thumb2 mode, but if this does get officialized, I'll gladly move over to it. Kevin ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-19 18:27 ` Kevin Hilman @ 2014-06-19 20:32 ` Nicolas Pitre 2014-06-19 20:57 ` Kevin Hilman 0 siblings, 1 reply; 14+ messages in thread From: Nicolas Pitre @ 2014-06-19 20:32 UTC (permalink / raw) To: linux-arm-kernel On Thu, 19 Jun 2014, Kevin Hilman wrote: > I think this should probably be officialized since we've taken away the > ability for magic-number checking tools (like 'file') to distinguish > between big- and little-endian zImages. > > For now, I've updated my tools to check for 'setend be' in ARM and > Thumb2 mode, but if this does get officialized, I'll gladly move over to > it. Would you ACK this patch? ----- >8 ARM: zImage: identify kernel endianness With patch #8067/1 applied, it is no longer possible to determine the endianness of a compiled kernel image. This normally shouldn't matter to the boot environment, except for those cases where the selection of a ramdisk or root filesystem with a matching endianness has to be automated. Let's add a flag to the zImage header indicating the actual endianness. Four bytes from offset 0x30 can be interpreted as follows: 04 03 02 01 big endian kernel 01 02 03 04 little endian kernel Anything else should be interpreted as "unknown", in which case it is most likely that patch #8067/1 was not applied either and the zImage magic number at offset 0x24 could be used instead to determine endianness. No zImage before this patch ever produced 0x01020304 nor 0x04030201 at offset 0x30 so there is no confusion possible. Signed-off-by: Nicolas Pitre <nico@linaro.org> diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index c95feab6ce..413fd94b53 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -128,6 +128,7 @@ start: .word _magic_sig @ Magic numbers to help the loader .word _magic_start @ absolute load/run zImage address .word _magic_end @ zImage end address + .word 0x04030201 @ endianness flag THUMB( .thumb ) 1: ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-19 20:32 ` Nicolas Pitre @ 2014-06-19 20:57 ` Kevin Hilman 2014-06-19 21:49 ` Nicolas Pitre 0 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2014-06-19 20:57 UTC (permalink / raw) To: linux-arm-kernel Nicolas Pitre <nicolas.pitre@linaro.org> writes: > On Thu, 19 Jun 2014, Kevin Hilman wrote: > >> I think this should probably be officialized since we've taken away the >> ability for magic-number checking tools (like 'file') to distinguish >> between big- and little-endian zImages. >> >> For now, I've updated my tools to check for 'setend be' in ARM and >> Thumb2 mode, but if this does get officialized, I'll gladly move over to >> it. > > Would you ACK this patch? > > ----- >8 > ARM: zImage: identify kernel endianness > > With patch #8067/1 applied, it is no longer possible to determine the minor nit: I'd rather see a commit id (commit subject) instead of the reference in RMK's patch tracker, but other than that... > endianness of a compiled kernel image. This normally shouldn't matter > to the boot environment, except for those cases where the selection of > a ramdisk or root filesystem with a matching endianness has to be > automated. > > Let's add a flag to the zImage header indicating the actual endianness. > Four bytes from offset 0x30 can be interpreted as follows: > > 04 03 02 01 big endian kernel > > 01 02 03 04 little endian kernel > > Anything else should be interpreted as "unknown", in which case it is > most likely that patch #8067/1 was not applied either and the zImage > magic number at offset 0x24 could be used instead to determine > endianness. No zImage before this patch ever produced 0x01020304 nor > 0x04030201 at offset 0x30 so there is no confusion possible. > > Signed-off-by: Nicolas Pitre <nico@linaro.org> Acked-by: Kevin Hilman <khilman@linaro.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels 2014-06-19 20:57 ` Kevin Hilman @ 2014-06-19 21:49 ` Nicolas Pitre 0 siblings, 0 replies; 14+ messages in thread From: Nicolas Pitre @ 2014-06-19 21:49 UTC (permalink / raw) To: linux-arm-kernel On Thu, 19 Jun 2014, Kevin Hilman wrote: > Nicolas Pitre <nicolas.pitre@linaro.org> writes: > > > On Thu, 19 Jun 2014, Kevin Hilman wrote: > > > >> I think this should probably be officialized since we've taken away the > >> ability for magic-number checking tools (like 'file') to distinguish > >> between big- and little-endian zImages. > >> > >> For now, I've updated my tools to check for 'setend be' in ARM and > >> Thumb2 mode, but if this does get officialized, I'll gladly move over to > >> it. > > > > Would you ACK this patch? > > > > ----- >8 > > ARM: zImage: identify kernel endianness > > > > With patch #8067/1 applied, it is no longer possible to determine the > > minor nit: I'd rather see a commit id (commit subject) instead of the > reference in RMK's patch tracker, but other than that... The commit ID may not be stable, unless RMK moves it to his devel-stable branch. I'll add the commit subject though. Queued as patch #8079/1. Nicolas ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-06-19 21:49 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-04-10 16:27 [PATCH] ARM: zImage: ensure header in LE format for BE8 kernels Taras Kondratiuk 2014-04-10 17:03 ` Nicolas Pitre 2014-06-17 14:29 ` Russell King - ARM Linux 2014-06-17 16:07 ` Nicolas Pitre 2014-06-18 17:55 ` Kevin Hilman 2014-06-18 18:14 ` Stephen Boyd 2014-06-18 18:21 ` Kevin Hilman 2014-06-18 18:22 ` Stephen Boyd 2014-06-18 19:01 ` Kevin Hilman 2014-06-18 21:35 ` Nicolas Pitre 2014-06-19 18:27 ` Kevin Hilman 2014-06-19 20:32 ` Nicolas Pitre 2014-06-19 20:57 ` Kevin Hilman 2014-06-19 21:49 ` Nicolas Pitre
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).