#include <asm/thread_info.h>
#include <asm/page.h>
#include <asm/ftrace.lds.h>
#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir) \
*(.bss..invalid_pg_dir)
#define RO_EXCEPTION_TABLE_ALIGN 16
#define RO_AFTER_INIT_DATA
#define RUNTIME_DISCARD_EXIT
#define EMITS_PT_NOTE
#include <asm-generic/vmlinux.lds.h>
#include <asm/vmlinux.lds.h>
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
OUTPUT_ARCH(s390:64-bit)
ENTRY(startup_continue)
jiffies = jiffies_64;
PHDRS {
text PT_LOAD FLAGS(5);
data PT_LOAD FLAGS(7);
note PT_NOTE FLAGS(0);
}
SECTIONS
{
. = TEXT_OFFSET;
.text : {
_stext = .;
_text = .;
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
FTRACE_HOTPATCH_TRAMPOLINES_TEXT
*(.text..*_indirect_*)
*(.gnu.warning)
. = ALIGN(PAGE_SIZE);
_etext = .;
} :text = 0x0700
RO_DATA(PAGE_SIZE)
. = ALIGN(PAGE_SIZE);
_sdata = .;
. = ALIGN(PAGE_SIZE);
__start_ro_after_init = .;
.data..ro_after_init : {
*(.data..ro_after_init)
JUMP_TABLE_DATA
} :data
. = ALIGN(PAGE_SIZE);
__end_ro_after_init = .;
. = ALIGN(8);
.skey_region_table : {
__skey_region_start = .;
KEEP(*(.skey_region))
__skey_region_end = .;
}
.data.rel.ro : {
*(.data.rel.ro .data.rel.ro.*)
}
.got : {
__got_start = .;
*(.got)
__got_end = .;
}
RW_DATA(0x100, PAGE_SIZE, THREAD_SIZE)
.data.rel : {
*(.data.rel*)
}
BOOT_DATA_PRESERVED
. = ALIGN(8);
.amode31.refs : {
_start_amode31_refs = .;
*(.amode31.refs)
_end_amode31_refs = .;
}
. = ALIGN(PAGE_SIZE);
_edata = .;
. = ALIGN(PAGE_SIZE);
__init_begin = .;
. = ALIGN(PAGE_SIZE);
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
_sinittext = .;
INIT_TEXT
. = ALIGN(PAGE_SIZE);
_einittext = .;
}
.exit.text : {
EXIT_TEXT
}
.exit.data : {
EXIT_DATA
}
. = ALIGN(8);
.altinstructions : {
__alt_instructions = .;
*(.altinstructions)
__alt_instructions_end = .;
}
.altinstr_replacement : {
*(.altinstr_replacement)
}
#ifdef CONFIG_STACKPROTECTOR
. = ALIGN(8);
.stack_prot_table : {
__stack_prot_start = .;
KEEP(*(__stack_protector_loc))
__stack_prot_end = .;
}
#endif
. = ALIGN(4);
.nospec_call_table : {
__nospec_call_start = . ;
*(.s390_indirect*)
__nospec_call_end = . ;
}
.nospec_return_table : {
__nospec_return_start = . ;
*(.s390_return*)
__nospec_return_end = . ;
}
BOOT_DATA
. = ALIGN(PAGE_SIZE);
_samode31 = .;
.amode31.text : {
_stext_amode31 = .;
*(.amode31.text)
*(.amode31.text.*_indirect_*)
. = ALIGN(PAGE_SIZE);
_etext_amode31 = .;
}
. = ALIGN(16);
.amode31.ex_table : {
_start_amode31_ex_table = .;
KEEP(*(.amode31.ex_table))
_stop_amode31_ex_table = .;
}
. = ALIGN(PAGE_SIZE);
.amode31.data : {
*(.amode31.data)
}
. = _samode31 + AMODE31_SIZE;
_eamode31 = .;
. = ALIGN(PAGE_SIZE);
INIT_DATA_SECTION(0x100)
RUNTIME_CONST_VARIABLES
PERCPU_SECTION(0x100)
. = ALIGN(PAGE_SIZE);
__init_end = .;
BSS_SECTION(PAGE_SIZE, 4 * PAGE_SIZE, PAGE_SIZE)
. = ALIGN(PAGE_SIZE);
_end = . ;
STABS_DEBUG
DWARF_DEBUG
MODINFO
ELF_DETAILS
.got.plt : {
*(.got.plt)
}
ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0x18, "Unexpected GOT/PLT entries detected!")
.plt : {
*(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt)
}
ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
.rela.dyn : {
*(.rela.*) *(.rela_*)
}
ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
.vmlinux.info 0 (INFO) : {
QUAD(startup_continue)
QUAD(__bss_start - _stext)
QUAD(__bss_stop - __bss_start)
QUAD(__boot_data_start)
QUAD(__boot_data_end - __boot_data_start)
QUAD(__boot_data_preserved_start)
QUAD(__boot_data_preserved_end -
__boot_data_preserved_start)
QUAD(__got_start)
QUAD(__got_end)
QUAD(_eamode31 - _samode31)
QUAD(init_mm)
QUAD(swapper_pg_dir)
QUAD(invalid_pg_dir)
QUAD(__alt_instructions)
QUAD(__alt_instructions_end)
#ifdef CONFIG_STACKPROTECTOR
QUAD(__stack_prot_start)
QUAD(__stack_prot_end)
#endif
#ifdef CONFIG_KASAN
QUAD(kasan_early_shadow_page)
QUAD(kasan_early_shadow_pte)
QUAD(kasan_early_shadow_pmd)
QUAD(kasan_early_shadow_pud)
QUAD(kasan_early_shadow_p4d)
#endif
} :NONE
DISCARDS
/DISCARD/ : {
*(.eh_frame)
*(.interp)
}
}