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