linux/arch/parisc/kernel/vmlinux.lds.S
<<
>>
Prefs
   1/*    Kernel link layout for various "sections"
   2 *
   3 *    Copyright (C) 1999-2003 Matthew Wilcox <willy at parisc-linux.org>
   4 *    Copyright (C) 2000-2003 Paul Bame <bame at parisc-linux.org>
   5 *    Copyright (C) 2000 John Marvin <jsm at parisc-linux.org>
   6 *    Copyright (C) 2000 Michael Ang <mang with subcarrier.org>
   7 *    Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
   8 *    Copyright (C) 2003 James Bottomley <jejb with parisc-linux.org>
   9 *    Copyright (C) 2006-2013 Helge Deller <deller@gmx.de>
  10 */
  11
  12/*
  13 * Put page table entries (swapper_pg_dir) as the first thing in .bss. This
  14 * will ensure that it has .bss alignment (PAGE_SIZE).
  15 */
  16#define BSS_FIRST_SECTIONS      *(.data..vm0.pmd) \
  17                                *(.data..vm0.pgd) \
  18                                *(.data..vm0.pte)
  19
  20#include <asm-generic/vmlinux.lds.h>
  21
  22/* needed for the processor specific cache alignment size */    
  23#include <asm/cache.h>
  24#include <asm/page.h>
  25#include <asm/asm-offsets.h>
  26#include <asm/thread_info.h>
  27        
  28/* ld script to make hppa Linux kernel */
  29#ifndef CONFIG_64BIT
  30OUTPUT_FORMAT("elf32-hppa-linux")
  31OUTPUT_ARCH(hppa)
  32#else
  33OUTPUT_FORMAT("elf64-hppa-linux")
  34OUTPUT_ARCH(hppa:hppa2.0w)
  35#endif
  36
  37ENTRY(parisc_kernel_start)
  38#ifndef CONFIG_64BIT
  39jiffies = jiffies_64 + 4;
  40#else
  41jiffies = jiffies_64;
  42#endif
  43SECTIONS
  44{
  45        . = KERNEL_BINARY_TEXT_START;
  46
  47        __init_begin = .;
  48        HEAD_TEXT_SECTION
  49        INIT_TEXT_SECTION(8)
  50
  51        . = ALIGN(PAGE_SIZE);
  52        INIT_DATA_SECTION(PAGE_SIZE)
  53        /* we have to discard exit text and such at runtime, not link time */
  54        .exit.text :
  55        {
  56                EXIT_TEXT
  57        }
  58        .exit.data :
  59        {
  60                EXIT_DATA
  61        }
  62        PERCPU_SECTION(8)
  63        . = ALIGN(HUGEPAGE_SIZE);
  64        __init_end = .;
  65        /* freed after init ends here */
  66
  67        _text = .;              /* Text and read-only data */
  68        _stext = .;
  69        .text ALIGN(PAGE_SIZE) : {
  70                TEXT_TEXT
  71                SCHED_TEXT
  72                CPUIDLE_TEXT
  73                LOCK_TEXT
  74                KPROBES_TEXT
  75                IRQENTRY_TEXT
  76                SOFTIRQENTRY_TEXT
  77                *(.text.do_softirq)
  78                *(.text.sys_exit)
  79                *(.text.do_sigaltstack)
  80                *(.text.do_fork)
  81                *(.text.*)
  82                *(.fixup)
  83                *(.lock.text)           /* out-of-line lock text */
  84                *(.gnu.warning)
  85        }
  86        . = ALIGN(PAGE_SIZE);
  87        _etext = .;
  88        /* End of text section */
  89
  90        /* Start of data section */
  91        _sdata = .;
  92
  93        /* Architecturally we need to keep __gp below 0x1000000 and thus
  94         * in front of RO_DATA_SECTION() which stores lots of tracepoint
  95         * and ftrace symbols. */
  96#ifdef CONFIG_64BIT
  97        . = ALIGN(16);
  98        /* Linkage tables */
  99        .opd : {
 100                *(.opd)
 101        } PROVIDE (__gp = .);
 102        .plt : {
 103                *(.plt)
 104        }
 105        .dlt : {
 106                *(.dlt)
 107        }
 108#endif
 109
 110        RO_DATA_SECTION(8)
 111
 112        /* RO because of BUILDTIME_EXTABLE_SORT */
 113        EXCEPTION_TABLE(8)
 114        NOTES
 115
 116        /* unwind info */
 117        .PARISC.unwind : {
 118                __start___unwind = .;
 119                *(.PARISC.unwind)
 120                __stop___unwind = .;
 121        }
 122
 123        /* writeable */
 124        /* Make sure this is page aligned so
 125         * that we can properly leave these
 126         * as writable
 127         */
 128        . = ALIGN(HUGEPAGE_SIZE);
 129        data_start = .;
 130
 131        /* Data */
 132        RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, PAGE_SIZE)
 133
 134        /* PA-RISC locks requires 16-byte alignment */
 135        . = ALIGN(16);
 136        .data..lock_aligned : {
 137                *(.data..lock_aligned)
 138        }
 139
 140        /* End of data section */
 141        _edata = .;
 142
 143        /* BSS */
 144        BSS_SECTION(PAGE_SIZE, PAGE_SIZE, PAGE_SIZE)
 145
 146        . = ALIGN(HUGEPAGE_SIZE);
 147        _end = . ;
 148
 149        STABS_DEBUG
 150        .note 0 : { *(.note) }
 151
 152        /* Sections to be discarded */
 153        DISCARDS
 154        /DISCARD/ : {
 155#ifdef CONFIG_64BIT
 156                /* temporary hack until binutils is fixed to not emit these
 157                 * for static binaries
 158                 */
 159                *(.interp)
 160                *(.dynsym)
 161                *(.dynstr)
 162                *(.dynamic)
 163                *(.hash)
 164                *(.gnu.hash)
 165#endif
 166        }
 167}
 168