1#include <asm-generic/vmlinux.lds.h> 2#include <asm/page.h> 3#include <asm/cache.h> 4#include <asm/thread_info.h> 5#include <hv/hypervisor.h> 6 7/* Text loads starting from the supervisor interrupt vector address. */ 8#define TEXT_OFFSET MEM_SV_START 9 10OUTPUT_ARCH(tile) 11ENTRY(_start) 12jiffies = jiffies_64; 13 14PHDRS 15{ 16 intrpt PT_LOAD ; 17 text PT_LOAD ; 18 data PT_LOAD ; 19} 20SECTIONS 21{ 22 /* Text is loaded with a different VA than data; start with text. */ 23 #undef LOAD_OFFSET 24 #define LOAD_OFFSET TEXT_OFFSET 25 26 /* Interrupt vectors */ 27 .intrpt (LOAD_OFFSET) : AT ( 0 ) /* put at the start of physical memory */ 28 { 29 _text = .; 30 *(.intrpt) 31 } :intrpt =0 32 33 /* Hypervisor call vectors */ 34 . = ALIGN(0x10000); 35 .hvglue : AT (ADDR(.hvglue) - LOAD_OFFSET) { 36 *(.hvglue) 37 } :NONE 38 39 /* Now the real code */ 40 . = ALIGN(0x20000); 41 _stext = .; 42 .text : AT (ADDR(.text) - LOAD_OFFSET) { 43 HEAD_TEXT 44 SCHED_TEXT 45 CPUIDLE_TEXT 46 LOCK_TEXT 47 KPROBES_TEXT 48 IRQENTRY_TEXT 49 SOFTIRQENTRY_TEXT 50 __fix_text_end = .; /* tile-cpack won't rearrange before this */ 51 ALIGN_FUNCTION(); 52 *(.hottext*) 53 TEXT_TEXT 54 *(.text.*) 55 *(.coldtext*) 56 *(.fixup) 57 *(.gnu.warning) 58 } :text =0 59 _etext = .; 60 61 /* "Init" is divided into two areas with very different virtual addresses. */ 62 INIT_TEXT_SECTION(PAGE_SIZE) 63 64 /* 65 * Some things, like the __jump_table, may contain symbol references 66 * to __exit text, so include such text in the final image if so. 67 * In that case we also override the _einittext from INIT_TEXT_SECTION. 68 */ 69#ifdef CONFIG_JUMP_LABEL 70 .exit.text : { 71 EXIT_TEXT 72 _einittext = .; 73 } 74#endif 75 76 /* Now we skip back to PAGE_OFFSET for the data. */ 77 . = (. - TEXT_OFFSET + PAGE_OFFSET); 78 #undef LOAD_OFFSET 79 #define LOAD_OFFSET PAGE_OFFSET 80 81 . = ALIGN(PAGE_SIZE); 82 __init_begin = .; 83 INIT_DATA_SECTION(16) :data =0 84 PERCPU_SECTION(L2_CACHE_BYTES) 85 . = ALIGN(PAGE_SIZE); 86 __init_end = .; 87 88 _sdata = .; /* Start of data section */ 89 RO_DATA_SECTION(PAGE_SIZE) 90 RW_DATA_SECTION(L2_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 91 _edata = .; 92 93 EXCEPTION_TABLE(L2_CACHE_BYTES) 94 NOTES 95 96 97 BSS_SECTION(8, PAGE_SIZE, 1) 98 _end = . ; 99 100 STABS_DEBUG 101 DWARF_DEBUG 102 103 DISCARDS 104} 105