1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun#include <asm-generic/vmlinux.lds.h> 7*4882a593Smuzhiyun#include <asm/cache.h> 8*4882a593Smuzhiyun#include <asm/page.h> 9*4882a593Smuzhiyun#include <asm/thread_info.h> 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunOUTPUT_ARCH(arc) 12*4882a593SmuzhiyunENTRY(res_service) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun#ifdef CONFIG_CPU_BIG_ENDIAN 15*4882a593Smuzhiyunjiffies = jiffies_64 + 4; 16*4882a593Smuzhiyun#else 17*4882a593Smuzhiyunjiffies = jiffies_64; 18*4882a593Smuzhiyun#endif 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunSECTIONS 21*4882a593Smuzhiyun{ 22*4882a593Smuzhiyun /* 23*4882a593Smuzhiyun * ICCM starts at 0x8000_0000. So if kernel is relocated to some other 24*4882a593Smuzhiyun * address, make sure peripheral at 0x8z doesn't clash with ICCM 25*4882a593Smuzhiyun * Essentially vector is also in ICCM. 26*4882a593Smuzhiyun */ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun . = CONFIG_LINUX_LINK_BASE; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun _int_vec_base_lds = .; 31*4882a593Smuzhiyun .vector : { 32*4882a593Smuzhiyun *(.vector) 33*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun#ifdef CONFIG_ARC_HAS_ICCM 37*4882a593Smuzhiyun .text.arcfp : { 38*4882a593Smuzhiyun *(.text.arcfp) 39*4882a593Smuzhiyun . = ALIGN(CONFIG_ARC_ICCM_SZ * 1024); 40*4882a593Smuzhiyun } 41*4882a593Smuzhiyun#endif 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* 44*4882a593Smuzhiyun * The reason for having a seperate subsection .init.ramfs is to 45*4882a593Smuzhiyun * prevent objump from including it in kernel dumps 46*4882a593Smuzhiyun * 47*4882a593Smuzhiyun * Reason for having .init.ramfs above .init is to make sure that the 48*4882a593Smuzhiyun * binary blob is tucked away to one side, reducing the displacement 49*4882a593Smuzhiyun * between .init.text and .text, avoiding any possible relocation 50*4882a593Smuzhiyun * errors because of calls from .init.text to .text 51*4882a593Smuzhiyun * Yes such calls do exist. e.g. 52*4882a593Smuzhiyun * decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( ) 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun __init_begin = .; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun .init.ramfs : { INIT_RAM_FS } 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 60*4882a593Smuzhiyun _stext = .; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun HEAD_TEXT_SECTION 63*4882a593Smuzhiyun INIT_TEXT_SECTION(L1_CACHE_BYTES) 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */ 66*4882a593Smuzhiyun .init.data : { 67*4882a593Smuzhiyun INIT_DATA 68*4882a593Smuzhiyun INIT_SETUP(L1_CACHE_BYTES) 69*4882a593Smuzhiyun INIT_CALLS 70*4882a593Smuzhiyun CON_INITCALL 71*4882a593Smuzhiyun } 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun .init.arch.info : { 74*4882a593Smuzhiyun __arch_info_begin = .; 75*4882a593Smuzhiyun *(.arch.info.init) 76*4882a593Smuzhiyun __arch_info_end = .; 77*4882a593Smuzhiyun } 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun PERCPU_SECTION(L1_CACHE_BYTES) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 82*4882a593Smuzhiyun __init_end = .; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun .text : { 85*4882a593Smuzhiyun _text = .; 86*4882a593Smuzhiyun TEXT_TEXT 87*4882a593Smuzhiyun SCHED_TEXT 88*4882a593Smuzhiyun CPUIDLE_TEXT 89*4882a593Smuzhiyun LOCK_TEXT 90*4882a593Smuzhiyun KPROBES_TEXT 91*4882a593Smuzhiyun IRQENTRY_TEXT 92*4882a593Smuzhiyun SOFTIRQENTRY_TEXT 93*4882a593Smuzhiyun *(.fixup) 94*4882a593Smuzhiyun *(.gnu.warning) 95*4882a593Smuzhiyun } 96*4882a593Smuzhiyun EXCEPTION_TABLE(L1_CACHE_BYTES) 97*4882a593Smuzhiyun _etext = .; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun _sdata = .; 100*4882a593Smuzhiyun RO_DATA(PAGE_SIZE) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* 103*4882a593Smuzhiyun * 1. this is .data essentially 104*4882a593Smuzhiyun * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned 105*4882a593Smuzhiyun */ 106*4882a593Smuzhiyun RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun _edata = .; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun BSS_SECTION(4, 4, 4) 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun#ifdef CONFIG_ARC_DW2_UNWIND 113*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 114*4882a593Smuzhiyun .eh_frame : { 115*4882a593Smuzhiyun __start_unwind = .; 116*4882a593Smuzhiyun *(.eh_frame) 117*4882a593Smuzhiyun __end_unwind = .; 118*4882a593Smuzhiyun } 119*4882a593Smuzhiyun#else 120*4882a593Smuzhiyun /DISCARD/ : { *(.eh_frame) } 121*4882a593Smuzhiyun#endif 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun . = ALIGN(PAGE_SIZE); 124*4882a593Smuzhiyun _end = . ; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun STABS_DEBUG 127*4882a593Smuzhiyun ELF_DETAILS 128*4882a593Smuzhiyun DISCARDS 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun .arcextmap 0 : { 131*4882a593Smuzhiyun *(.gnu.linkonce.arcextmap.*) 132*4882a593Smuzhiyun *(.arcextmap.*) 133*4882a593Smuzhiyun } 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun#ifndef CONFIG_DEBUG_INFO 136*4882a593Smuzhiyun /DISCARD/ : { *(.debug_frame) } 137*4882a593Smuzhiyun /DISCARD/ : { *(.debug_aranges) } 138*4882a593Smuzhiyun /DISCARD/ : { *(.debug_pubnames) } 139*4882a593Smuzhiyun /DISCARD/ : { *(.debug_info) } 140*4882a593Smuzhiyun /DISCARD/ : { *(.debug_abbrev) } 141*4882a593Smuzhiyun /DISCARD/ : { *(.debug_line) } 142*4882a593Smuzhiyun /DISCARD/ : { *(.debug_str) } 143*4882a593Smuzhiyun /DISCARD/ : { *(.debug_loc) } 144*4882a593Smuzhiyun /DISCARD/ : { *(.debug_macinfo) } 145*4882a593Smuzhiyun /DISCARD/ : { *(.debug_ranges) } 146*4882a593Smuzhiyun#endif 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun#ifdef CONFIG_ARC_HAS_DCCM 149*4882a593Smuzhiyun . = CONFIG_ARC_DCCM_BASE; 150*4882a593Smuzhiyun __arc_dccm_base = .; 151*4882a593Smuzhiyun .data.arcfp : { 152*4882a593Smuzhiyun *(.data.arcfp) 153*4882a593Smuzhiyun } 154*4882a593Smuzhiyun . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024); 155*4882a593Smuzhiyun#endif 156*4882a593Smuzhiyun} 157