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