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 _etext = . ; 38 } 39 .rodata : { 40 _rodata = . ; 41 *(.rodata) /* read-only data */ 42 *(.rodata.*) 43 _erodata = . ; 44 } 45 .data : { 46 _data = . ; 47 *(.data) 48 *(.data.*) 49 *(.bss.efistub) 50 _edata = . ; 51 } 52 . = ALIGN(L1_CACHE_BYTES); 53 .bss : { 54 _bss = . ; 55 *(.bss) 56 *(.bss.*) 57 *(COMMON) 58 . = ALIGN(8); /* For convenience during zeroing */ 59 _ebss = .; 60 } 61#ifdef CONFIG_X86_64 62 . = ALIGN(PAGE_SIZE); 63 .pgtable : { 64 _pgtable = . ; 65 *(.pgtable) 66 _epgtable = . ; 67 } 68#endif 69 . = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */ 70 _end = .; 71 72 STABS_DEBUG 73 DWARF_DEBUG 74 ELF_DETAILS 75 76 DISCARDS 77 /DISCARD/ : { 78 *(.dynamic) *(.dynsym) *(.dynstr) *(.dynbss) 79 *(.hash) *(.gnu.hash) 80 *(.note.*) 81 } 82 83 .got.plt (INFO) : { 84 *(.got.plt) 85 } 86 ASSERT(SIZEOF(.got.plt) == 0 || 87#ifdef CONFIG_X86_64 88 SIZEOF(.got.plt) == 0x18, 89#else 90 SIZEOF(.got.plt) == 0xc, 91#endif 92 "Unexpected GOT/PLT entries detected!") 93 94 /* 95 * Sections that should stay zero sized, which is safer to 96 * explicitly check instead of blindly discarding. 97 */ 98 .got : { 99 *(.got) 100 } 101 ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!") 102 103 .plt : { 104 *(.plt) *(.plt.*) 105 } 106 ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!") 107 108 .rel.dyn : { 109 *(.rel.*) *(.rel_*) 110 } 111 ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!") 112 113 .rela.dyn : { 114 *(.rela.*) *(.rela_*) 115 } 116 ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!") 117} 118