1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 2cfdbc2e1SVineet Gupta/* 3cfdbc2e1SVineet Gupta * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 4cfdbc2e1SVineet Gupta */ 5cfdbc2e1SVineet Gupta 6cfdbc2e1SVineet Gupta#include <asm-generic/vmlinux.lds.h> 7cfdbc2e1SVineet Gupta#include <asm/cache.h> 8cfdbc2e1SVineet Gupta#include <asm/page.h> 9cfdbc2e1SVineet Gupta#include <asm/thread_info.h> 10cfdbc2e1SVineet Gupta 11cfdbc2e1SVineet GuptaOUTPUT_ARCH(arc) 123971cdc2SVineet GuptaENTRY(res_service) 13cfdbc2e1SVineet Gupta 14cfdbc2e1SVineet Gupta#ifdef CONFIG_CPU_BIG_ENDIAN 15cfdbc2e1SVineet Guptajiffies = jiffies_64 + 4; 16cfdbc2e1SVineet Gupta#else 17cfdbc2e1SVineet Guptajiffies = jiffies_64; 18cfdbc2e1SVineet Gupta#endif 19cfdbc2e1SVineet Gupta 20cfdbc2e1SVineet GuptaSECTIONS 21cfdbc2e1SVineet Gupta{ 228b5850f8SVineet Gupta /* 238b5850f8SVineet Gupta * ICCM starts at 0x8000_0000. So if kernel is relocated to some other 248b5850f8SVineet Gupta * address, make sure peripheral at 0x8z doesn't clash with ICCM 258b5850f8SVineet Gupta * Essentially vector is also in ICCM. 268b5850f8SVineet Gupta */ 278b5850f8SVineet Gupta 28cfdbc2e1SVineet Gupta . = CONFIG_LINUX_LINK_BASE; 29cfdbc2e1SVineet Gupta 30cfdbc2e1SVineet Gupta _int_vec_base_lds = .; 31cfdbc2e1SVineet Gupta .vector : { 32cfdbc2e1SVineet Gupta *(.vector) 33cfdbc2e1SVineet Gupta . = ALIGN(PAGE_SIZE); 34cfdbc2e1SVineet Gupta } 35cfdbc2e1SVineet Gupta 368b5850f8SVineet Gupta#ifdef CONFIG_ARC_HAS_ICCM 378b5850f8SVineet Gupta .text.arcfp : { 388b5850f8SVineet Gupta *(.text.arcfp) 398b5850f8SVineet Gupta . = ALIGN(CONFIG_ARC_ICCM_SZ * 1024); 408b5850f8SVineet Gupta } 418b5850f8SVineet Gupta#endif 428b5850f8SVineet Gupta 43cfdbc2e1SVineet Gupta /* 44*ebfc2fd8SBjorn Helgaas * The reason for having a separate subsection .init.ramfs is to 45*ebfc2fd8SBjorn Helgaas * prevent objdump from including it in kernel dumps 46cfdbc2e1SVineet Gupta * 47cfdbc2e1SVineet Gupta * Reason for having .init.ramfs above .init is to make sure that the 48cfdbc2e1SVineet Gupta * binary blob is tucked away to one side, reducing the displacement 49cfdbc2e1SVineet Gupta * between .init.text and .text, avoiding any possible relocation 50cfdbc2e1SVineet Gupta * errors because of calls from .init.text to .text 51cfdbc2e1SVineet Gupta * Yes such calls do exist. e.g. 52cfdbc2e1SVineet Gupta * decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( ) 53cfdbc2e1SVineet Gupta */ 54cfdbc2e1SVineet Gupta 55cfdbc2e1SVineet Gupta __init_begin = .; 56cfdbc2e1SVineet Gupta 57cfdbc2e1SVineet Gupta .init.ramfs : { INIT_RAM_FS } 58cfdbc2e1SVineet Gupta 59cfdbc2e1SVineet Gupta . = ALIGN(PAGE_SIZE); 60cfdbc2e1SVineet Gupta 61cfdbc2e1SVineet Gupta HEAD_TEXT_SECTION 62cfdbc2e1SVineet Gupta INIT_TEXT_SECTION(L1_CACHE_BYTES) 63cfdbc2e1SVineet Gupta 64cfdbc2e1SVineet Gupta /* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */ 65cfdbc2e1SVineet Gupta .init.data : { 66cfdbc2e1SVineet Gupta INIT_DATA 67cfdbc2e1SVineet Gupta INIT_SETUP(L1_CACHE_BYTES) 68cfdbc2e1SVineet Gupta INIT_CALLS 69cfdbc2e1SVineet Gupta CON_INITCALL 70cfdbc2e1SVineet Gupta } 71cfdbc2e1SVineet Gupta 7203a6d28cSVineet Gupta .init.arch.info : { 7303a6d28cSVineet Gupta __arch_info_begin = .; 7403a6d28cSVineet Gupta *(.arch.info.init) 7503a6d28cSVineet Gupta __arch_info_end = .; 7603a6d28cSVineet Gupta } 7703a6d28cSVineet Gupta 78cfdbc2e1SVineet Gupta PERCPU_SECTION(L1_CACHE_BYTES) 79cfdbc2e1SVineet Gupta 80cfdbc2e1SVineet Gupta . = ALIGN(PAGE_SIZE); 81cfdbc2e1SVineet Gupta __init_end = .; 82cfdbc2e1SVineet Gupta 83cfdbc2e1SVineet Gupta .text : { 84cfdbc2e1SVineet Gupta _text = .; 85110febc0SVineet Gupta _stext = .; 86cfdbc2e1SVineet Gupta TEXT_TEXT 87cfdbc2e1SVineet Gupta SCHED_TEXT 88cfdbc2e1SVineet Gupta LOCK_TEXT 89cfdbc2e1SVineet Gupta KPROBES_TEXT 90bf79167fSGuenter Roeck IRQENTRY_TEXT 91bf79167fSGuenter Roeck SOFTIRQENTRY_TEXT 92cfdbc2e1SVineet Gupta *(.fixup) 93cfdbc2e1SVineet Gupta *(.gnu.warning) 94cfdbc2e1SVineet Gupta } 95cfdbc2e1SVineet Gupta EXCEPTION_TABLE(L1_CACHE_BYTES) 96cfdbc2e1SVineet Gupta _etext = .; 97cfdbc2e1SVineet Gupta 98cfdbc2e1SVineet Gupta _sdata = .; 9993240b32SKees Cook RO_DATA(PAGE_SIZE) 100cfdbc2e1SVineet Gupta 101cfdbc2e1SVineet Gupta /* 102cfdbc2e1SVineet Gupta * 1. this is .data essentially 103cfdbc2e1SVineet Gupta * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned 104cfdbc2e1SVineet Gupta */ 105c9174047SKees Cook RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 106cfdbc2e1SVineet Gupta 107cfdbc2e1SVineet Gupta _edata = .; 108cfdbc2e1SVineet Gupta 109bef444a3SVineet Gupta BSS_SECTION(4, 4, 4) 110cfdbc2e1SVineet Gupta 111854a0d95SVineet Gupta#ifdef CONFIG_ARC_DW2_UNWIND 112854a0d95SVineet Gupta . = ALIGN(PAGE_SIZE); 1136716dbbdSVineet Gupta .eh_frame : { 114854a0d95SVineet Gupta __start_unwind = .; 1156716dbbdSVineet Gupta *(.eh_frame) 116854a0d95SVineet Gupta __end_unwind = .; 117854a0d95SVineet Gupta } 118854a0d95SVineet Gupta#else 1196716dbbdSVineet Gupta /DISCARD/ : { *(.eh_frame) } 120854a0d95SVineet Gupta#endif 121854a0d95SVineet Gupta 122cfdbc2e1SVineet Gupta . = ALIGN(PAGE_SIZE); 123cfdbc2e1SVineet Gupta _end = . ; 124cfdbc2e1SVineet Gupta 125cfdbc2e1SVineet Gupta STABS_DEBUG 126c604abc3SKees Cook ELF_DETAILS 127cfdbc2e1SVineet Gupta DISCARDS 128cfdbc2e1SVineet Gupta 129cfdbc2e1SVineet Gupta .arcextmap 0 : { 130cfdbc2e1SVineet Gupta *(.gnu.linkonce.arcextmap.*) 131cfdbc2e1SVineet Gupta *(.arcextmap.*) 132cfdbc2e1SVineet Gupta } 133854a0d95SVineet Gupta 1345a45da02SVineet Gupta#ifndef CONFIG_DEBUG_INFO 1356716dbbdSVineet Gupta /DISCARD/ : { *(.debug_frame) } 1365a45da02SVineet Gupta /DISCARD/ : { *(.debug_aranges) } 1375a45da02SVineet Gupta /DISCARD/ : { *(.debug_pubnames) } 1385a45da02SVineet Gupta /DISCARD/ : { *(.debug_info) } 1395a45da02SVineet Gupta /DISCARD/ : { *(.debug_abbrev) } 1405a45da02SVineet Gupta /DISCARD/ : { *(.debug_line) } 1415a45da02SVineet Gupta /DISCARD/ : { *(.debug_str) } 1425a45da02SVineet Gupta /DISCARD/ : { *(.debug_loc) } 1435a45da02SVineet Gupta /DISCARD/ : { *(.debug_macinfo) } 1445a45da02SVineet Gupta /DISCARD/ : { *(.debug_ranges) } 1455a45da02SVineet Gupta#endif 146854a0d95SVineet Gupta 1478b5850f8SVineet Gupta#ifdef CONFIG_ARC_HAS_DCCM 1488b5850f8SVineet Gupta . = CONFIG_ARC_DCCM_BASE; 1498b5850f8SVineet Gupta __arc_dccm_base = .; 1508b5850f8SVineet Gupta .data.arcfp : { 1518b5850f8SVineet Gupta *(.data.arcfp) 1528b5850f8SVineet Gupta } 1538b5850f8SVineet Gupta . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024); 1548b5850f8SVineet Gupta#endif 155cfdbc2e1SVineet Gupta} 156