/* SPDX-License-Identifier: GPL-2.0 */ #include #include #include #include #include OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") OUTPUT_ARCH(s390:64-bit) ENTRY(startup) SECTIONS { . = 0; .head.text : { _head = . ; HEAD_TEXT _ehead = . ; } .text : { _text = .; /* Text */ *(.text) *(.text.*) _etext = . ; } .rodata : { _rodata = . ; *(.rodata) /* read-only data */ *(.rodata.*) _erodata = . ; } NOTES .data : { _data = . ; *(.data) *(.data.*) _edata = . ; } BOOT_DATA BOOT_DATA_PRESERVED /* * This is the BSS section of the decompressor and not of the decompressed Linux kernel. * It will consume place in the decompressor's image. */ . = ALIGN(8); .bss : { _bss = . ; *(.bss) *(.bss.*) *(COMMON) /* * Stacks for the decompressor */ . = ALIGN(PAGE_SIZE); _dump_info_stack_start = .; . += PAGE_SIZE; _dump_info_stack_end = .; . = ALIGN(PAGE_SIZE); _stack_start = .; . += BOOT_STACK_SIZE; _stack_end = .; _ebss = .; } /* * uncompressed image info used by the decompressor it should match * struct vmlinux_info. It comes from .vmlinux.info section of * uncompressed vmlinux in a form of info.o */ . = ALIGN(8); .vmlinux.info : { _vmlinux_info = .; *(.vmlinux.info) } .decompressor.syms : { . += 1; /* make sure we have \0 before the first entry */ . = ALIGN(2); _decompressor_syms_start = .; *(.decompressor.syms) _decompressor_syms_end = .; } #ifdef CONFIG_KERNEL_UNCOMPRESSED . = 0x100000; #else . = ALIGN(8); #endif .rodata.compressed : { _compressed_start = .; *(.vmlinux.bin.compressed) _compressed_end = .; } #define SB_TRAILER_SIZE 32 /* Trailer needed for Secure Boot */ . += SB_TRAILER_SIZE; /* make sure .sb.trailer does not overwrite the previous section */ . = ALIGN(4096) - SB_TRAILER_SIZE; .sb.trailer : { QUAD(0) QUAD(0) QUAD(0) QUAD(0x000000207a49504c) } _end = .; /* Sections to be discarded */ /DISCARD/ : { *(.eh_frame) *(__ex_table) *(*__ksymtab*) *(___kcrctab*) } }