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 96*f913a660SVasily Gorbik _decompressor_end = .; 97*f913a660SVasily Gorbik 98edd4a866SHeiko Carstens#ifdef CONFIG_KERNEL_UNCOMPRESSED 99edd4a866SHeiko Carstens . = 0x100000; 100edd4a866SHeiko Carstens#else 101edd4a866SHeiko Carstens . = ALIGN(8); 102edd4a866SHeiko Carstens#endif 103edd4a866SHeiko Carstens .rodata.compressed : { 104edd4a866SHeiko Carstens _compressed_start = .; 105edd4a866SHeiko Carstens *(.vmlinux.bin.compressed) 106edd4a866SHeiko Carstens _compressed_end = .; 107aa127a06SPeter Oberparleiter } 108aa127a06SPeter Oberparleiter 109aa127a06SPeter Oberparleiter#define SB_TRAILER_SIZE 32 110aa127a06SPeter Oberparleiter /* Trailer needed for Secure Boot */ 111aa127a06SPeter Oberparleiter . += SB_TRAILER_SIZE; /* make sure .sb.trailer does not overwrite the previous section */ 112aa127a06SPeter Oberparleiter . = ALIGN(4096) - SB_TRAILER_SIZE; 113aa127a06SPeter Oberparleiter .sb.trailer : { 114aa127a06SPeter Oberparleiter QUAD(0) 115aa127a06SPeter Oberparleiter QUAD(0) 116aa127a06SPeter Oberparleiter QUAD(0) 117aa127a06SPeter Oberparleiter QUAD(0x000000207a49504c) 118edd4a866SHeiko Carstens } 119edd4a866SHeiko Carstens _end = .; 120edd4a866SHeiko Carstens 121edd4a866SHeiko Carstens /* Sections to be discarded */ 122edd4a866SHeiko Carstens /DISCARD/ : { 123edd4a866SHeiko Carstens *(.eh_frame) 124edd4a866SHeiko Carstens *(__ex_table) 125edd4a866SHeiko Carstens *(*__ksymtab*) 126edd4a866SHeiko Carstens *(___kcrctab*) 127edd4a866SHeiko Carstens } 128edd4a866SHeiko Carstens} 129