powerpc/boot: Add support for 64bit little endian wrapper
The code is only slightly modified : entry points now use the FIXUP_ENDIAN trampoline to switch endian order. The 32bit wrapper is kept for big endian kernels and 64bit is enforced for little endian kernels with a PPC64_BOOT_WRAPPER config option. The linker script is generated using the kernel preprocessor flags to make use of the CONFIG_* definitions and the wrapper script is modified to take into account the new elf64ppc format. Finally, the zImage file is compiled as a position independent executable (-pie) which makes it loadable at any address by the firmware. Signed-off-by: Cédric Le Goater <clg@fr.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
这个提交包含在:

提交者
Benjamin Herrenschmidt

父节点
2d9afb369b
当前提交
147c05168f
@@ -1,4 +1,10 @@
|
||||
#include <asm-generic/vmlinux.lds.h>
|
||||
|
||||
#ifdef CONFIG_PPC64_BOOT_WRAPPER
|
||||
OUTPUT_ARCH(powerpc:common64)
|
||||
#else
|
||||
OUTPUT_ARCH(powerpc:common)
|
||||
#endif
|
||||
ENTRY(_zimage_start)
|
||||
EXTERN(_zimage_start)
|
||||
SECTIONS
|
||||
@@ -16,7 +22,9 @@ SECTIONS
|
||||
*(.rodata*)
|
||||
*(.data*)
|
||||
*(.sdata*)
|
||||
#ifndef CONFIG_PPC64_BOOT_WRAPPER
|
||||
*(.got2)
|
||||
#endif
|
||||
}
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
@@ -27,7 +35,13 @@ SECTIONS
|
||||
}
|
||||
.hash : { *(.hash) }
|
||||
.interp : { *(.interp) }
|
||||
.rela.dyn : { *(.rela*) }
|
||||
.rela.dyn :
|
||||
{
|
||||
#ifdef CONFIG_PPC64_BOOT_WRAPPER
|
||||
__rela_dyn_start = .;
|
||||
#endif
|
||||
*(.rela*)
|
||||
}
|
||||
|
||||
. = ALIGN(8);
|
||||
.kernel:dtb :
|
||||
@@ -53,6 +67,15 @@ SECTIONS
|
||||
_initrd_end = .;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC64_BOOT_WRAPPER
|
||||
.got :
|
||||
{
|
||||
__toc_start = .;
|
||||
*(.got)
|
||||
*(.toc)
|
||||
}
|
||||
#endif
|
||||
|
||||
. = ALIGN(4096);
|
||||
.bss :
|
||||
{
|
||||
|
在新工单中引用
屏蔽一个用户