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        /*
 129         * gcc 4.8 generates this for -fasynchonous-unwind-tables,
 130         * while we still use the .debug_frame based unwinder
 131         */
 132        /DISCARD/ : {   *(.eh_frame) }
 133#else
 134        /DISCARD/ : {   *(.debug_frame) }
 135#endif
 136
 137        NOTES
 138
 139        . = ALIGN(PAGE_SIZE);
 140        _end = . ;
 141
 142        STABS_DEBUG
 143        DISCARDS
 144
 145        .arcextmap 0 : {
 146                *(.gnu.linkonce.arcextmap.*)
 147                *(.arcextmap.*)
 148        }
 149
 150#ifndef CONFIG_DEBUG_INFO
 151        /* open-coded because we need .debug_frame seperately for unwinding */
 152        /DISCARD/ : { *(.debug_aranges) }
 153        /DISCARD/ : { *(.debug_pubnames) }
 154        /DISCARD/ : { *(.debug_info) }
 155        /DISCARD/ : { *(.debug_abbrev) }
 156        /DISCARD/ : { *(.debug_line) }
 157        /DISCARD/ : { *(.debug_str) }
 158        /DISCARD/ : { *(.debug_loc) }
 159        /DISCARD/ : { *(.debug_macinfo) }
 160        /DISCARD/ : { *(.debug_ranges) }
 161#endif
 162
 163#ifdef CONFIG_ARC_HAS_DCCM
 164        . = CONFIG_ARC_DCCM_BASE;
 165        __arc_dccm_base = .;
 166        .data.arcfp : {
 167                *(.data.arcfp)
 168        }
 169        . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
 170#endif
 171}
 172