1/* SPDX-License-Identifier: GPL-2.0 */ 2#include <asm-generic/vmlinux.lds.h> 3 4OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT) 5 6#undef i386 7 8#include <asm/cache.h> 9#include <asm/page_types.h> 10 11#ifdef CONFIG_X86_64 12OUTPUT_ARCH(i386:x86-64) 13ENTRY(startup_64) 14#else 15OUTPUT_ARCH(i386) 16ENTRY(startup_32) 17#endif 18 19SECTIONS 20{ 21 /* Be careful parts of head_64.S assume startup_32 is at 22 * address 0. 23 */ 24 . = 0; 25 .head.text : { 26 _head = . ; 27 HEAD_TEXT 28 _ehead = . ; 29 } 30 .rodata..compressed : { 31 *(.rodata..compressed) 32 } 33 .text : { 34 _text = .; /* Text */ 35 *(.text) 36 *(.text.*) 37 *(.noinstr.text) 38 _etext = . ; 39 } 40 .rodata : { 41 _rodata = . ; 42 *(.rodata) /* read-only data */ 43 *(.rodata.*) 44 _erodata = . ; 45 } 46 .data : ALIGN(0x1000) { 47 _data = . ; 48 *(.data) 49 *(.data.*) 50 51 /* Add 4 bytes of extra space for a CRC-32 checksum */ 52 . = ALIGN(. + 4, 0x200); 53 _edata = . ; 54 } 55 . = ALIGN(L1_CACHE_BYTES); 56 .bss : { 57 _bss = . ; 58 *(.bss) 59 *(.bss.*) 60 *(COMMON) 61 . = ALIGN(8); /* For convenience during zeroing */ 62 _ebss = .; 63 } 64#ifdef CONFIG_X86_64 65 . = ALIGN(PAGE_SIZE); 66 .pgtable : { 67 _pgtable = . ; 68 *(.pgtable) 69 _epgtable = . ; 70 } 71#endif 72 . = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */ 73 _end = .; 74 75 STABS_DEBUG 76 DWARF_DEBUG 77 ELF_DETAILS 78 79 DISCARDS 80 /DISCARD/ : { 81 *(.dynamic) *(.dynsym) *(.dynstr) *(.dynbss) 82 *(.hash) *(.gnu.hash) 83 *(.note.*) 84 } 85 86 .got.plt (INFO) : { 87 *(.got.plt) 88 } 89 ASSERT(SIZEOF(.got.plt) == 0 || 90#ifdef CONFIG_X86_64 91 SIZEOF(.got.plt) == 0x18, 92#else 93 SIZEOF(.got.plt) == 0xc, 94#endif 95 "Unexpected GOT/PLT entries detected!") 96 97 /* 98 * Sections that should stay zero sized, which is safer to 99 * explicitly check instead of blindly discarding. 100 */ 101 .got : { 102 *(.got) 103 } 104 ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!") 105 106 .plt : { 107 *(.plt) *(.plt.*) 108 } 109 ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!") 110 111 .rel.dyn : { 112 *(.rel.*) *(.rel_*) 113 } 114 ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!") 115 116 .rela.dyn : { 117 *(.rela.*) *(.rela_*) 118 } 119 ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!") 120} 121