11.1Smatt/* Default linker script, for normal executables */ 21.1SmattOUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", 31.1Smatt "elf64-powerpc") 41.1SmattOUTPUT_ARCH(powerpc:common64) 51.1SmattENTRY(_start) 61.1SmattSECTIONS 71.1Smatt{ 81.1Smatt /* Read-only sections, merged into text segment. Assumes the 91.1Smatt kernel Makefile sets the start address via -Ttext. */ 101.1Smatt .text : 111.1Smatt { 121.1Smatt PROVIDE_HIDDEN (__eprol = .); 131.1Smatt *(.text) 141.1Smatt *(.text.unlikely .text.*_unlikely) 151.1Smatt *(.text.exit .text.exit.*) 161.1Smatt *(.text.startup .text.startup.*) 171.1Smatt *(.text.hot .text.hot.*) 181.1Smatt *(.text.* .gnu.linkonce.t.*) 191.1Smatt __stub_start = .; 201.1Smatt *(.stub) 211.1Smatt __stub_end = .; 221.1Smatt __stub_pmap_start = .; 231.1Smatt *(.stub.pmap) 241.1Smatt __stub_pmap_end = .; 251.1Smatt /* .gnu.warning sections are handled specially by elf32.em. */ 261.1Smatt *(.gnu.warning) 271.1Smatt *(.glink) 281.1Smatt } =0x60000000 291.1Smatt _etext = .; 301.1Smatt PROVIDE (__etext = .); 311.1Smatt PROVIDE (_etext = .); 321.1Smatt PROVIDE (etext = .); 331.1Smatt .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 341.1Smatt .rodata1 : { *(.rodata1) } 351.1Smatt .sdata2 : 361.1Smatt { 371.1Smatt *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) 381.1Smatt } 391.1Smatt .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } 401.1Smatt .jcr : { KEEP (*(.jcr)) } 411.1Smatt . = DATA_SEGMENT_RELRO_END (0, .); 421.1Smatt .data : 431.1Smatt { 441.1Smatt _fdata = .; 451.1Smatt *(.data .data.* .gnu.linkonce.d.*) 461.1Smatt SORT(CONSTRUCTORS) 471.1Smatt } 481.1Smatt .data1 : { *(.data1) } 491.1Smatt .toc1 : ALIGN(8) { *(.toc1) } 501.1Smatt .opd : ALIGN(8) { KEEP (*(.opd)) } 511.1Smatt .branch_lt : ALIGN(8) { *(.branch_lt) } 521.1Smatt .got : ALIGN(8) { *(.got .toc) } 531.1Smatt /* We want the small data sections together, so single-instruction offsets 541.1Smatt can access them all, and initialized data all before uninitialized, so 551.1Smatt we can shorten the on-disk segment size. */ 561.1Smatt . = ALIGN(64); /* COHERENCY UNIT */ 571.1Smatt .data.cacheline_aligned : { *(.data.cacheline_aligned) } 581.1Smatt . = ALIGN(64); /* COHERENCY UNIT */ 591.1Smatt .data.read_mostly : { *(.data.read_mostly) } 601.1Smatt . = ALIGN(64); /* COHERENCY UNIT */ 611.1Smatt .sdata : 621.1Smatt { 631.1Smatt *(.sdata .sdata.* .gnu.linkonce.s.*) 641.1Smatt } 651.1Smatt _edata = .; PROVIDE (edata = .); 661.1Smatt __bss_start = .; 671.1Smatt .tocbss : ALIGN(8) { *(.tocbss)} 681.1Smatt .sbss : 691.1Smatt { 701.1Smatt *(.dynsbss) 711.1Smatt *(.sbss .sbss.* .gnu.linkonce.sb.*) 721.1Smatt *(.scommon) 731.1Smatt } 741.1Smatt .plt : { *(.plt) } 751.1Smatt .iplt : { *(.iplt) } 761.1Smatt .bss : 771.1Smatt { 781.2Suebayasi *(.dynbss) 791.2Suebayasi *(.bss .bss.* .gnu.linkonce.b.*) 801.2Suebayasi *(COMMON) 811.2Suebayasi /* Align here to ensure that the .bss section occupies space up to 821.2Suebayasi _end. Align after .bss to ensure correct alignment even if the 831.2Suebayasi .bss section disappears because there are no input sections. 841.2Suebayasi FIXME: Why do we need it? When there is no .bss section, we don't 851.2Suebayasi pad the .data section. */ 861.2Suebayasi . = ALIGN(. != 0 ? 64 / 8 : 1); 871.1Smatt } 881.1Smatt . = ALIGN(64 / 8); 891.1Smatt . = ALIGN(64 / 8); 901.1Smatt _end = .; PROVIDE (end = .); 911.1Smatt . = DATA_SEGMENT_END (.); 921.1Smatt} 93