1/* ld script to make s390 Linux kernel 2 * Written by Martin Schwidefsky (schwidefsky@de.ibm.com) 3 */ 4 5#include <asm/thread_info.h> 6#include <asm/page.h> 7#include <asm-generic/vmlinux.lds.h> 8 9#ifndef CONFIG_64BIT 10OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390") 11OUTPUT_ARCH(s390) 12ENTRY(_start) 13jiffies = jiffies_64 + 4; 14#else 15OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") 16OUTPUT_ARCH(s390:64-bit) 17ENTRY(_start) 18jiffies = jiffies_64; 19#endif 20 21PHDRS { 22 text PT_LOAD FLAGS(5); /* R_E */ 23 data PT_LOAD FLAGS(7); /* RWE */ 24 note PT_NOTE FLAGS(0); /* ___ */ 25} 26 27SECTIONS 28{ 29 . = 0x00000000; 30 .text : { 31 _text = .; /* Text and read-only data */ 32 HEAD_TEXT 33 TEXT_TEXT 34 SCHED_TEXT 35 LOCK_TEXT 36 KPROBES_TEXT 37 IRQENTRY_TEXT 38 *(.fixup) 39 *(.gnu.warning) 40 } :text = 0x0700 41 42 _etext = .; /* End of text section */ 43 44 NOTES :text :note 45 46 RODATA 47 48#ifdef CONFIG_SHARED_KERNEL 49 . = ALIGN(0x100000); /* VM shared segments are 1MB aligned */ 50#endif 51 52 . = ALIGN(PAGE_SIZE); 53 _eshared = .; /* End of shareable data */ 54 55 . = ALIGN(16); /* Exception table */ 56 __ex_table : { 57 __start___ex_table = .; 58 *(__ex_table) 59 __stop___ex_table = .; 60 } :data 61 62 .data : { /* Data */ 63 DATA_DATA 64 CONSTRUCTORS 65 } 66 67 . = ALIGN(PAGE_SIZE); 68 .data_nosave : { 69 __nosave_begin = .; 70 *(.data.nosave) 71 } 72 . = ALIGN(PAGE_SIZE); 73 __nosave_end = .; 74 75 . = ALIGN(PAGE_SIZE); 76 .data.page_aligned : { 77 *(.data.idt) 78 } 79 80 . = ALIGN(0x100); 81 .data.cacheline_aligned : { 82 *(.data.cacheline_aligned) 83 } 84 85 . = ALIGN(0x100); 86 .data.read_mostly : { 87 *(.data.read_mostly) 88 } 89 _edata = .; /* End of data section */ 90 91 . = ALIGN(THREAD_SIZE); /* init_task */ 92 .data.init_task : { 93 *(.data.init_task) 94 } 95 96 /* will be freed after init */ 97 . = ALIGN(PAGE_SIZE); /* Init code and data */ 98 __init_begin = .; 99 .init.text : { 100 _sinittext = .; 101 INIT_TEXT 102 _einittext = .; 103 } 104 /* 105 * .exit.text is discarded at runtime, not link time, 106 * to deal with references from __bug_table 107 */ 108 .exit.text : { 109 EXIT_TEXT 110 } 111 112 /* early.c uses stsi, which requires page aligned data. */ 113 . = ALIGN(PAGE_SIZE); 114 .init.data : { 115 INIT_DATA 116 } 117 . = ALIGN(0x100); 118 .init.setup : { 119 __setup_start = .; 120 *(.init.setup) 121 __setup_end = .; 122 } 123 .initcall.init : { 124 __initcall_start = .; 125 INITCALLS 126 __initcall_end = .; 127 } 128 129 .con_initcall.init : { 130 __con_initcall_start = .; 131 *(.con_initcall.init) 132 __con_initcall_end = .; 133 } 134 SECURITY_INIT 135 136#ifdef CONFIG_BLK_DEV_INITRD 137 . = ALIGN(0x100); 138 .init.ramfs : { 139 __initramfs_start = .; 140 *(.init.ramfs) 141 . = ALIGN(2); 142 __initramfs_end = .; 143 } 144#endif 145 146 PERCPU(PAGE_SIZE) 147 . = ALIGN(PAGE_SIZE); 148 __init_end = .; /* freed after init ends here */ 149 150 /* BSS */ 151 .bss : { 152 __bss_start = .; 153 *(.bss) 154 . = ALIGN(2); 155 __bss_stop = .; 156 } 157 158 _end = . ; 159 160 /* Sections to be discarded */ 161 /DISCARD/ : { 162 EXIT_DATA 163 *(.exitcall.exit) 164 *(.discard) 165 } 166 167 /* Debugging sections. */ 168 STABS_DEBUG 169 DWARF_DEBUG 170} 171