root/arch/arc/kernel/vmlinux.lds.S

/* [<][>][^][v][top][bottom][index][help] */
   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 
  11 OUTPUT_ARCH(arc)
  12 ENTRY(res_service)
  13 
  14 #ifdef CONFIG_CPU_BIG_ENDIAN
  15 jiffies = jiffies_64 + 4;
  16 #else
  17 jiffies = jiffies_64;
  18 #endif
  19 
  20 SECTIONS
  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_SECTION(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_SECTION(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         NOTES
 122 
 123         . = ALIGN(PAGE_SIZE);
 124         _end = . ;
 125 
 126         STABS_DEBUG
 127         DISCARDS
 128 
 129         .arcextmap 0 : {
 130                 *(.gnu.linkonce.arcextmap.*)
 131                 *(.arcextmap.*)
 132         }
 133 
 134 #ifndef CONFIG_DEBUG_INFO
 135         /DISCARD/ : { *(.debug_frame) }
 136         /DISCARD/ : { *(.debug_aranges) }
 137         /DISCARD/ : { *(.debug_pubnames) }
 138         /DISCARD/ : { *(.debug_info) }
 139         /DISCARD/ : { *(.debug_abbrev) }
 140         /DISCARD/ : { *(.debug_line) }
 141         /DISCARD/ : { *(.debug_str) }
 142         /DISCARD/ : { *(.debug_loc) }
 143         /DISCARD/ : { *(.debug_macinfo) }
 144         /DISCARD/ : { *(.debug_ranges) }
 145 #endif
 146 
 147 #ifdef CONFIG_ARC_HAS_DCCM
 148         . = CONFIG_ARC_DCCM_BASE;
 149         __arc_dccm_base = .;
 150         .data.arcfp : {
 151                 *(.data.arcfp)
 152         }
 153         . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
 154 #endif
 155 }

/* [<][>][^][v][top][bottom][index][help] */