aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/skiboot.lds.S
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/skiboot.lds.S
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/skiboot.lds.S')
-rw-r--r--roms/skiboot/skiboot.lds.S258
1 files changed, 258 insertions, 0 deletions
diff --git a/roms/skiboot/skiboot.lds.S b/roms/skiboot/skiboot.lds.S
new file mode 100644
index 000000000..5a7f9e316
--- /dev/null
+++ b/roms/skiboot/skiboot.lds.S
@@ -0,0 +1,258 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/*
+ * Copyright 2013-2019 IBM Corp.
+ */
+
+#include <config.h>
+#include <mem-map.h>
+
+/* Debug sections from binutils `ld --verbose` */
+
+#define DEBUG_SECTIONS \
+ /* Stabs debugging sections. */ \
+ .stab 0 : { *(.stab) } \
+ .stabstr 0 : { *(.stabstr) } \
+ .stab.excl 0 : { *(.stab.excl) } \
+ .stab.exclstr 0 : { *(.stab.exclstr) } \
+ .stab.index 0 : { *(.stab.index) } \
+ .stab.indexstr 0 : { *(.stab.indexstr) } \
+ .comment 0 : { *(.comment) } \
+ /* DWARF debug sections. \
+ Symbols in the DWARF debugging sections are relative to the beginning \
+ of the section so we begin them at 0. */ \
+ /* DWARF 1 */ \
+ .debug 0 : { *(.debug) } \
+ .line 0 : { *(.line) } \
+ /* GNU DWARF 1 extensions */ \
+ .debug_srcinfo 0 : { *(.debug_srcinfo) } \
+ .debug_sfnames 0 : { *(.debug_sfnames) } \
+ /* DWARF 1.1 and DWARF 2 */ \
+ .debug_aranges 0 : { *(.debug_aranges) } \
+ .debug_pubnames 0 : { *(.debug_pubnames) } \
+ /* DWARF 2 */ \
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } \
+ .debug_abbrev 0 : { *(.debug_abbrev) } \
+ .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } \
+ .debug_frame 0 : { *(.debug_frame) } \
+ .debug_str 0 : { *(.debug_str) } \
+ .debug_loc 0 : { *(.debug_loc) } \
+ .debug_macinfo 0 : { *(.debug_macinfo) } \
+ /* SGI/MIPS DWARF 2 extensions */ \
+ .debug_weaknames 0 : { *(.debug_weaknames) } \
+ .debug_funcnames 0 : { *(.debug_funcnames) } \
+ .debug_typenames 0 : { *(.debug_typenames) } \
+ .debug_varnames 0 : { *(.debug_varnames) } \
+ /* DWARF 3 */ \
+ .debug_pubtypes 0 : { *(.debug_pubtypes) } \
+ .debug_ranges 0 : { *(.debug_ranges) } \
+ /* DWARF Extension. */ \
+ .debug_macro 0 : { *(.debug_macro) } \
+ .debug_addr 0 : { *(.debug_addr) }
+
+ENTRY(boot_entry);
+SECTIONS
+{
+ _start = .;
+ . = 0;
+
+ .head : {
+ KEEP(*(.head))
+ }
+
+ . = NACA_OFF;
+ .naca : {
+ KEEP(*(.naca.data))
+ }
+
+ . = SPIRA_OFF;
+ .spira : {
+ KEEP(*(.spira.data))
+ }
+
+ . = SPIRAH_OFF;
+ .spirah : {
+ KEEP(*(.spirah.data))
+ }
+
+ _head_end = .;
+ . = ALIGN(PAGE_SIZE);
+
+ /*
+ * The following sections are read-write at runtime. We need
+ * to skip over them when checksumming the skiboot images
+ * before a fast-reboot.
+ */
+ . = PROC_DUMP_AREA_OFF;
+ .procdump : {
+ KEEP(*(.procdump.data))
+ }
+
+ . = PROCIN_OFF;
+ .procin.data : {
+ KEEP(*(.procin.data))
+ }
+
+ . = MDST_TABLE_OFF;
+ .mdst : {
+ KEEP(*(.mdst.data))
+ }
+
+ . = MDDT_TABLE_OFF;
+ .mddt : {
+ KEEP(*(.mddt.data))
+ }
+
+ . = CPU_CTL_OFF;
+ .cpuctrl : {
+ KEEP(*(.cpuctrl.data))
+ }
+
+ /* ...and back to RO */
+ . = ALIGN(PAGE_SIZE);
+ _stext = .;
+ .text : {
+ *(.text*)
+ *(.sfpr .glink)
+ }
+ _etext = .;
+ . = ALIGN(PAGE_SIZE);
+
+ .rodata : {
+ __rodata_start = .;
+ *(.rodata .rodata.*)
+ __rodata_end = .;
+ }
+
+ . = ALIGN(0x10);
+ .trap_table : {
+ __trap_table_start = .;
+ KEEP(*(.trap_table))
+ __trap_table_end = .;
+ }
+
+ . = ALIGN(0x10);
+ .init : {
+ __ctors_start = .;
+ KEEP(*(.ctors*))
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ __ctors_end = .;
+ }
+
+ . = ALIGN(0x10);
+ .opd : {
+ *(.opd)
+ }
+
+ . = ALIGN(0x100);
+ .got : {
+ __toc_start = . + 0x8000;
+ *(.got)
+ *(.toc)
+ }
+
+ . = ALIGN(0x10);
+ .opal_table : {
+ __opal_table_start = .;
+ KEEP(*(.opal_table))
+ __opal_table_end = .;
+ }
+
+ .platforms : {
+ __platforms_start = .;
+ KEEP(*(.platforms))
+ __platforms_end = .;
+ }
+
+ /* Relocations */
+ . = ALIGN(0x10);
+ .dynamic : {
+ __dynamic_start = .;
+ *(.dynamic)
+ __dynamic_end = .;
+ }
+
+ . = ALIGN(0x10);
+ .rela.dyn : {
+ __rela_dyn_start = .;
+ *(.rela*)
+ __rela_dyn_end = .;
+ }
+
+ .hash : { *(.hash) }
+ .gnu.hash : { *(.gnu.hash) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+
+ . = ALIGN(0x10);
+ .sym_map : {
+ __sym_map_start = . ;
+ KEEP(*(.sym_map))
+ __sym_map_end = . ;
+ }
+
+ /*
+ * Memory above this point should be un-changing after the OS
+ * boots, and is verified with a checksum upon fast reboot.
+ */
+ _romem_end = .;
+
+ . = ALIGN(PAGE_SIZE);
+
+ _sdata = .;
+ .data : {
+ /*
+ * A couple of things that need to be 4K aligned and
+ * to reside in their own pages for the sake of TCE
+ * mappings, so use PAGE_SIZE alignment.
+ */
+ . = ALIGN(PAGE_SIZE);
+ *(.data.memcons);
+ . = ALIGN(PAGE_SIZE);
+ *(.data.boot_trace);
+ . = ALIGN(PAGE_SIZE);
+ *(.data*)
+ *(.force.data)
+ *(.toc1)
+ *(.branch_lt)
+ }
+ _edata = .;
+
+ /* We locate the BSS at 5M to leave room for the symbol map */
+ . = 0x500000;
+
+ _sbss = .;
+ .bss : {
+ *(.dynbss)
+ *(.bss*)
+ }
+ . = ALIGN(PAGE_SIZE);
+ _ebss = .;
+ _end = .;
+
+ ASSERT((HEAP_BASE - SKIBOOT_BASE) >= _end, "Heap collision with image")
+
+ /* Optional kernel image */
+ . = ALIGN(PAGE_SIZE);
+ .builtin_kernel : {
+ __builtin_kernel_start = .;
+ KEEP(*(.builtin_kernel))
+ __builtin_kernel_end = .;
+ }
+
+ DEBUG_SECTIONS
+
+ /* Discards */
+ /DISCARD/ : {
+ *(.note.GNU-stack)
+ *(.comment)
+ *(.eh_frame)
+ *(.interp)
+ *(.fini_array.*)
+ *(.dynsym)
+ *(.dynstr)
+ *(.plt)
+ *(.iplt)
+ }
+}