ARM: add additional table to compressed kernel
authorRussell King <rmk+kernel@armlinux.org.uk>
Thu, 21 Sep 2017 17:10:19 +0000 (18:10 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Tue, 3 Oct 2017 12:27:07 +0000 (13:27 +0100)
Add an additional extendable table to the compressed kernel so that we
can provide further information to boot loaders regarding the properties
of the image contained within.

This is necessary for correct behaviour of kexec.

Tested-by: Tony Lindgren <tony@atomide.com>
Tested-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/boot/compressed/head.S
arch/arm/boot/compressed/vmlinux.lds.S

index 8a756870c238435af684215c653f54a739f4f1a5..45c8823c37503d3bfdc2beee80304c556db8bf53 100644 (file)
@@ -143,6 +143,8 @@ start:
                .word   _magic_start    @ absolute load/run zImage address
                .word   _magic_end      @ zImage end address
                .word   0x04030201      @ endianness flag
+               .word   0x45454545      @ another magic number to indicate
+               .word   _magic_table    @ additional data table
 
                __EFI_HEADER
 1:
index 7a4c59154361d00ee88c2d03cb6af5aa8cace7e7..b38dcef907560beff1bfe77b31fba470cef13511 100644 (file)
@@ -44,12 +44,22 @@ SECTIONS
     *(.glue_7t)
     *(.glue_7)
   }
+  .table : ALIGN(4) {
+    _table_start = .;
+    LONG(ZIMAGE_MAGIC(2))
+    LONG(ZIMAGE_MAGIC(0x5a534c4b))
+    LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start))
+    LONG(ZIMAGE_MAGIC(_kernel_bss_size))
+    LONG(0)
+    _table_end = .;
+  }
   .rodata : {
     *(.rodata)
     *(.rodata.*)
   }
   .piggydata : {
     *(.piggydata)
+    __piggy_size_addr = . - 4;
   }
 
   . = ALIGN(4);
@@ -88,6 +98,7 @@ SECTIONS
   _magic_sig = ZIMAGE_MAGIC(0x016f2818);
   _magic_start = ZIMAGE_MAGIC(_start);
   _magic_end = ZIMAGE_MAGIC(_edata);
+  _magic_table = ZIMAGE_MAGIC(_table_start - _start);
 
   . = BSS_START;
   __bss_start = .;