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 separate subsection .init.ramfs is to 45 * prevent objdump 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 LOCK_TEXT 89 KPROBES_TEXT 90 IRQENTRY_TEXT 91 SOFTIRQENTRY_TEXT 92 *(.fixup) 93 *(.gnu.warning) 94 } 95 EXCEPTION_TABLE(L1_CACHE_BYTES) 96 _etext = .; 97 98 _sdata = .; 99 RO_DATA(PAGE_SIZE) 100 101 /* 102 * 1. this is .data essentially 103 * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned 104 */ 105 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 106 107 _edata = .; 108 109 BSS_SECTION(4, 4, 4) 110 111#ifdef CONFIG_ARC_DW2_UNWIND 112 . = ALIGN(PAGE_SIZE); 113 .eh_frame : { 114 __start_unwind = .; 115 *(.eh_frame) 116 __end_unwind = .; 117 } 118#else 119 /DISCARD/ : { *(.eh_frame) } 120#endif 121 122 . = ALIGN(PAGE_SIZE); 123 _end = . ; 124 125 STABS_DEBUG 126 ELF_DETAILS 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} 156