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