1*1da177e4SLinus Torvalds/* $Id: vmlinux.lds.S,v 1.8 2003/05/16 17:18:14 lethal Exp $ 2*1da177e4SLinus Torvalds * ld script to make SuperH Linux kernel 3*1da177e4SLinus Torvalds * Written by Niibe Yutaka 4*1da177e4SLinus Torvalds */ 5*1da177e4SLinus Torvalds#include <linux/config.h> 6*1da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h> 7*1da177e4SLinus Torvalds 8*1da177e4SLinus Torvalds#ifdef CONFIG_CPU_LITTLE_ENDIAN 9*1da177e4SLinus TorvaldsOUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") 10*1da177e4SLinus Torvalds#else 11*1da177e4SLinus TorvaldsOUTPUT_FORMAT("elf32-shbig-linux", "elf32-shbig-linux", "elf32-shbig-linux") 12*1da177e4SLinus Torvalds#endif 13*1da177e4SLinus TorvaldsOUTPUT_ARCH(sh) 14*1da177e4SLinus TorvaldsENTRY(_start) 15*1da177e4SLinus TorvaldsSECTIONS 16*1da177e4SLinus Torvalds{ 17*1da177e4SLinus Torvalds . = 0x80000000 + CONFIG_MEMORY_START + CONFIG_ZERO_PAGE_OFFSET; 18*1da177e4SLinus Torvalds _text = .; /* Text and read-only data */ 19*1da177e4SLinus Torvalds text = .; /* Text and read-only data */ 20*1da177e4SLinus Torvalds .empty_zero_page : { 21*1da177e4SLinus Torvalds *(.empty_zero_page) 22*1da177e4SLinus Torvalds } = 0 23*1da177e4SLinus Torvalds .text : { 24*1da177e4SLinus Torvalds *(.text) 25*1da177e4SLinus Torvalds SCHED_TEXT 26*1da177e4SLinus Torvalds LOCK_TEXT 27*1da177e4SLinus Torvalds *(.fixup) 28*1da177e4SLinus Torvalds *(.gnu.warning) 29*1da177e4SLinus Torvalds } = 0x0009 30*1da177e4SLinus Torvalds 31*1da177e4SLinus Torvalds . = ALIGN(16); /* Exception table */ 32*1da177e4SLinus Torvalds __start___ex_table = .; 33*1da177e4SLinus Torvalds __ex_table : { *(__ex_table) } 34*1da177e4SLinus Torvalds __stop___ex_table = .; 35*1da177e4SLinus Torvalds 36*1da177e4SLinus Torvalds RODATA 37*1da177e4SLinus Torvalds 38*1da177e4SLinus Torvalds _etext = .; /* End of text section */ 39*1da177e4SLinus Torvalds 40*1da177e4SLinus Torvalds .data : { /* Data */ 41*1da177e4SLinus Torvalds *(.data) 42*1da177e4SLinus Torvalds 43*1da177e4SLinus Torvalds /* Align the initial ramdisk image (INITRD) on page boundaries. */ 44*1da177e4SLinus Torvalds . = ALIGN(4096); 45*1da177e4SLinus Torvalds __rd_start = .; 46*1da177e4SLinus Torvalds *(.initrd) 47*1da177e4SLinus Torvalds . = ALIGN(4096); 48*1da177e4SLinus Torvalds __rd_end = .; 49*1da177e4SLinus Torvalds 50*1da177e4SLinus Torvalds CONSTRUCTORS 51*1da177e4SLinus Torvalds } 52*1da177e4SLinus Torvalds 53*1da177e4SLinus Torvalds . = ALIGN(4096); 54*1da177e4SLinus Torvalds .data.page_aligned : { *(.data.idt) } 55*1da177e4SLinus Torvalds 56*1da177e4SLinus Torvalds . = ALIGN(32); 57*1da177e4SLinus Torvalds __per_cpu_start = .; 58*1da177e4SLinus Torvalds .data.percpu : { *(.data.percpu) } 59*1da177e4SLinus Torvalds __per_cpu_end = .; 60*1da177e4SLinus Torvalds .data.cacheline_aligned : { *(.data.cacheline_aligned) } 61*1da177e4SLinus Torvalds 62*1da177e4SLinus Torvalds _edata = .; /* End of data section */ 63*1da177e4SLinus Torvalds 64*1da177e4SLinus Torvalds . = ALIGN(8192); /* init_task */ 65*1da177e4SLinus Torvalds .data.init_task : { *(.data.init_task) } 66*1da177e4SLinus Torvalds /* stack */ 67*1da177e4SLinus Torvalds .stack : { stack = .; _stack = .; } 68*1da177e4SLinus Torvalds 69*1da177e4SLinus Torvalds . = ALIGN(4096); /* Init code and data */ 70*1da177e4SLinus Torvalds __init_begin = .; 71*1da177e4SLinus Torvalds _sinittext = .; 72*1da177e4SLinus Torvalds .init.text : { *(.init.text) } 73*1da177e4SLinus Torvalds _einittext = .; 74*1da177e4SLinus Torvalds .init.data : { *(.init.data) } 75*1da177e4SLinus Torvalds . = ALIGN(16); 76*1da177e4SLinus Torvalds __setup_start = .; 77*1da177e4SLinus Torvalds .init.setup : { *(.init.setup) } 78*1da177e4SLinus Torvalds __setup_end = .; 79*1da177e4SLinus Torvalds __initcall_start = .; 80*1da177e4SLinus Torvalds .initcall.init : { 81*1da177e4SLinus Torvalds *(.initcall1.init) 82*1da177e4SLinus Torvalds *(.initcall2.init) 83*1da177e4SLinus Torvalds *(.initcall3.init) 84*1da177e4SLinus Torvalds *(.initcall4.init) 85*1da177e4SLinus Torvalds *(.initcall5.init) 86*1da177e4SLinus Torvalds *(.initcall6.init) 87*1da177e4SLinus Torvalds *(.initcall7.init) 88*1da177e4SLinus Torvalds } 89*1da177e4SLinus Torvalds __initcall_end = .; 90*1da177e4SLinus Torvalds __con_initcall_start = .; 91*1da177e4SLinus Torvalds .con_initcall.init : { *(.con_initcall.init) } 92*1da177e4SLinus Torvalds __con_initcall_end = .; 93*1da177e4SLinus Torvalds SECURITY_INIT 94*1da177e4SLinus Torvalds __initramfs_start = .; 95*1da177e4SLinus Torvalds .init.ramfs : { *(.init.ramfs) } 96*1da177e4SLinus Torvalds __initramfs_end = .; 97*1da177e4SLinus Torvalds __machvec_start = .; 98*1da177e4SLinus Torvalds .init.machvec : { *(.init.machvec) } 99*1da177e4SLinus Torvalds __machvec_end = .; 100*1da177e4SLinus Torvalds . = ALIGN(4096); 101*1da177e4SLinus Torvalds __init_end = .; 102*1da177e4SLinus Torvalds 103*1da177e4SLinus Torvalds . = ALIGN(4); 104*1da177e4SLinus Torvalds __bss_start = .; /* BSS */ 105*1da177e4SLinus Torvalds .bss : { *(.bss) } 106*1da177e4SLinus Torvalds 107*1da177e4SLinus Torvalds . = ALIGN(4); 108*1da177e4SLinus Torvalds _end = . ; 109*1da177e4SLinus Torvalds 110*1da177e4SLinus Torvalds /* When something in the kernel is NOT compiled as a module, the 111*1da177e4SLinus Torvalds * module cleanup code and data are put into these segments. Both 112*1da177e4SLinus Torvalds * can then be thrown away, as cleanup code is never called unless 113*1da177e4SLinus Torvalds * it's a module. 114*1da177e4SLinus Torvalds */ 115*1da177e4SLinus Torvalds /DISCARD/ : { 116*1da177e4SLinus Torvalds *(.exit.text) 117*1da177e4SLinus Torvalds *(.exit.data) 118*1da177e4SLinus Torvalds *(.exitcall.exit) 119*1da177e4SLinus Torvalds } 120*1da177e4SLinus Torvalds 121*1da177e4SLinus Torvalds /* Stabs debugging sections. */ 122*1da177e4SLinus Torvalds .stab 0 : { *(.stab) } 123*1da177e4SLinus Torvalds .stabstr 0 : { *(.stabstr) } 124*1da177e4SLinus Torvalds .stab.excl 0 : { *(.stab.excl) } 125*1da177e4SLinus Torvalds .stab.exclstr 0 : { *(.stab.exclstr) } 126*1da177e4SLinus Torvalds .stab.index 0 : { *(.stab.index) } 127*1da177e4SLinus Torvalds .stab.indexstr 0 : { *(.stab.indexstr) } 128*1da177e4SLinus Torvalds .comment 0 : { *(.comment) } 129*1da177e4SLinus Torvalds /* DWARF debug sections. 130*1da177e4SLinus Torvalds Symbols in the DWARF debugging section are relative to the beginning 131*1da177e4SLinus Torvalds of the section so we begin .debug at 0. */ 132*1da177e4SLinus Torvalds /* DWARF 1 */ 133*1da177e4SLinus Torvalds .debug 0 : { *(.debug) } 134*1da177e4SLinus Torvalds .line 0 : { *(.line) } 135*1da177e4SLinus Torvalds /* GNU DWARF 1 extensions */ 136*1da177e4SLinus Torvalds .debug_srcinfo 0 : { *(.debug_srcinfo) } 137*1da177e4SLinus Torvalds .debug_sfnames 0 : { *(.debug_sfnames) } 138*1da177e4SLinus Torvalds /* DWARF 1.1 and DWARF 2 */ 139*1da177e4SLinus Torvalds .debug_aranges 0 : { *(.debug_aranges) } 140*1da177e4SLinus Torvalds .debug_pubnames 0 : { *(.debug_pubnames) } 141*1da177e4SLinus Torvalds /* DWARF 2 */ 142*1da177e4SLinus Torvalds .debug_info 0 : { *(.debug_info) } 143*1da177e4SLinus Torvalds .debug_abbrev 0 : { *(.debug_abbrev) } 144*1da177e4SLinus Torvalds .debug_line 0 : { *(.debug_line) } 145*1da177e4SLinus Torvalds .debug_frame 0 : { *(.debug_frame) } 146*1da177e4SLinus Torvalds .debug_str 0 : { *(.debug_str) } 147*1da177e4SLinus Torvalds .debug_loc 0 : { *(.debug_loc) } 148*1da177e4SLinus Torvalds .debug_macinfo 0 : { *(.debug_macinfo) } 149*1da177e4SLinus Torvalds /* SGI/MIPS DWARF 2 extensions */ 150*1da177e4SLinus Torvalds .debug_weaknames 0 : { *(.debug_weaknames) } 151*1da177e4SLinus Torvalds .debug_funcnames 0 : { *(.debug_funcnames) } 152*1da177e4SLinus Torvalds .debug_typenames 0 : { *(.debug_typenames) } 153*1da177e4SLinus Torvalds .debug_varnames 0 : { *(.debug_varnames) } 154*1da177e4SLinus Torvalds /* These must appear regardless of . */ 155*1da177e4SLinus Torvalds} 156