linux/arch/mips/kernel/vmlinux.lds.S
<<
>>
Prefs
   1#include <asm/asm-offsets.h>
   2#include <asm/thread_info.h>
   3
   4#define PAGE_SIZE _PAGE_SIZE
   5
   6/*
   7 * Put .bss..swapper_pg_dir as the first thing in .bss. This will
   8 * ensure that it has .bss alignment (64K).
   9 */
  10#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
  11
  12#include <asm-generic/vmlinux.lds.h>
  13
  14#undef mips
  15#define mips mips
  16OUTPUT_ARCH(mips)
  17ENTRY(kernel_entry)
  18PHDRS {
  19        text PT_LOAD FLAGS(7);  /* RWX */
  20#ifndef CONFIG_CAVIUM_OCTEON_SOC
  21        note PT_NOTE FLAGS(4);  /* R__ */
  22#endif /* CAVIUM_OCTEON_SOC */
  23}
  24
  25#ifdef CONFIG_32BIT
  26        #ifdef CONFIG_CPU_LITTLE_ENDIAN
  27                jiffies  = jiffies_64;
  28        #else
  29                jiffies  = jiffies_64 + 4;
  30        #endif
  31#else
  32        jiffies  = jiffies_64;
  33#endif
  34
  35SECTIONS
  36{
  37#ifdef CONFIG_BOOT_ELF64
  38        /* Read-only sections, merged into text segment: */
  39        /* . = 0xc000000000000000; */
  40
  41        /* This is the value for an Origin kernel, taken from an IRIX kernel.  */
  42        /* . = 0xc00000000001c000; */
  43
  44        /* Set the vaddr for the text segment to a value
  45         *   >= 0xa800 0000 0001 9000 if no symmon is going to configured
  46         *   >= 0xa800 0000 0030 0000 otherwise
  47         */
  48
  49        /* . = 0xa800000000300000; */
  50        . = 0xffffffff80300000;
  51#endif
  52        . = VMLINUX_LOAD_ADDRESS;
  53        /* read-only */
  54        _text = .;      /* Text and read-only data */
  55        .text : {
  56                TEXT_TEXT
  57                SCHED_TEXT
  58                LOCK_TEXT
  59                KPROBES_TEXT
  60                IRQENTRY_TEXT
  61                *(.text.*)
  62                *(.fixup)
  63                *(.gnu.warning)
  64        } :text = 0
  65        _etext = .;     /* End of text section */
  66
  67        EXCEPTION_TABLE(16)
  68
  69        /* Exception table for data bus errors */
  70        __dbe_table : {
  71                __start___dbe_table = .;
  72                *(__dbe_table)
  73                __stop___dbe_table = .;
  74        }
  75
  76#ifdef CONFIG_CAVIUM_OCTEON_SOC
  77#define NOTES_HEADER
  78#else /* CONFIG_CAVIUM_OCTEON_SOC */
  79#define NOTES_HEADER :note
  80#endif /* CONFIG_CAVIUM_OCTEON_SOC */
  81        NOTES :text NOTES_HEADER
  82        .dummy : { *(.dummy) } :text
  83
  84        _sdata = .;                     /* Start of data section */
  85        RODATA
  86
  87        /* writeable */
  88        .data : {       /* Data */
  89                . = . + DATAOFFSET;             /* for CONFIG_MAPPED_KERNEL */
  90
  91                INIT_TASK_DATA(THREAD_SIZE)
  92                NOSAVE_DATA
  93                CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
  94                READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
  95                DATA_DATA
  96                CONSTRUCTORS
  97        }
  98        _gp = . + 0x8000;
  99        .lit8 : {
 100                *(.lit8)
 101        }
 102        .lit4 : {
 103                *(.lit4)
 104        }
 105        /* We want the small data sections together, so single-instruction offsets
 106           can access them all, and initialized data all before uninitialized, so
 107           we can shorten the on-disk segment size.  */
 108        .sdata : {
 109                *(.sdata)
 110        }
 111        _edata =  .;                    /* End of data section */
 112
 113        /* will be freed after init */
 114        . = ALIGN(PAGE_SIZE);           /* Init code and data */
 115        __init_begin = .;
 116        INIT_TEXT_SECTION(PAGE_SIZE)
 117        INIT_DATA_SECTION(16)
 118
 119        . = ALIGN(4);
 120        .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) {
 121                __mips_machines_start = .;
 122                *(.mips.machines.init)
 123                __mips_machines_end = .;
 124        }
 125
 126        /* .exit.text is discarded at runtime, not link time, to deal with
 127         * references from .rodata
 128         */
 129        .exit.text : {
 130                EXIT_TEXT
 131        }
 132        .exit.data : {
 133                EXIT_DATA
 134        }
 135#ifdef CONFIG_SMP
 136        PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
 137#endif
 138#ifdef CONFIG_MIPS_RAW_APPENDED_DTB
 139        __appended_dtb = .;
 140        /* leave space for appended DTB */
 141        . += 0x100000;
 142#elif defined(CONFIG_MIPS_ELF_APPENDED_DTB)
 143        .appended_dtb : AT(ADDR(.appended_dtb) - LOAD_OFFSET) {
 144                *(.appended_dtb)
 145                KEEP(*(.appended_dtb))
 146        }
 147#endif
 148        /*
 149         * Align to 64K in attempt to eliminate holes before the
 150         * .bss..swapper_pg_dir section at the start of .bss.  This
 151         * also satisfies PAGE_SIZE alignment as the largest page size
 152         * allowed is 64K.
 153         */
 154        . = ALIGN(0x10000);
 155        __init_end = .;
 156        /* freed after init ends here */
 157
 158        /*
 159         * Force .bss to 64K alignment so that .bss..swapper_pg_dir
 160         * gets that alignment.  .sbss should be empty, so there will be
 161         * no holes after __init_end. */
 162        BSS_SECTION(0, 0x10000, 0)
 163
 164        _end = . ;
 165
 166        /* These mark the ABI of the kernel for debuggers.  */
 167        .mdebug.abi32 : {
 168                KEEP(*(.mdebug.abi32))
 169        }
 170        .mdebug.abi64 : {
 171                KEEP(*(.mdebug.abi64))
 172        }
 173
 174        /* This is the MIPS specific mdebug section.  */
 175        .mdebug : {
 176                *(.mdebug)
 177        }
 178
 179        STABS_DEBUG
 180        DWARF_DEBUG
 181
 182        /* These must appear regardless of  .  */
 183        .gptab.sdata : {
 184                *(.gptab.data)
 185                *(.gptab.sdata)
 186        }
 187        .gptab.sbss : {
 188                *(.gptab.bss)
 189                *(.gptab.sbss)
 190        }
 191
 192        /* Sections to be discarded */
 193        DISCARDS
 194        /DISCARD/ : {
 195                /* ABI crap starts here */
 196                *(.MIPS.abiflags)
 197                *(.MIPS.options)
 198                *(.options)
 199                *(.pdr)
 200                *(.reginfo)
 201                *(.eh_frame)
 202        }
 203}
 204