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

Similar to zboot architectures, implement support for embedding SBAT data for x86. Put '.sbat' section in between '.data' and '.text' as the former also covers '.bss' and '.pgtable' and thus must be the last one in the file. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/20250603091951.57775-1-vkuznets@redhat.com
128 lines
2.2 KiB
ArmAsm
128 lines
2.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.*)
|
|
*(.noinstr.text)
|
|
_etext = . ;
|
|
}
|
|
.rodata : {
|
|
_rodata = . ;
|
|
*(.rodata) /* read-only data */
|
|
*(.rodata.*)
|
|
_erodata = . ;
|
|
}
|
|
#ifdef CONFIG_EFI_SBAT
|
|
.sbat : ALIGN(0x1000) {
|
|
_sbat = . ;
|
|
*(.sbat)
|
|
_esbat = ALIGN(0x1000);
|
|
. = _esbat;
|
|
}
|
|
#endif
|
|
.data : ALIGN(0x1000) {
|
|
_data = . ;
|
|
*(.data)
|
|
*(.data.*)
|
|
|
|
/* Add 4 bytes of extra space for the obsolete CRC-32 checksum */
|
|
. = ALIGN(. + 4, 0x200);
|
|
_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 = .;
|
|
|
|
STABS_DEBUG
|
|
DWARF_DEBUG
|
|
ELF_DETAILS
|
|
|
|
DISCARDS
|
|
/DISCARD/ : {
|
|
*(.dynamic) *(.dynsym) *(.dynstr) *(.dynbss)
|
|
*(.hash) *(.gnu.hash)
|
|
*(.note.*)
|
|
}
|
|
|
|
.got.plt (INFO) : {
|
|
*(.got.plt)
|
|
}
|
|
ASSERT(SIZEOF(.got.plt) == 0 ||
|
|
#ifdef CONFIG_X86_64
|
|
SIZEOF(.got.plt) == 0x18,
|
|
#else
|
|
SIZEOF(.got.plt) == 0xc,
|
|
#endif
|
|
"Unexpected GOT/PLT entries detected!")
|
|
|
|
/*
|
|
* Sections that should stay zero sized, which is safer to
|
|
* explicitly check instead of blindly discarding.
|
|
*/
|
|
.got : {
|
|
*(.got)
|
|
}
|
|
ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!")
|
|
|
|
.plt : {
|
|
*(.plt) *(.plt.*)
|
|
}
|
|
ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
|
|
|
|
.rel.dyn : {
|
|
*(.rel.*) *(.rel_*)
|
|
}
|
|
ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!")
|
|
|
|
.rela.dyn : {
|
|
*(.rela.*) *(.rela_*)
|
|
}
|
|
ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
|
|
}
|