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 } 75 76 .init.arch.info : { 77 __arch_info_begin = .; 78 *(.arch.info.init) 79 __arch_info_end = .; 80 } 81 82 PERCPU_SECTION(L1_CACHE_BYTES) 83 84 . = ALIGN(PAGE_SIZE); 85 __init_end = .; 86 87 .text : { 88 _text = .; 89 TEXT_TEXT 90 SCHED_TEXT 91 CPUIDLE_TEXT 92 LOCK_TEXT 93 KPROBES_TEXT 94 *(.fixup) 95 *(.gnu.warning) 96 } 97 EXCEPTION_TABLE(L1_CACHE_BYTES) 98 _etext = .; 99 100 _sdata = .; 101 RO_DATA_SECTION(PAGE_SIZE) 102 103 /* 104 * 1. this is .data essentially 105 * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned 106 */ 107 RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 108 109 _edata = .; 110 111 BSS_SECTION(4, 4, 4) 112 113#ifdef CONFIG_ARC_DW2_UNWIND 114 . = ALIGN(PAGE_SIZE); 115 .eh_frame : { 116 __start_unwind = .; 117 *(.eh_frame) 118 __end_unwind = .; 119 } 120#else 121 /DISCARD/ : { *(.eh_frame) } 122#endif 123 124 NOTES 125 126 . = ALIGN(PAGE_SIZE); 127 _end = . ; 128 129 STABS_DEBUG 130 DISCARDS 131 132 .arcextmap 0 : { 133 *(.gnu.linkonce.arcextmap.*) 134 *(.arcextmap.*) 135 } 136 137#ifndef CONFIG_DEBUG_INFO 138 /DISCARD/ : { *(.debug_frame) } 139 /DISCARD/ : { *(.debug_aranges) } 140 /DISCARD/ : { *(.debug_pubnames) } 141 /DISCARD/ : { *(.debug_info) } 142 /DISCARD/ : { *(.debug_abbrev) } 143 /DISCARD/ : { *(.debug_line) } 144 /DISCARD/ : { *(.debug_str) } 145 /DISCARD/ : { *(.debug_loc) } 146 /DISCARD/ : { *(.debug_macinfo) } 147 /DISCARD/ : { *(.debug_ranges) } 148#endif 149 150#ifdef CONFIG_ARC_HAS_DCCM 151 . = CONFIG_ARC_DCCM_BASE; 152 __arc_dccm_base = .; 153 .data.arcfp : { 154 *(.data.arcfp) 155 } 156 . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024); 157#endif 158} 159