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
  61        HEAD_TEXT_SECTION
  62        INIT_TEXT_SECTION(L1_CACHE_BYTES)
  63
  64        /* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */
  65        .init.data : {
  66                INIT_DATA
  67                INIT_SETUP(L1_CACHE_BYTES)
  68                INIT_CALLS
  69                CON_INITCALL
  70        }
  71
  72        .init.arch.info : {
  73                __arch_info_begin = .;
  74                *(.arch.info.init)
  75                __arch_info_end = .;
  76        }
  77
  78        PERCPU_SECTION(L1_CACHE_BYTES)
  79
  80        . = ALIGN(PAGE_SIZE);
  81        __init_end = .;
  82
  83        .text : {
  84                _text = .;
  85                _stext = .;
  86                TEXT_TEXT
  87                SCHED_TEXT
  88                CPUIDLE_TEXT
  89                LOCK_TEXT
  90                KPROBES_TEXT
  91                IRQENTRY_TEXT
  92                SOFTIRQENTRY_TEXT
  93                *(.fixup)
  94                *(.gnu.warning)
  95        }
  96        EXCEPTION_TABLE(L1_CACHE_BYTES)
  97        _etext = .;
  98
  99        _sdata = .;
 100        RO_DATA(PAGE_SIZE)
 101
 102        /*
 103         * 1. this is .data essentially
 104         * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
 105         */
 106        RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
 107
 108        _edata = .;
 109
 110        BSS_SECTION(4, 4, 4)
 111
 112#ifdef CONFIG_ARC_DW2_UNWIND
 113        . = ALIGN(PAGE_SIZE);
 114        .eh_frame  : {
 115                __start_unwind = .;
 116                *(.eh_frame)
 117                __end_unwind = .;
 118        }
 119#else
 120        /DISCARD/ : {   *(.eh_frame) }
 121#endif
 122
 123        . = ALIGN(PAGE_SIZE);
 124        _end = . ;
 125
 126        STABS_DEBUG
 127        ELF_DETAILS
 128        DISCARDS
 129
 130        .arcextmap 0 : {
 131                *(.gnu.linkonce.arcextmap.*)
 132                *(.arcextmap.*)
 133        }
 134
 135#ifndef CONFIG_DEBUG_INFO
 136        /DISCARD/ : { *(.debug_frame) }
 137        /DISCARD/ : { *(.debug_aranges) }
 138        /DISCARD/ : { *(.debug_pubnames) }
 139        /DISCARD/ : { *(.debug_info) }
 140        /DISCARD/ : { *(.debug_abbrev) }
 141        /DISCARD/ : { *(.debug_line) }
 142        /DISCARD/ : { *(.debug_str) }
 143        /DISCARD/ : { *(.debug_loc) }
 144        /DISCARD/ : { *(.debug_macinfo) }
 145        /DISCARD/ : { *(.debug_ranges) }
 146#endif
 147
 148#ifdef CONFIG_ARC_HAS_DCCM
 149        . = CONFIG_ARC_DCCM_BASE;
 150        __arc_dccm_base = .;
 151        .data.arcfp : {
 152                *(.data.arcfp)
 153        }
 154        . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
 155#endif
 156}
 157