18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * ld.script for compressed kernel support of LoongArch
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Author: Huacai Chen <chenhuacai@loongson.cn>
68c2ecf20Sopenharmony_ci * Copyright (C) 2020 Loongson Technology Corporation Limited
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci/*
108c2ecf20Sopenharmony_ci * Max avaliable Page Size is 64K, so we set SectionAlignment
118c2ecf20Sopenharmony_ci * field of EFI application to 64K.
128c2ecf20Sopenharmony_ci */
138c2ecf20Sopenharmony_ciPECOFF_FILE_ALIGN = 0x200;
148c2ecf20Sopenharmony_ciPECOFF_SEGMENT_ALIGN = 0x10000;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciOUTPUT_ARCH(loongarch)
178c2ecf20Sopenharmony_ciENTRY(start)
188c2ecf20Sopenharmony_ciPHDRS {
198c2ecf20Sopenharmony_ci	text PT_LOAD FLAGS(7); /* RWX */
208c2ecf20Sopenharmony_ci}
218c2ecf20Sopenharmony_ciSECTIONS
228c2ecf20Sopenharmony_ci{
238c2ecf20Sopenharmony_ci	/* Text and read-only data */
248c2ecf20Sopenharmony_ci	_text = .;
258c2ecf20Sopenharmony_ci	.head.text : {
268c2ecf20Sopenharmony_ci		*(.head.text)
278c2ecf20Sopenharmony_ci	}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	.text : {
308c2ecf20Sopenharmony_ci		*(.text)
318c2ecf20Sopenharmony_ci		*(.init.text)
328c2ecf20Sopenharmony_ci		*(.rodata)
338c2ecf20Sopenharmony_ci	}: text
348c2ecf20Sopenharmony_ci	/* End of text section */
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci	. = ALIGN(PECOFF_SEGMENT_ALIGN);
378c2ecf20Sopenharmony_ci	_data = .;
388c2ecf20Sopenharmony_ci	/* Writable data */
398c2ecf20Sopenharmony_ci	.data : {
408c2ecf20Sopenharmony_ci		*(.data)
418c2ecf20Sopenharmony_ci		*(.init.data)
428c2ecf20Sopenharmony_ci		/* Put the compressed image here */
438c2ecf20Sopenharmony_ci		__image_begin = .;
448c2ecf20Sopenharmony_ci		*(.image)
458c2ecf20Sopenharmony_ci		__image_end = .;
468c2ecf20Sopenharmony_ci		CONSTRUCTORS
478c2ecf20Sopenharmony_ci		. = ALIGN(PECOFF_FILE_ALIGN);
488c2ecf20Sopenharmony_ci	}
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci	_edata = .;
518c2ecf20Sopenharmony_ci	/* End of data section */
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci	/* BSS */
548c2ecf20Sopenharmony_ci	.bss : {
558c2ecf20Sopenharmony_ci		*(.bss)
568c2ecf20Sopenharmony_ci		*(.init.bss)
578c2ecf20Sopenharmony_ci	}
588c2ecf20Sopenharmony_ci	. = ALIGN(PECOFF_SEGMENT_ALIGN);
598c2ecf20Sopenharmony_ci	_end = .;
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	/* Sections to be discarded */
628c2ecf20Sopenharmony_ci	/DISCARD/ : {
638c2ecf20Sopenharmony_ci		*(.options)
648c2ecf20Sopenharmony_ci		*(.comment)
658c2ecf20Sopenharmony_ci		*(.note)
668c2ecf20Sopenharmony_ci	}
678c2ecf20Sopenharmony_ci}
68