1edd4a866SHeiko Carstens/* SPDX-License-Identifier: GPL-2.0 */ 2edd4a866SHeiko Carstens#include <asm-generic/vmlinux.lds.h> 3edd4a866SHeiko Carstens#include <asm/vmlinux.lds.h> 4edd4a866SHeiko Carstens#include <asm/thread_info.h> 5edd4a866SHeiko Carstens#include <asm/page.h> 6edd4a866SHeiko Carstens#include <asm/sclp.h> 7834979c2SHeiko Carstens#include "boot.h" 8edd4a866SHeiko Carstens 9edd4a866SHeiko CarstensOUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") 10edd4a866SHeiko CarstensOUTPUT_ARCH(s390:64-bit) 11edd4a866SHeiko Carstens 12edd4a866SHeiko CarstensENTRY(startup) 13edd4a866SHeiko Carstens 14edd4a866SHeiko CarstensSECTIONS 15edd4a866SHeiko Carstens{ 16edd4a866SHeiko Carstens . = 0; 17834979c2SHeiko Carstens .ipldata : { 18834979c2SHeiko Carstens *(.ipldata) 19834979c2SHeiko Carstens } 20834979c2SHeiko Carstens . = IPL_START; 21edd4a866SHeiko Carstens .head.text : { 22edd4a866SHeiko Carstens _head = . ; 23edd4a866SHeiko Carstens HEAD_TEXT 24edd4a866SHeiko Carstens _ehead = . ; 25edd4a866SHeiko Carstens } 26f84d88edSHeiko Carstens . = PARMAREA; 27f84d88edSHeiko Carstens .parmarea : { 28f84d88edSHeiko Carstens *(.parmarea) 29f84d88edSHeiko Carstens } 30edd4a866SHeiko Carstens .text : { 31edd4a866SHeiko Carstens _text = .; /* Text */ 32edd4a866SHeiko Carstens *(.text) 33edd4a866SHeiko Carstens *(.text.*) 34edd4a866SHeiko Carstens _etext = . ; 35edd4a866SHeiko Carstens } 36edd4a866SHeiko Carstens .rodata : { 37edd4a866SHeiko Carstens _rodata = . ; 38edd4a866SHeiko Carstens *(.rodata) /* read-only data */ 39edd4a866SHeiko Carstens *(.rodata.*) 40edd4a866SHeiko Carstens _erodata = . ; 41edd4a866SHeiko Carstens } 42edd4a866SHeiko Carstens NOTES 43edd4a866SHeiko Carstens .data : { 44edd4a866SHeiko Carstens _data = . ; 45edd4a866SHeiko Carstens *(.data) 46edd4a866SHeiko Carstens *(.data.*) 47edd4a866SHeiko Carstens _edata = . ; 48edd4a866SHeiko Carstens } 49edd4a866SHeiko Carstens 50edd4a866SHeiko Carstens BOOT_DATA 51edd4a866SHeiko Carstens BOOT_DATA_PRESERVED 52edd4a866SHeiko Carstens 53edd4a866SHeiko Carstens /* 54edd4a866SHeiko Carstens * This is the BSS section of the decompressor and not of the decompressed Linux kernel. 55edd4a866SHeiko Carstens * It will consume place in the decompressor's image. 56edd4a866SHeiko Carstens */ 57edd4a866SHeiko Carstens . = ALIGN(8); 58edd4a866SHeiko Carstens .bss : { 59edd4a866SHeiko Carstens _bss = . ; 60edd4a866SHeiko Carstens *(.bss) 61edd4a866SHeiko Carstens *(.bss.*) 62edd4a866SHeiko Carstens *(COMMON) 63edd4a866SHeiko Carstens /* 64edd4a866SHeiko Carstens * Stacks for the decompressor 65edd4a866SHeiko Carstens */ 66edd4a866SHeiko Carstens . = ALIGN(PAGE_SIZE); 67edd4a866SHeiko Carstens _dump_info_stack_start = .; 68edd4a866SHeiko Carstens . += PAGE_SIZE; 69edd4a866SHeiko Carstens _dump_info_stack_end = .; 70edd4a866SHeiko Carstens . = ALIGN(PAGE_SIZE); 71edd4a866SHeiko Carstens _stack_start = .; 72edd4a866SHeiko Carstens . += BOOT_STACK_SIZE; 73edd4a866SHeiko Carstens _stack_end = .; 74edd4a866SHeiko Carstens _ebss = .; 75edd4a866SHeiko Carstens } 76edd4a866SHeiko Carstens 77edd4a866SHeiko Carstens /* 78edd4a866SHeiko Carstens * uncompressed image info used by the decompressor it should match 79edd4a866SHeiko Carstens * struct vmlinux_info. It comes from .vmlinux.info section of 80edd4a866SHeiko Carstens * uncompressed vmlinux in a form of info.o 81edd4a866SHeiko Carstens */ 82edd4a866SHeiko Carstens . = ALIGN(8); 83edd4a866SHeiko Carstens .vmlinux.info : { 84edd4a866SHeiko Carstens _vmlinux_info = .; 85edd4a866SHeiko Carstens *(.vmlinux.info) 86edd4a866SHeiko Carstens } 87edd4a866SHeiko Carstens 88edd4a866SHeiko Carstens .decompressor.syms : { 89edd4a866SHeiko Carstens . += 1; /* make sure we have \0 before the first entry */ 90edd4a866SHeiko Carstens . = ALIGN(2); 91edd4a866SHeiko Carstens _decompressor_syms_start = .; 92edd4a866SHeiko Carstens *(.decompressor.syms) 93edd4a866SHeiko Carstens _decompressor_syms_end = .; 94edd4a866SHeiko Carstens } 95edd4a866SHeiko Carstens 96edd4a866SHeiko Carstens#ifdef CONFIG_KERNEL_UNCOMPRESSED 97edd4a866SHeiko Carstens . = 0x100000; 98edd4a866SHeiko Carstens#else 99edd4a866SHeiko Carstens . = ALIGN(8); 100edd4a866SHeiko Carstens#endif 101edd4a866SHeiko Carstens .rodata.compressed : { 102edd4a866SHeiko Carstens _compressed_start = .; 103edd4a866SHeiko Carstens *(.vmlinux.bin.compressed) 104edd4a866SHeiko Carstens _compressed_end = .; 105*aa127a06SPeter Oberparleiter } 106*aa127a06SPeter Oberparleiter 107*aa127a06SPeter Oberparleiter#define SB_TRAILER_SIZE 32 108*aa127a06SPeter Oberparleiter /* Trailer needed for Secure Boot */ 109*aa127a06SPeter Oberparleiter . += SB_TRAILER_SIZE; /* make sure .sb.trailer does not overwrite the previous section */ 110*aa127a06SPeter Oberparleiter . = ALIGN(4096) - SB_TRAILER_SIZE; 111*aa127a06SPeter Oberparleiter .sb.trailer : { 112*aa127a06SPeter Oberparleiter QUAD(0) 113*aa127a06SPeter Oberparleiter QUAD(0) 114*aa127a06SPeter Oberparleiter QUAD(0) 115*aa127a06SPeter Oberparleiter QUAD(0x000000207a49504c) 116edd4a866SHeiko Carstens } 117edd4a866SHeiko Carstens _end = .; 118edd4a866SHeiko Carstens 119edd4a866SHeiko Carstens /* Sections to be discarded */ 120edd4a866SHeiko Carstens /DISCARD/ : { 121edd4a866SHeiko Carstens *(.eh_frame) 122edd4a866SHeiko Carstens *(__ex_table) 123edd4a866SHeiko Carstens *(*__ksymtab*) 124edd4a866SHeiko Carstens *(___kcrctab*) 125edd4a866SHeiko Carstens } 126edd4a866SHeiko Carstens} 127