1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun#include <asm-generic/vmlinux.lds.h> 3*4882a593Smuzhiyun#include <asm/vmlinux.lds.h> 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunOUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") 6*4882a593SmuzhiyunOUTPUT_ARCH(s390:64-bit) 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunENTRY(startup) 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunSECTIONS 11*4882a593Smuzhiyun{ 12*4882a593Smuzhiyun . = 0; 13*4882a593Smuzhiyun .head.text : { 14*4882a593Smuzhiyun _head = . ; 15*4882a593Smuzhiyun HEAD_TEXT 16*4882a593Smuzhiyun _ehead = . ; 17*4882a593Smuzhiyun } 18*4882a593Smuzhiyun .text : { 19*4882a593Smuzhiyun _text = .; /* Text */ 20*4882a593Smuzhiyun *(.text) 21*4882a593Smuzhiyun *(.text.*) 22*4882a593Smuzhiyun _etext = . ; 23*4882a593Smuzhiyun } 24*4882a593Smuzhiyun .rodata : { 25*4882a593Smuzhiyun _rodata = . ; 26*4882a593Smuzhiyun *(.rodata) /* read-only data */ 27*4882a593Smuzhiyun *(.rodata.*) 28*4882a593Smuzhiyun _erodata = . ; 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun .data : { 31*4882a593Smuzhiyun _data = . ; 32*4882a593Smuzhiyun *(.data) 33*4882a593Smuzhiyun *(.data.*) 34*4882a593Smuzhiyun _edata = . ; 35*4882a593Smuzhiyun } 36*4882a593Smuzhiyun /* 37*4882a593Smuzhiyun * .dma section for code, data, ex_table that need to stay below 2 GB, 38*4882a593Smuzhiyun * even when the kernel is relocate: above 2 GB. 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 41*4882a593Smuzhiyun _sdma = .; 42*4882a593Smuzhiyun .dma.text : { 43*4882a593Smuzhiyun _stext_dma = .; 44*4882a593Smuzhiyun *(.dma.text) 45*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 46*4882a593Smuzhiyun _etext_dma = .; 47*4882a593Smuzhiyun } 48*4882a593Smuzhiyun . = ALIGN(16); 49*4882a593Smuzhiyun .dma.ex_table : { 50*4882a593Smuzhiyun _start_dma_ex_table = .; 51*4882a593Smuzhiyun KEEP(*(.dma.ex_table)) 52*4882a593Smuzhiyun _stop_dma_ex_table = .; 53*4882a593Smuzhiyun } 54*4882a593Smuzhiyun .dma.data : { *(.dma.data) } 55*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 56*4882a593Smuzhiyun _edma = .; 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun BOOT_DATA 59*4882a593Smuzhiyun BOOT_DATA_PRESERVED 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * This is the BSS section of the decompressor and not of the decompressed Linux kernel. 63*4882a593Smuzhiyun * It will consume place in the decompressor's image. 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun . = ALIGN(8); 66*4882a593Smuzhiyun .bss : { 67*4882a593Smuzhiyun _bss = . ; 68*4882a593Smuzhiyun *(.bss) 69*4882a593Smuzhiyun *(.bss.*) 70*4882a593Smuzhiyun *(COMMON) 71*4882a593Smuzhiyun _ebss = .; 72*4882a593Smuzhiyun } 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* 75*4882a593Smuzhiyun * uncompressed image info used by the decompressor it should match 76*4882a593Smuzhiyun * struct vmlinux_info. It comes from .vmlinux.info section of 77*4882a593Smuzhiyun * uncompressed vmlinux in a form of info.o 78*4882a593Smuzhiyun */ 79*4882a593Smuzhiyun . = ALIGN(8); 80*4882a593Smuzhiyun .vmlinux.info : { 81*4882a593Smuzhiyun _vmlinux_info = .; 82*4882a593Smuzhiyun *(.vmlinux.info) 83*4882a593Smuzhiyun } 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun#ifdef CONFIG_KERNEL_UNCOMPRESSED 86*4882a593Smuzhiyun . = 0x100000; 87*4882a593Smuzhiyun#else 88*4882a593Smuzhiyun . = ALIGN(8); 89*4882a593Smuzhiyun#endif 90*4882a593Smuzhiyun .rodata.compressed : { 91*4882a593Smuzhiyun _compressed_start = .; 92*4882a593Smuzhiyun *(.vmlinux.bin.compressed) 93*4882a593Smuzhiyun _compressed_end = .; 94*4882a593Smuzhiyun } 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun#define SB_TRAILER_SIZE 32 97*4882a593Smuzhiyun /* Trailer needed for Secure Boot */ 98*4882a593Smuzhiyun . += SB_TRAILER_SIZE; /* make sure .sb.trailer does not overwrite the previous section */ 99*4882a593Smuzhiyun . = ALIGN(4096) - SB_TRAILER_SIZE; 100*4882a593Smuzhiyun .sb.trailer : { 101*4882a593Smuzhiyun QUAD(0) 102*4882a593Smuzhiyun QUAD(0) 103*4882a593Smuzhiyun QUAD(0) 104*4882a593Smuzhiyun QUAD(0x000000207a49504c) 105*4882a593Smuzhiyun } 106*4882a593Smuzhiyun _end = .; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun /* Sections to be discarded */ 109*4882a593Smuzhiyun /DISCARD/ : { 110*4882a593Smuzhiyun *(.eh_frame) 111*4882a593Smuzhiyun *(__ex_table) 112*4882a593Smuzhiyun *(*__ksymtab*) 113*4882a593Smuzhiyun *(___kcrctab*) 114*4882a593Smuzhiyun } 115*4882a593Smuzhiyun} 116