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