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