1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * (C) Copyright 2002
4 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se.
5 */
6
7#include <config.h>
8OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
9OUTPUT_ARCH(i386)
10ENTRY(_start)
11
12SECTIONS
13{
14#ifndef CONFIG_CMDLINE
15	/DISCARD/ : { *(.u_boot_list_2_cmd_*) }
16#endif
17
18	. = CONFIG_SYS_TEXT_BASE;	/* Location of bootcode in flash */
19	__text_start = .;
20
21	.text.start : { *(.text.start); }
22
23	.__efi_runtime_start : {
24		*(.__efi_runtime_start)
25	}
26
27	.efi_runtime : {
28		*(.text.efi_runtime*)
29		*(.rodata.efi_runtime*)
30		*(.data.efi_runtime*)
31	}
32
33	.__efi_runtime_stop : {
34		*(.__efi_runtime_stop)
35	}
36
37	.text  : { *(.text*); }
38
39	. = ALIGN(4);
40
41	. = ALIGN(4);
42	.u_boot_list : {
43		KEEP(*(SORT(.u_boot_list*)));
44	}
45
46	. = ALIGN(4);
47	.rodata : {
48		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
49		KEEP(*(.rodata.efi.init));
50	}
51
52	. = ALIGN(4);
53	.data : { *(.data*) }
54
55	. = ALIGN(4);
56	.hash : { *(.hash*) }
57
58	. = ALIGN(4);
59	.got : { *(.got*) }
60
61	. = ALIGN(4);
62
63	.efi_runtime_rel_start :
64	{
65		*(.__efi_runtime_rel_start)
66	}
67
68	.efi_runtime_rel : {
69		*(.rel*.efi_runtime)
70		*(.rel*.efi_runtime.*)
71	}
72
73	.efi_runtime_rel_stop :
74	{
75		*(.__efi_runtime_rel_stop)
76	}
77
78	. = ALIGN(4);
79
80	__data_end = .;
81	__init_end = .;
82
83	. = ALIGN(4);
84	.dynsym : { *(.dynsym*) }
85
86	. = ALIGN(4);
87	__rel_dyn_start = .;
88	.rel.dyn : {
89		*(.rel*)
90	}
91	__rel_dyn_end = .;
92	. = ALIGN(4);
93	_end = .;
94
95	.bss __rel_dyn_start (OVERLAY) : {
96		__bss_start = .;
97		*(.bss*)
98		*(COM*)
99		. = ALIGN(4);
100		__bss_end = .;
101	}
102
103	/DISCARD/ : { *(.dynstr*) }
104	/DISCARD/ : { *(.dynamic*) }
105	/DISCARD/ : { *(.plt*) }
106	/DISCARD/ : { *(.interp*) }
107	/DISCARD/ : { *(.gnu*) }
108
109#ifdef CONFIG_X86_16BIT_INIT
110	/*
111	 * The following expressions place the 16-bit Real-Mode code and
112	 * Reset Vector at the end of the Flash ROM
113	 */
114	. = START_16 - RESET_SEG_START;
115	.start16 : AT (START_16) {
116		KEEP(*(.start16));
117	}
118
119	. = RESET_VEC_LOC - RESET_SEG_START;
120	.resetvec : AT (RESET_VEC_LOC) {
121		KEEP(*(.resetvec));
122	}
123#endif
124
125}
126