Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
0004  */
0005 
0006 #include <asm-generic/vmlinux.lds.h>
0007 #include <asm/cache.h>
0008 #include <asm/page.h>
0009 #include <asm/thread_info.h>
0010 
0011 OUTPUT_ARCH(arc)
0012 ENTRY(res_service)
0013 
0014 #ifdef CONFIG_CPU_BIG_ENDIAN
0015 jiffies = jiffies_64 + 4;
0016 #else
0017 jiffies = jiffies_64;
0018 #endif
0019 
0020 SECTIONS
0021 {
0022     /*
0023      * ICCM starts at 0x8000_0000. So if kernel is relocated to some other
0024      * address, make sure peripheral at 0x8z doesn't clash with ICCM
0025      * Essentially vector is also in ICCM.
0026      */
0027 
0028     . = CONFIG_LINUX_LINK_BASE;
0029 
0030     _int_vec_base_lds = .;
0031     .vector : {
0032         *(.vector)
0033         . = ALIGN(PAGE_SIZE);
0034     }
0035 
0036 #ifdef CONFIG_ARC_HAS_ICCM
0037     .text.arcfp : {
0038         *(.text.arcfp)
0039         . = ALIGN(CONFIG_ARC_ICCM_SZ * 1024);
0040     }
0041 #endif
0042 
0043     /*
0044      * The reason for having a seperate subsection .init.ramfs is to
0045      * prevent objump from including it in kernel dumps
0046      *
0047      * Reason for having .init.ramfs above .init is to make sure that the
0048      * binary blob is tucked away to one side, reducing the displacement
0049      * between .init.text and .text, avoiding any possible relocation
0050      * errors because of calls from .init.text to .text
0051      * Yes such calls do exist. e.g.
0052      *  decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( )
0053      */
0054 
0055     __init_begin = .;
0056 
0057     .init.ramfs : { INIT_RAM_FS }
0058 
0059     . = ALIGN(PAGE_SIZE);
0060 
0061     HEAD_TEXT_SECTION
0062     INIT_TEXT_SECTION(L1_CACHE_BYTES)
0063 
0064     /* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */
0065     .init.data : {
0066         INIT_DATA
0067         INIT_SETUP(L1_CACHE_BYTES)
0068         INIT_CALLS
0069         CON_INITCALL
0070     }
0071 
0072     .init.arch.info : {
0073         __arch_info_begin = .;
0074         *(.arch.info.init)
0075         __arch_info_end = .;
0076     }
0077 
0078     PERCPU_SECTION(L1_CACHE_BYTES)
0079 
0080     . = ALIGN(PAGE_SIZE);
0081     __init_end = .;
0082 
0083     .text : {
0084         _text = .;
0085         _stext = .;
0086         TEXT_TEXT
0087         SCHED_TEXT
0088         CPUIDLE_TEXT
0089         LOCK_TEXT
0090         KPROBES_TEXT
0091         IRQENTRY_TEXT
0092         SOFTIRQENTRY_TEXT
0093         *(.fixup)
0094         *(.gnu.warning)
0095     }
0096     EXCEPTION_TABLE(L1_CACHE_BYTES)
0097     _etext = .;
0098 
0099     _sdata = .;
0100     RO_DATA(PAGE_SIZE)
0101 
0102     /*
0103      * 1. this is .data essentially
0104      * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
0105      */
0106     RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
0107 
0108     _edata = .;
0109 
0110     BSS_SECTION(4, 4, 4)
0111 
0112 #ifdef CONFIG_ARC_DW2_UNWIND
0113     . = ALIGN(PAGE_SIZE);
0114     .eh_frame  : {
0115         __start_unwind = .;
0116         *(.eh_frame)
0117         __end_unwind = .;
0118     }
0119 #else
0120     /DISCARD/ : {   *(.eh_frame) }
0121 #endif
0122 
0123     . = ALIGN(PAGE_SIZE);
0124     _end = . ;
0125 
0126     STABS_DEBUG
0127     ELF_DETAILS
0128     DISCARDS
0129 
0130     .arcextmap 0 : {
0131         *(.gnu.linkonce.arcextmap.*)
0132         *(.arcextmap.*)
0133     }
0134 
0135 #ifndef CONFIG_DEBUG_INFO
0136     /DISCARD/ : { *(.debug_frame) }
0137     /DISCARD/ : { *(.debug_aranges) }
0138     /DISCARD/ : { *(.debug_pubnames) }
0139     /DISCARD/ : { *(.debug_info) }
0140     /DISCARD/ : { *(.debug_abbrev) }
0141     /DISCARD/ : { *(.debug_line) }
0142     /DISCARD/ : { *(.debug_str) }
0143     /DISCARD/ : { *(.debug_loc) }
0144     /DISCARD/ : { *(.debug_macinfo) }
0145     /DISCARD/ : { *(.debug_ranges) }
0146 #endif
0147 
0148 #ifdef CONFIG_ARC_HAS_DCCM
0149     . = CONFIG_ARC_DCCM_BASE;
0150     __arc_dccm_base = .;
0151     .data.arcfp : {
0152         *(.data.arcfp)
0153     }
0154     . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
0155 #endif
0156 }