linux/arch/x86/boot/compressed/vmlinux.lds.S
<<
>>
Prefs
   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