1*ce93b3daSuebayasi/* $NetBSD: kern.ldscript,v 1.9 2015/08/24 08:13:07 uebayasi Exp $ */ 2b8ea2c8cSmatt 32141bdc7Smrg/* ldscript for NetBSD/powerpc kernels and LKMs, based on elf32ppc.x */ 42141bdc7SmrgOUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", 52141bdc7Smrg "elf32-powerpc") 62141bdc7SmrgOUTPUT_ARCH(powerpc:common) 7b8ea2c8cSmattENTRY(_start) 8b8ea2c8cSmatt/* Do we need any of these? 9b8ea2c8cSmatt __DYNAMIC = 0; */ 10b8ea2c8cSmatt_DYNAMIC_LINK = 0; 11b8ea2c8cSmattSECTIONS 12b8ea2c8cSmatt{ 13b8ea2c8cSmatt /* Read-only sections, merged into text segment. Assumes the 14b8ea2c8cSmatt kernel Makefile sets the start address via -Ttext. */ 15b8ea2c8cSmatt .text : 16b8ea2c8cSmatt { 17b8ea2c8cSmatt _ftext = . ; 182141bdc7Smrg PROVIDE_HIDDEN (__eprol = .); 19b8ea2c8cSmatt *(.text) 202141bdc7Smrg *(.text.unlikely .text.*_unlikely) 212141bdc7Smrg *(.text.exit .text.exit.*) 222141bdc7Smrg *(.text.startup .text.startup.*) 232141bdc7Smrg *(.text.hot .text.hot.*) 242141bdc7Smrg *(.text.* .gnu.linkonce.t.*) 25b8ea2c8cSmatt __stub_start = .; 26b8ea2c8cSmatt *(.stub) 27b8ea2c8cSmatt __stub_end = .; 28e13c032fSmatt __stub_pmap_start = .; 29e13c032fSmatt *(.stub.pmap) 30e13c032fSmatt __stub_pmap_end = .; 312141bdc7Smrg /* .gnu.warning sections are handled specially by elf32.em. */ 32b8ea2c8cSmatt *(.gnu.warning) 332141bdc7Smrg *(.glink) 34b8ea2c8cSmatt } =0 35b8ea2c8cSmatt _etext = .; 362141bdc7Smrg PROVIDE (__etext = .); 372141bdc7Smrg PROVIDE (_etext = .); 38b8ea2c8cSmatt PROVIDE (etext = .); 392141bdc7Smrg .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 402141bdc7Smrg .rodata1 : { *(.rodata1) } 412141bdc7Smrg .sdata2 : 422141bdc7Smrg { 432141bdc7Smrg PROVIDE (_SDA2_BASE_ = 32768); 442141bdc7Smrg *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) 452141bdc7Smrg } 462141bdc7Smrg .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } 472141bdc7Smrg /*.jcr : { KEEP (*(.jcr)) } */ /* XXX??? */ 48b8ea2c8cSmatt .reginfo : { *(.reginfo) } 49b8ea2c8cSmatt/* . = . + 0x1000; */ 50b8ea2c8cSmatt .data : 51b8ea2c8cSmatt { 52b8ea2c8cSmatt _fdata = . ; 532141bdc7Smrg *(.data .data.* .gnu.linkonce.d.*) 542141bdc7Smrg SORT(CONSTRUCTORS) 55b8ea2c8cSmatt } 5688bcc332Smatt .data1 : { *(.data1) } 5788bcc332Smatt . = ALIGN(32); /* COHERENCY UNIT */ 5888bcc332Smatt .data.cacheline_aligned : { *(.data.cacheline_aligned) } 5988bcc332Smatt . = ALIGN(32); /* COHERENCY UNIT */ 6088bcc332Smatt .data.read_mostly : { *(.data.read_mostly) } 6188bcc332Smatt . = ALIGN(32); /* COHERENCY UNIT */ 62b8ea2c8cSmatt _gp = ALIGN(16) + 0x7ff0; 63b8ea2c8cSmatt .lit8 : { *(.lit8) } 64b8ea2c8cSmatt .lit4 : { *(.lit4) } 652141bdc7Smrg .sdata : 662141bdc7Smrg { 672141bdc7Smrg PROVIDE (_SDA_BASE_ = 32768); 682141bdc7Smrg *(.sdata .sdata.* .gnu.linkonce.s.*) 692141bdc7Smrg } 702141bdc7Smrg _edata = .; PROVIDE (edata = .); 712141bdc7Smrg . = .; 72b8ea2c8cSmatt __bss_start = .; 73b8ea2c8cSmatt _fbss = .; 742141bdc7Smrg .sbss : 752141bdc7Smrg { 762141bdc7Smrg PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .); 772141bdc7Smrg *(.dynsbss) 782141bdc7Smrg *(.sbss .sbss.* .gnu.linkonce.sb.*) 792141bdc7Smrg *(.scommon) 802141bdc7Smrg PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .); 812141bdc7Smrg } 82b8ea2c8cSmatt .bss : 83b8ea2c8cSmatt { 842141bdc7Smrg *(.dynbss) 852141bdc7Smrg *(.bss .bss.* .gnu.linkonce.b.*) 86b8ea2c8cSmatt *(COMMON) 872141bdc7Smrg /* Align here to ensure that the .bss section occupies space up to 882141bdc7Smrg _end. Align after .bss to ensure correct alignment even if the 892141bdc7Smrg .bss section disappears because there are no input sections. 902141bdc7Smrg FIXME: Why do we need it? When there is no .bss section, we don't 912141bdc7Smrg pad the .data section. */ 922141bdc7Smrg . = ALIGN(. != 0 ? 32 / 8 : 1); 93b8ea2c8cSmatt } 942141bdc7Smrg . = ALIGN(32 / 8); 952141bdc7Smrg . = ALIGN(32 / 8); 962141bdc7Smrg __end = .; 972141bdc7Smrg _end = .; PROVIDE (end = .); 982141bdc7Smrg /* . = DATA_SEGMENT_END (.); */ 99b8ea2c8cSmatt} 100