mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Instead of using __efistub_global to force variables into the .data section, leave them in the .bss but pull the EFI stub's .bss section into .data in the linker script for the compressed kernel. Add relocation checking for x86 as well to catch non-PC-relative relocations that require runtime processing, since the EFI stub does not do any runtime relocation processing. This will catch, for example, data relocations created by static initializers of pointers. Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu> Link: https://lore.kernel.org/r/20200416151227.3360778-3-nivedita@alum.mit.edu Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
77 lines
1.2 KiB
ArmAsm
77 lines
1.2 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include <asm-generic/vmlinux.lds.h>
|
|
|
|
OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT)
|
|
|
|
#undef i386
|
|
|
|
#include <asm/cache.h>
|
|
#include <asm/page_types.h>
|
|
|
|
#ifdef CONFIG_X86_64
|
|
OUTPUT_ARCH(i386:x86-64)
|
|
ENTRY(startup_64)
|
|
#else
|
|
OUTPUT_ARCH(i386)
|
|
ENTRY(startup_32)
|
|
#endif
|
|
|
|
SECTIONS
|
|
{
|
|
/* Be careful parts of head_64.S assume startup_32 is at
|
|
* address 0.
|
|
*/
|
|
. = 0;
|
|
.head.text : {
|
|
_head = . ;
|
|
HEAD_TEXT
|
|
_ehead = . ;
|
|
}
|
|
.rodata..compressed : {
|
|
*(.rodata..compressed)
|
|
}
|
|
.text : {
|
|
_text = .; /* Text */
|
|
*(.text)
|
|
*(.text.*)
|
|
_etext = . ;
|
|
}
|
|
.rodata : {
|
|
_rodata = . ;
|
|
*(.rodata) /* read-only data */
|
|
*(.rodata.*)
|
|
_erodata = . ;
|
|
}
|
|
.got : {
|
|
_got = .;
|
|
KEEP(*(.got.plt))
|
|
KEEP(*(.got))
|
|
_egot = .;
|
|
}
|
|
.data : {
|
|
_data = . ;
|
|
*(.data)
|
|
*(.data.*)
|
|
*(.bss.efistub)
|
|
_edata = . ;
|
|
}
|
|
. = ALIGN(L1_CACHE_BYTES);
|
|
.bss : {
|
|
_bss = . ;
|
|
*(.bss)
|
|
*(.bss.*)
|
|
*(COMMON)
|
|
. = ALIGN(8); /* For convenience during zeroing */
|
|
_ebss = .;
|
|
}
|
|
#ifdef CONFIG_X86_64
|
|
. = ALIGN(PAGE_SIZE);
|
|
.pgtable : {
|
|
_pgtable = . ;
|
|
*(.pgtable)
|
|
_epgtable = . ;
|
|
}
|
|
#endif
|
|
. = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */
|
|
_end = .;
|
|
}
|