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(res_service)
  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        . = ALIGN(PAGE_SIZE);
  86        __init_end = .;
  87
  88        .text : {
  89                _text = .;
  90                TEXT_TEXT
  91                SCHED_TEXT
  92                CPUIDLE_TEXT
  93                LOCK_TEXT
  94                KPROBES_TEXT
  95                *(.fixup)
  96                *(.gnu.warning)
  97        }
  98        EXCEPTION_TABLE(L1_CACHE_BYTES)
  99        _etext = .;
 100
 101        _sdata = .;
 102        RO_DATA_SECTION(PAGE_SIZE)
 103
 104        /*
 105         * 1. this is .data essentially
 106         * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
 107         */
 108        RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
 109
 110        _edata = .;
 111
 112        BSS_SECTION(4, 4, 4)
 113
 114#ifdef CONFIG_ARC_DW2_UNWIND
 115        . = ALIGN(PAGE_SIZE);
 116        .eh_frame  : {
 117                __start_unwind = .;
 118                *(.eh_frame)
 119                __end_unwind = .;
 120        }
 121#else
 122        /DISCARD/ : {   *(.eh_frame) }
 123#endif
 124
 125        NOTES
 126
 127        . = ALIGN(PAGE_SIZE);
 128        _end = . ;
 129
 130        STABS_DEBUG
 131        DISCARDS
 132
 133        .arcextmap 0 : {
 134                *(.gnu.linkonce.arcextmap.*)
 135                *(.arcextmap.*)
 136        }
 137
 138#ifndef CONFIG_DEBUG_INFO
 139        /DISCARD/ : { *(.debug_frame) }
 140        /DISCARD/ : { *(.debug_aranges) }
 141        /DISCARD/ : { *(.debug_pubnames) }
 142        /DISCARD/ : { *(.debug_info) }
 143        /DISCARD/ : { *(.debug_abbrev) }
 144        /DISCARD/ : { *(.debug_line) }
 145        /DISCARD/ : { *(.debug_str) }
 146        /DISCARD/ : { *(.debug_loc) }
 147        /DISCARD/ : { *(.debug_macinfo) }
 148        /DISCARD/ : { *(.debug_ranges) }
 149#endif
 150
 151#ifdef CONFIG_ARC_HAS_DCCM
 152        . = CONFIG_ARC_DCCM_BASE;
 153        __arc_dccm_base = .;
 154        .data.arcfp : {
 155                *(.data.arcfp)
 156        }
 157        . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
 158#endif
 159}
 160