1/* SPDX-License-Identifier: BSD-2-Clause */
2/*
3 * U-Boot riscv64 EFI linker script
4 *
5 * Modified from arch/arm/lib/elf_aarch64_efi.lds
6 */
7
8OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv")
9OUTPUT_ARCH(riscv)
10
11PHDRS
12{
13	data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
14}
15
16ENTRY(_start)
17SECTIONS
18{
19	.text 0x0 : {
20		_text = .;
21		*(.text.head)
22		*(.text)
23		*(.text.*)
24		*(.gnu.linkonce.t.*)
25		*(.srodata)
26		*(.rodata*)
27		. = ALIGN(16);
28		*(.dynamic);
29		. = ALIGN(512);
30	}
31	.rela.dyn : { *(.rela.dyn) }
32	.rela.plt : { *(.rela.plt) }
33	.rela.got : { *(.rela.got) }
34	.rela.data : { *(.rela.data) *(.rela.data*) }
35	_etext = .;
36	_text_size = . - _text;
37	. = ALIGN(4096);
38	.data : {
39		_data = .;
40		*(.sdata)
41		*(.data)
42		*(.data1)
43		*(.data.*)
44		*(.got.plt)
45		*(.got)
46
47		/*
48		 * The EFI loader doesn't seem to like a .bss section, so we
49		 * stick it all into .data:
50		 */
51		. = ALIGN(16);
52		_bss = .;
53		*(.sbss)
54		*(.scommon)
55		*(.dynbss)
56		*(.bss)
57		*(.bss.*)
58		*(COMMON)
59		. = ALIGN(512);
60		_bss_end = .;
61		_edata = .;
62	} :data
63	_data_size = _edata - _data;
64
65	. = ALIGN(4096);
66	.dynsym   : { *(.dynsym) }
67	. = ALIGN(4096);
68	.dynstr   : { *(.dynstr) }
69	. = ALIGN(4096);
70	.note.gnu.build-id : { *(.note.gnu.build-id) }
71	/DISCARD/ : {
72		*(.rel.reloc)
73		*(.eh_frame)
74		*(.note.GNU-stack)
75	}
76	.comment 0 : { *(.comment) }
77}
78