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 20SECTIONS 21{ 22 . = 0x00000000; 23 .text : { 24 _text = .; /* Text and read-only data */ 25 *(.text.head) 26 TEXT_TEXT 27 SCHED_TEXT 28 LOCK_TEXT 29 KPROBES_TEXT 30 *(.fixup) 31 *(.gnu.warning) 32 } = 0x0700 33 34 _etext = .; /* End of text section */ 35 36 RODATA 37 38#ifdef CONFIG_SHARED_KERNEL 39 . = ALIGN(0x100000); /* VM shared segments are 1MB aligned */ 40#endif 41 42 . = ALIGN(PAGE_SIZE); 43 _eshared = .; /* End of shareable data */ 44 45 . = ALIGN(16); /* Exception table */ 46 __ex_table : { 47 __start___ex_table = .; 48 *(__ex_table) 49 __stop___ex_table = .; 50 } 51 52 NOTES 53 BUG_TABLE 54 55 .data : { /* Data */ 56 DATA_DATA 57 CONSTRUCTORS 58 } 59 60 . = ALIGN(PAGE_SIZE); 61 .data_nosave : { 62 __nosave_begin = .; 63 *(.data.nosave) 64 } 65 . = ALIGN(PAGE_SIZE); 66 __nosave_end = .; 67 68 . = ALIGN(PAGE_SIZE); 69 .data.page_aligned : { 70 *(.data.idt) 71 } 72 73 . = ALIGN(0x100); 74 .data.cacheline_aligned : { 75 *(.data.cacheline_aligned) 76 } 77 78 . = ALIGN(0x100); 79 .data.read_mostly : { 80 *(.data.read_mostly) 81 } 82 _edata = .; /* End of data section */ 83 84 . = ALIGN(2 * PAGE_SIZE); /* init_task */ 85 .data.init_task : { 86 *(.data.init_task) 87 } 88 89 /* will be freed after init */ 90 . = ALIGN(PAGE_SIZE); /* Init code and data */ 91 __init_begin = .; 92 .init.text : { 93 _sinittext = .; 94 *(.init.text) 95 _einittext = .; 96 } 97 /* 98 * .exit.text is discarded at runtime, not link time, 99 * to deal with references from __bug_table 100 */ 101 .exit.text : { 102 *(.exit.text) 103 } 104 105 .init.data : { 106 *(.init.data) 107 } 108 . = ALIGN(0x100); 109 .init.setup : { 110 __setup_start = .; 111 *(.init.setup) 112 __setup_end = .; 113 } 114 .initcall.init : { 115 __initcall_start = .; 116 INITCALLS 117 __initcall_end = .; 118 } 119 120 .con_initcall.init : { 121 __con_initcall_start = .; 122 *(.con_initcall.init) 123 __con_initcall_end = .; 124 } 125 SECURITY_INIT 126 127#ifdef CONFIG_BLK_DEV_INITRD 128 . = ALIGN(0x100); 129 .init.ramfs : { 130 __initramfs_start = .; 131 *(.init.ramfs) 132 . = ALIGN(2); 133 __initramfs_end = .; 134 } 135#endif 136 137 PERCPU(PAGE_SIZE) 138 . = ALIGN(PAGE_SIZE); 139 __init_end = .; /* freed after init ends here */ 140 141 /* BSS */ 142 .bss : { 143 __bss_start = .; 144 *(.bss) 145 . = ALIGN(2); 146 __bss_stop = .; 147 } 148 149 _end = . ; 150 151 /* Sections to be discarded */ 152 /DISCARD/ : { 153 *(.exit.data) 154 *(.exitcall.exit) 155 } 156 157 /* Debugging sections. */ 158 STABS_DEBUG 159 DWARF_DEBUG 160} 161