soc/intel/alderlake: Add ADL-P 4+4 with 28W TDP
[coreboot.git] / src / lib / program.ld
blob67f685fa089ec203a41633d7e61a3df26720099c
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <memlayout.h>
5 /* This file is included inside a SECTIONS block */
7 /* First we place the code and read only data (typically const declared).
8  * This could theoretically be placed in rom.
9  * The '.' in '.text . : {' is actually significant to prevent missing some
10  * SoC's entry points due to artificial alignment restrictions, see
11  * https://sourceware.org/binutils/docs/ld/Output-Section-Address.html
12  */
13 .text . : {
14         _program = .;
15         _text = .;
16 #if !(ENV_X86 && ENV_BOOTBLOCK)
17         *(.init._start);
18         *(.init);
19         *(.init.*);
20 #endif
21         *(.text._start);
22         *(.text.stage_entry);
23         KEEP(*(.metadata_hash_anchor));
24         *(.text);
25         *(.text.*);
27 #if ENV_HAS_CBMEM
28         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
29         _cbmem_init_hooks = .;
30         KEEP(*(.rodata.cbmem_init_hooks_early));
31         KEEP(*(.rodata.cbmem_init_hooks));
32         _ecbmem_init_hooks = .;
33         RECORD_SIZE(cbmem_init_hooks)
34 #endif
36         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
37         _rsbe_init_begin = .;
38         KEEP(*(.rsbe_init));
39         _ersbe_init_begin = .;
40         RECORD_SIZE(rsbe_init_begin)
42 #if ENV_RAMSTAGE
43         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
44         _pci_drivers = .;
45         KEEP(*(.rodata.pci_driver));
46         _epci_drivers = .;
47         RECORD_SIZE(pci_drivers)
48         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
49         _cpu_drivers = .;
50         KEEP(*(.rodata.cpu_driver));
51         _ecpu_drivers = .;
52         RECORD_SIZE(cpu_drivers)
53 #endif
55         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
56         *(.rodata);
57         *(.rodata.*);
58         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
59         _etext = .;
60         RECORD_SIZE(text)
61 } : to_load
63 #if ENV_RAMSTAGE && (CONFIG(COVERAGE) || CONFIG(ASAN_IN_RAMSTAGE))
64 .ctors . : {
65         . = ALIGN(0x100);
66         __CTOR_LIST__ = .;
67         KEEP(*(.ctors));
68         LONG(0);
69         LONG(0);
70         __CTOR_END__ = .;
72 #endif
74 /* Include data, bss, and heap in that order. Not defined for all stages. */
75 #if ENV_HAS_DATA_SECTION
76 .data . : {
77         . = ALIGN(ARCH_CACHELINE_ALIGN_SIZE);
78         _data = .;
81  * The postcar phase uses a stack value that is located in the relocatable
82  * module section. While the postcar stage could be linked like smm and
83  * other rmodules the postcar stage needs similar semantics of the more
84  * traditional stages in the coreboot infrastructure. Therefore it's easier
85  * to specialize this case.
86  */
87 #if ENV_RMODULE || ENV_POSTCAR
88         _rmodule_params = .;
89         KEEP(*(.module_parameters));
90         _ermodule_params = .;
91         RECORD_SIZE(rmodule_params)
92 #endif
94         *(.data);
95         *(.data.*);
96         *(.sdata);
97         *(.sdata.*);
99 #if ENV_ROMSTAGE_OR_BEFORE
100         PROVIDE(_preram_cbmem_console = .);
101         PROVIDE(_epreram_cbmem_console = _preram_cbmem_console);
102         PROVIDE(_preram_cbmem_console_size = ABSOLUTE(0));
103 #elif ENV_RAMSTAGE
104         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
105         _bs_init_begin = .;
106         KEEP(*(.bs_init));
107         LONG(0);
108         LONG(0);
109         _ebs_init_begin = .;
110         RECORD_SIZE(bs_init_begin)
111 #endif
113         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
114         _edata = .;
115         RECORD_SIZE(data)
117 #endif
119 #if !ENV_SEPARATE_BSS
120 .bss . : {
121         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
122         _bss = .;
123         *(.bss)
124         *(.bss.*)
125         *(.sbss)
126         *(.sbss.*)
127         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
128         _ebss = .;
129         RECORD_SIZE(bss)
131 #endif
133 #if ENV_HAS_HEAP_SECTION
134 .heap . : {
135         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
136         _heap = .;
137         . += (ENV_RMODULE ? __heap_size : CONFIG_HEAP_SIZE);
138         . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
139         _eheap = .;
140         RECORD_SIZE(heap)
142 #endif
144 #if ENV_RAMSTAGE && CONFIG(ASAN_IN_RAMSTAGE)
145         _shadow_size = (_eheap - _data) >> 3;
146         REGION(asan_shadow, ., _shadow_size, ARCH_POINTER_ALIGN_SIZE)
147 #endif
149 _eprogram = .;
150 RECORD_SIZE(program)
152 /* Discard the sections we don't need/want */
154 zeroptr = 0;
156 /DISCARD/ : {
157         *(.comment)
158         *(.comment.*)
159         *(.note)
160         *(.note.*)
161         *(.eh_frame);