11.7Suebayasi/* $NetBSD: kern.ldscript,v 1.9 2015/08/24 08:13:07 uebayasi Exp $ */ 21.2Smatt 31.6Smrg/* ldscript for NetBSD/powerpc kernels and LKMs, based on elf32ppc.x */ 41.6SmrgOUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", 51.6Smrg "elf32-powerpc") 61.6SmrgOUTPUT_ARCH(powerpc:common) 71.2SmattENTRY(_start) 81.2Smatt/* Do we need any of these? 91.2Smatt __DYNAMIC = 0; */ 101.2Smatt_DYNAMIC_LINK = 0; 111.2SmattSECTIONS 121.2Smatt{ 131.2Smatt /* Read-only sections, merged into text segment. Assumes the 141.2Smatt kernel Makefile sets the start address via -Ttext. */ 151.2Smatt .text : 161.2Smatt { 171.2Smatt _ftext = . ; 181.6Smrg PROVIDE_HIDDEN (__eprol = .); 191.2Smatt *(.text) 201.6Smrg *(.text.unlikely .text.*_unlikely) 211.6Smrg *(.text.exit .text.exit.*) 221.6Smrg *(.text.startup .text.startup.*) 231.6Smrg *(.text.hot .text.hot.*) 241.6Smrg *(.text.* .gnu.linkonce.t.*) 251.2Smatt __stub_start = .; 261.2Smatt *(.stub) 271.2Smatt __stub_end = .; 281.4Smatt __stub_pmap_start = .; 291.4Smatt *(.stub.pmap) 301.4Smatt __stub_pmap_end = .; 311.6Smrg /* .gnu.warning sections are handled specially by elf32.em. */ 321.2Smatt *(.gnu.warning) 331.6Smrg *(.glink) 341.2Smatt } =0 351.2Smatt _etext = .; 361.6Smrg PROVIDE (__etext = .); 371.6Smrg PROVIDE (_etext = .); 381.2Smatt PROVIDE (etext = .); 391.6Smrg .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 401.6Smrg .rodata1 : { *(.rodata1) } 411.6Smrg .sdata2 : 421.6Smrg { 431.6Smrg PROVIDE (_SDA2_BASE_ = 32768); 441.6Smrg *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) 451.6Smrg } 461.6Smrg .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } 471.6Smrg /*.jcr : { KEEP (*(.jcr)) } */ /* XXX??? */ 481.2Smatt .reginfo : { *(.reginfo) } 491.2Smatt/* . = . + 0x1000; */ 501.6Smrg .data : 511.2Smatt { 521.2Smatt _fdata = . ; 531.6Smrg *(.data .data.* .gnu.linkonce.d.*) 541.6Smrg SORT(CONSTRUCTORS) 551.2Smatt } 561.6Smrg .data1 : { *(.data1) } 571.3Smatt . = ALIGN(32); /* COHERENCY UNIT */ 581.3Smatt .data.cacheline_aligned : { *(.data.cacheline_aligned) } 591.3Smatt . = ALIGN(32); /* COHERENCY UNIT */ 601.3Smatt .data.read_mostly : { *(.data.read_mostly) } 611.3Smatt . = ALIGN(32); /* COHERENCY UNIT */ 621.2Smatt _gp = ALIGN(16) + 0x7ff0; 631.2Smatt .lit8 : { *(.lit8) } 641.2Smatt .lit4 : { *(.lit4) } 651.6Smrg .sdata : 661.6Smrg { 671.6Smrg PROVIDE (_SDA_BASE_ = 32768); 681.6Smrg *(.sdata .sdata.* .gnu.linkonce.s.*) 691.6Smrg } 701.6Smrg _edata = .; PROVIDE (edata = .); 711.6Smrg . = .; 721.2Smatt __bss_start = .; 731.2Smatt _fbss = .; 741.6Smrg .sbss : 751.2Smatt { 761.6Smrg PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .); 771.6Smrg *(.dynsbss) 781.6Smrg *(.sbss .sbss.* .gnu.linkonce.sb.*) 791.6Smrg *(.scommon) 801.6Smrg PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .); 811.6Smrg } 821.6Smrg .bss : 831.6Smrg { 841.7Suebayasi *(.dynbss) 851.7Suebayasi *(.bss .bss.* .gnu.linkonce.b.*) 861.7Suebayasi *(COMMON) 871.7Suebayasi /* Align here to ensure that the .bss section occupies space up to 881.7Suebayasi _end. Align after .bss to ensure correct alignment even if the 891.7Suebayasi .bss section disappears because there are no input sections. 901.7Suebayasi FIXME: Why do we need it? When there is no .bss section, we don't 911.7Suebayasi pad the .data section. */ 921.7Suebayasi . = ALIGN(. != 0 ? 32 / 8 : 1); 931.2Smatt } 941.6Smrg . = ALIGN(32 / 8); 951.6Smrg . = ALIGN(32 / 8); 961.6Smrg __end = .; 971.6Smrg _end = .; PROVIDE (end = .); 981.6Smrg /* . = DATA_SEGMENT_END (.); */ 991.2Smatt} 100