18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#include <asm-generic/vmlinux.lds.h> 38c2ecf20Sopenharmony_ci#include <asm/vmlinux.lds.h> 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ciOUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") 68c2ecf20Sopenharmony_ciOUTPUT_ARCH(s390:64-bit) 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ciENTRY(startup) 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ciSECTIONS 118c2ecf20Sopenharmony_ci{ 128c2ecf20Sopenharmony_ci . = 0; 138c2ecf20Sopenharmony_ci .head.text : { 148c2ecf20Sopenharmony_ci _head = . ; 158c2ecf20Sopenharmony_ci HEAD_TEXT 168c2ecf20Sopenharmony_ci _ehead = . ; 178c2ecf20Sopenharmony_ci } 188c2ecf20Sopenharmony_ci .text : { 198c2ecf20Sopenharmony_ci _text = .; /* Text */ 208c2ecf20Sopenharmony_ci *(.text) 218c2ecf20Sopenharmony_ci *(.text.*) 228c2ecf20Sopenharmony_ci _etext = . ; 238c2ecf20Sopenharmony_ci } 248c2ecf20Sopenharmony_ci .rodata : { 258c2ecf20Sopenharmony_ci _rodata = . ; 268c2ecf20Sopenharmony_ci *(.rodata) /* read-only data */ 278c2ecf20Sopenharmony_ci *(.rodata.*) 288c2ecf20Sopenharmony_ci _erodata = . ; 298c2ecf20Sopenharmony_ci } 308c2ecf20Sopenharmony_ci .data : { 318c2ecf20Sopenharmony_ci _data = . ; 328c2ecf20Sopenharmony_ci *(.data) 338c2ecf20Sopenharmony_ci *(.data.*) 348c2ecf20Sopenharmony_ci _edata = . ; 358c2ecf20Sopenharmony_ci } 368c2ecf20Sopenharmony_ci /* 378c2ecf20Sopenharmony_ci * .dma section for code, data, ex_table that need to stay below 2 GB, 388c2ecf20Sopenharmony_ci * even when the kernel is relocate: above 2 GB. 398c2ecf20Sopenharmony_ci */ 408c2ecf20Sopenharmony_ci . = ALIGN(PAGE_SIZE); 418c2ecf20Sopenharmony_ci _sdma = .; 428c2ecf20Sopenharmony_ci .dma.text : { 438c2ecf20Sopenharmony_ci _stext_dma = .; 448c2ecf20Sopenharmony_ci *(.dma.text) 458c2ecf20Sopenharmony_ci . = ALIGN(PAGE_SIZE); 468c2ecf20Sopenharmony_ci _etext_dma = .; 478c2ecf20Sopenharmony_ci } 488c2ecf20Sopenharmony_ci . = ALIGN(16); 498c2ecf20Sopenharmony_ci .dma.ex_table : { 508c2ecf20Sopenharmony_ci _start_dma_ex_table = .; 518c2ecf20Sopenharmony_ci KEEP(*(.dma.ex_table)) 528c2ecf20Sopenharmony_ci _stop_dma_ex_table = .; 538c2ecf20Sopenharmony_ci } 548c2ecf20Sopenharmony_ci .dma.data : { *(.dma.data) } 558c2ecf20Sopenharmony_ci . = ALIGN(PAGE_SIZE); 568c2ecf20Sopenharmony_ci _edma = .; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci BOOT_DATA 598c2ecf20Sopenharmony_ci BOOT_DATA_PRESERVED 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci /* 628c2ecf20Sopenharmony_ci * This is the BSS section of the decompressor and not of the decompressed Linux kernel. 638c2ecf20Sopenharmony_ci * It will consume place in the decompressor's image. 648c2ecf20Sopenharmony_ci */ 658c2ecf20Sopenharmony_ci . = ALIGN(8); 668c2ecf20Sopenharmony_ci .bss : { 678c2ecf20Sopenharmony_ci _bss = . ; 688c2ecf20Sopenharmony_ci *(.bss) 698c2ecf20Sopenharmony_ci *(.bss.*) 708c2ecf20Sopenharmony_ci *(COMMON) 718c2ecf20Sopenharmony_ci _ebss = .; 728c2ecf20Sopenharmony_ci } 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci /* 758c2ecf20Sopenharmony_ci * uncompressed image info used by the decompressor it should match 768c2ecf20Sopenharmony_ci * struct vmlinux_info. It comes from .vmlinux.info section of 778c2ecf20Sopenharmony_ci * uncompressed vmlinux in a form of info.o 788c2ecf20Sopenharmony_ci */ 798c2ecf20Sopenharmony_ci . = ALIGN(8); 808c2ecf20Sopenharmony_ci .vmlinux.info : { 818c2ecf20Sopenharmony_ci _vmlinux_info = .; 828c2ecf20Sopenharmony_ci *(.vmlinux.info) 838c2ecf20Sopenharmony_ci } 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci#ifdef CONFIG_KERNEL_UNCOMPRESSED 868c2ecf20Sopenharmony_ci . = 0x100000; 878c2ecf20Sopenharmony_ci#else 888c2ecf20Sopenharmony_ci . = ALIGN(8); 898c2ecf20Sopenharmony_ci#endif 908c2ecf20Sopenharmony_ci .rodata.compressed : { 918c2ecf20Sopenharmony_ci _compressed_start = .; 928c2ecf20Sopenharmony_ci *(.vmlinux.bin.compressed) 938c2ecf20Sopenharmony_ci _compressed_end = .; 948c2ecf20Sopenharmony_ci } 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ci#define SB_TRAILER_SIZE 32 978c2ecf20Sopenharmony_ci /* Trailer needed for Secure Boot */ 988c2ecf20Sopenharmony_ci . += SB_TRAILER_SIZE; /* make sure .sb.trailer does not overwrite the previous section */ 998c2ecf20Sopenharmony_ci . = ALIGN(4096) - SB_TRAILER_SIZE; 1008c2ecf20Sopenharmony_ci .sb.trailer : { 1018c2ecf20Sopenharmony_ci QUAD(0) 1028c2ecf20Sopenharmony_ci QUAD(0) 1038c2ecf20Sopenharmony_ci QUAD(0) 1048c2ecf20Sopenharmony_ci QUAD(0x000000207a49504c) 1058c2ecf20Sopenharmony_ci } 1068c2ecf20Sopenharmony_ci _end = .; 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci /* Sections to be discarded */ 1098c2ecf20Sopenharmony_ci /DISCARD/ : { 1108c2ecf20Sopenharmony_ci *(.eh_frame) 1118c2ecf20Sopenharmony_ci *(__ex_table) 1128c2ecf20Sopenharmony_ci *(*__ksymtab*) 1138c2ecf20Sopenharmony_ci *(___kcrctab*) 1148c2ecf20Sopenharmony_ci } 1158c2ecf20Sopenharmony_ci} 116