// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later /* * Copyright 2013-2019 IBM Corp. */ #include #include /* 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 5 */ \ .debug_macro 0 : { *(.debug_macro) } \ .debug_addr 0 : { *(.debug_addr) } \ .debug_rnglists 0 : { *(.debug_rnglists) } \ .debug_loclists 0 : { *(.debug_loclists) } ENTRY(boot_entry); SECTIONS { _start = .; . = 0; .head : { KEEP(*(.head)) } . = NACA_OFF; .naca : { KEEP(*(.naca.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 = .; } .hwprobes : { __hwprobes_start = .; KEEP(*(.hwprobes)) __hwprobes_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) } }