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