2 * This file is part of the coreboot project.
4 * Copyright 2015 Google Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
16 #include <memlayout.h>
18 /* This file is included inside a SECTIONS block */
20 /* First we place the code and read only data (typically const declared).
21 * This could theoretically be placed in rom.
22 * The '.' in '.text . : {' is actually significant to prevent missing some
23 * SoC's entry points due to artificial alignment restrictions, see
24 * https://sourceware.org/binutils/docs/ld/Output-Section-Address.html
30 * The .rom.* sections are to acommodate x86 romstage. romcc as well
31 * as the assembly files put their text and data in these sections.
41 #if ENV_RAMSTAGE || ENV_ROMSTAGE
42 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
43 _cbmem_init_hooks = .;
44 KEEP(*(.rodata.cbmem_init_hooks));
45 _ecbmem_init_hooks = .;
49 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
51 KEEP(*(.rodata.pci_driver));
53 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
55 KEEP(*(.rodata.cpu_driver));
59 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
62 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
66 #if ENV_RAMSTAGE && IS_ENABLED(CONFIG_COVERAGE)
77 /* Include data, bss, and heap in that order. Not defined for all stages. */
78 #if ARCH_STAGE_HAS_DATA_SECTION
80 . = ALIGN(ARCH_CACHELINE_ALIGN_SIZE);
85 KEEP(*(.module_parameters));
93 PROVIDE(_preram_cbmem_console = .);
94 PROVIDE(_epreram_cbmem_console = _preram_cbmem_console);
96 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
104 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
109 #if ARCH_STAGE_HAS_BSS_SECTION
111 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
117 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
122 #if ARCH_STAGE_HAS_HEAP_SECTION
124 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
126 . += (ENV_RMODULE ? __heap_size : CONFIG_HEAP_SIZE);
127 . = ALIGN(ARCH_POINTER_ALIGN_SIZE);
134 /* Discard the sections we don't need/want */