linux/arch/arc/kernel/vmlinux.lds.S
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 */
   8
   9#include <asm-generic/vmlinux.lds.h>
  10#include <asm/cache.h>
  11#include <asm/page.h>
  12#include <asm/thread_info.h>
  13
  14OUTPUT_ARCH(arc)
  15ENTRY(_stext)
  16
  17#ifdef CONFIG_CPU_BIG_ENDIAN
  18jiffies = jiffies_64 + 4;
  19#else
  20jiffies = jiffies_64;
  21#endif
  22
  23SECTIONS
  24{
  25        /*
  26         * ICCM starts at 0x8000_0000. So if kernel is relocated to some other
  27         * address, make sure peripheral at 0x8z doesn't clash with ICCM
  28         * Essentially vector is also in ICCM.
  29         */
  30
  31        . = CONFIG_LINUX_LINK_BASE;
  32
  33        _int_vec_base_lds = .;
  34        .vector : {
  35                *(.vector)
  36                . = ALIGN(PAGE_SIZE);
  37        }
  38
  39#ifdef CONFIG_ARC_HAS_ICCM
  40        .text.arcfp : {
  41                *(.text.arcfp)
  42                . = ALIGN(CONFIG_ARC_ICCM_SZ * 1024);
  43        }
  44#endif
  45
  46        /*
  47         * The reason for having a seperate subsection .init.ramfs is to
  48         * prevent objump from including it in kernel dumps
  49         *
  50         * Reason for having .init.ramfs above .init is to make sure that the
  51         * binary blob is tucked away to one side, reducing the displacement
  52         * between .init.text and .text, avoiding any possible relocation
  53         * errors because of calls from .init.text to .text
  54         * Yes such calls do exist. e.g.
  55         *      decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( )
  56         */
  57
  58        __init_begin = .;
  59
  60        .init.ramfs : { INIT_RAM_FS }
  61
  62        . = ALIGN(PAGE_SIZE);
  63        _stext = .;
  64
  65        HEAD_TEXT_SECTION
  66        INIT_TEXT_SECTION(L1_CACHE_BYTES)
  67
  68        /* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */
  69        .init.data : {
  70                INIT_DATA
  71                INIT_SETUP(L1_CACHE_BYTES)
  72                INIT_CALLS
  73                CON_INITCALL
  74                SECURITY_INITCALL
  75        }
  76
  77        .init.arch.info : {
  78                __arch_info_begin = .;
  79                *(.arch.info.init)
  80                __arch_info_end = .;
  81        }
  82
  83        PERCPU_SECTION(L1_CACHE_BYTES)
  84
  85        /*
  86         * .exit.text is discard at runtime, not link time, to deal with
  87         * references from .debug_frame
  88         * It will be init freed, being inside [__init_start : __init_end]
  89         */
  90        .exit.text : { EXIT_TEXT }
  91        .exit.data : { EXIT_DATA }
  92
  93        . = ALIGN(PAGE_SIZE);
  94        __init_end = .;
  95
  96        .text : {
  97                _text = .;
  98                TEXT_TEXT
  99                SCHED_TEXT
 100                LOCK_TEXT
 101                KPROBES_TEXT
 102                *(.fixup)
 103                *(.gnu.warning)
 104        }
 105        EXCEPTION_TABLE(L1_CACHE_BYTES)
 106        _etext = .;
 107
 108        _sdata = .;
 109        RO_DATA_SECTION(PAGE_SIZE)
 110
 111        /*
 112         * 1. this is .data essentially
 113         * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
 114         */
 115        RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
 116
 117        _edata = .;
 118
 119        BSS_SECTION(0, 0, 0)
 120
 121#ifdef CONFIG_ARC_DW2_UNWIND
 122        . = ALIGN(PAGE_SIZE);
 123        .debug_frame  : {
 124                __start_unwind = .;
 125                *(.debug_frame)
 126                __end_unwind = .;
 127        }
 128#else
 129        /DISCARD/ : {   *(.debug_frame) }
 130#endif
 131
 132        NOTES
 133
 134        . = ALIGN(PAGE_SIZE);
 135        _end = . ;
 136
 137        STABS_DEBUG
 138        DISCARDS
 139
 140        .arcextmap 0 : {
 141                *(.gnu.linkonce.arcextmap.*)
 142                *(.arcextmap.*)
 143        }
 144
 145        /* open-coded because we need .debug_frame seperately for unwinding */
 146        .debug_aranges 0 : { *(.debug_aranges) }
 147        .debug_pubnames 0 : { *(.debug_pubnames) }
 148        .debug_info 0 : { *(.debug_info) }
 149        .debug_abbrev 0 : { *(.debug_abbrev) }
 150        .debug_line 0 : { *(.debug_line) }
 151        .debug_str 0 : { *(.debug_str) }
 152        .debug_loc 0 : { *(.debug_loc) }
 153        .debug_macinfo 0 : { *(.debug_macinfo) }
 154
 155#ifdef CONFIG_ARC_HAS_DCCM
 156        . = CONFIG_ARC_DCCM_BASE;
 157        __arc_dccm_base = .;
 158        .data.arcfp : {
 159                *(.data.arcfp)
 160        }
 161        . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
 162#endif
 163}
 164