linux/arch/arm/kernel/vmlinux.lds.S
<<
>>
Prefs
   1/* ld script to make ARM Linux kernel
   2 * taken from the i386 version by Russell King
   3 * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
   4 */
   5
   6#include <asm-generic/vmlinux.lds.h>
   7#include <asm/thread_info.h>
   8#include <asm/memory.h>
   9        
  10OUTPUT_ARCH(arm)
  11ENTRY(stext)
  12
  13#ifndef __ARMEB__
  14jiffies = jiffies_64;
  15#else
  16jiffies = jiffies_64 + 4;
  17#endif
  18
  19SECTIONS
  20{
  21#ifdef CONFIG_XIP_KERNEL
  22        . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);
  23#else
  24        . = PAGE_OFFSET + TEXT_OFFSET;
  25#endif
  26        .text.head : {
  27                _stext = .;
  28                _sinittext = .;
  29                *(.text.head)
  30        }
  31
  32        .init : {                       /* Init code and data           */
  33                        INIT_TEXT
  34                _einittext = .;
  35                __proc_info_begin = .;
  36                        *(.proc.info.init)
  37                __proc_info_end = .;
  38                __arch_info_begin = .;
  39                        *(.arch.info.init)
  40                __arch_info_end = .;
  41                __tagtable_begin = .;
  42                        *(.taglist.init)
  43                __tagtable_end = .;
  44                . = ALIGN(16);
  45                __setup_start = .;
  46                        *(.init.setup)
  47                __setup_end = .;
  48                __early_begin = .;
  49                        *(.early_param.init)
  50                __early_end = .;
  51                __initcall_start = .;
  52                        INITCALLS
  53                __initcall_end = .;
  54                __con_initcall_start = .;
  55                        *(.con_initcall.init)
  56                __con_initcall_end = .;
  57                __security_initcall_start = .;
  58                        *(.security_initcall.init)
  59                __security_initcall_end = .;
  60#ifdef CONFIG_BLK_DEV_INITRD
  61                . = ALIGN(32);
  62                __initramfs_start = .;
  63                        usr/built-in.o(.init.ramfs)
  64                __initramfs_end = .;
  65#endif
  66                . = ALIGN(4096);
  67                __per_cpu_start = .;
  68                        *(.data.percpu)
  69                        *(.data.percpu.shared_aligned)
  70                __per_cpu_end = .;
  71#ifndef CONFIG_XIP_KERNEL
  72                __init_begin = _stext;
  73                INIT_DATA
  74                . = ALIGN(4096);
  75                __init_end = .;
  76#endif
  77        }
  78
  79        /DISCARD/ : {                   /* Exit code and data           */
  80                EXIT_TEXT
  81                EXIT_DATA
  82                *(.exitcall.exit)
  83#ifndef CONFIG_MMU
  84                *(.fixup)
  85                *(__ex_table)
  86#endif
  87        }
  88
  89        .text : {                       /* Real text segment            */
  90                _text = .;              /* Text and read-only data      */
  91                        __exception_text_start = .;
  92                        *(.exception.text)
  93                        __exception_text_end = .;
  94                        TEXT_TEXT
  95                        SCHED_TEXT
  96                        LOCK_TEXT
  97                        KPROBES_TEXT
  98#ifdef CONFIG_MMU
  99                        *(.fixup)
 100#endif
 101                        *(.gnu.warning)
 102                        *(.rodata)
 103                        *(.rodata.*)
 104                        *(.glue_7)
 105                        *(.glue_7t)
 106                *(.got)                 /* Global offset table          */
 107        }
 108
 109        RODATA
 110
 111        _etext = .;                     /* End of text and rodata section */
 112
 113#ifdef CONFIG_XIP_KERNEL
 114        __data_loc = ALIGN(4);          /* location in binary */
 115        . = PAGE_OFFSET + TEXT_OFFSET;
 116#else
 117        . = ALIGN(THREAD_SIZE);
 118        __data_loc = .;
 119#endif
 120
 121        .data : AT(__data_loc) {
 122                __data_start = .;       /* address in memory */
 123
 124                /*
 125                 * first, the init task union, aligned
 126                 * to an 8192 byte boundary.
 127                 */
 128                *(.data.init_task)
 129
 130#ifdef CONFIG_XIP_KERNEL
 131                . = ALIGN(4096);
 132                __init_begin = .;
 133                INIT_DATA
 134                . = ALIGN(4096);
 135                __init_end = .;
 136#endif
 137
 138                . = ALIGN(4096);
 139                __nosave_begin = .;
 140                *(.data.nosave)
 141                . = ALIGN(4096);
 142                __nosave_end = .;
 143
 144                /*
 145                 * then the cacheline aligned data
 146                 */
 147                . = ALIGN(32);
 148                *(.data.cacheline_aligned)
 149
 150                /*
 151                 * The exception fixup table (might need resorting at runtime)
 152                 */
 153                . = ALIGN(32);
 154                __start___ex_table = .;
 155#ifdef CONFIG_MMU
 156                *(__ex_table)
 157#endif
 158                __stop___ex_table = .;
 159
 160                /*
 161                 * and the usual data section
 162                 */
 163                DATA_DATA
 164                CONSTRUCTORS
 165
 166                _edata = .;
 167        }
 168        _edata_loc = __data_loc + SIZEOF(.data);
 169
 170        .bss : {
 171                __bss_start = .;        /* BSS                          */
 172                *(.bss)
 173                *(COMMON)
 174                _end = .;
 175        }
 176                                        /* Stabs debugging sections.    */
 177        .stab 0 : { *(.stab) }
 178        .stabstr 0 : { *(.stabstr) }
 179        .stab.excl 0 : { *(.stab.excl) }
 180        .stab.exclstr 0 : { *(.stab.exclstr) }
 181        .stab.index 0 : { *(.stab.index) }
 182        .stab.indexstr 0 : { *(.stab.indexstr) }
 183        .comment 0 : { *(.comment) }
 184}
 185
 186/*
 187 * These must never be empty
 188 * If you have to comment these two assert statements out, your
 189 * binutils is too old (for other reasons as well)
 190 */
 191ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
 192ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")
 193
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.