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