1*5a400bbbSmatt/* Default linker script, for normal executables */ 2*5a400bbbSmattOUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", 3*5a400bbbSmatt "elf64-powerpc") 4*5a400bbbSmattOUTPUT_ARCH(powerpc:common64) 5*5a400bbbSmattENTRY(_start) 6*5a400bbbSmattSECTIONS 7*5a400bbbSmatt{ 8*5a400bbbSmatt /* Read-only sections, merged into text segment. Assumes the 9*5a400bbbSmatt kernel Makefile sets the start address via -Ttext. */ 10*5a400bbbSmatt .text : 11*5a400bbbSmatt { 12*5a400bbbSmatt PROVIDE_HIDDEN (__eprol = .); 13*5a400bbbSmatt *(.text) 14*5a400bbbSmatt *(.text.unlikely .text.*_unlikely) 15*5a400bbbSmatt *(.text.exit .text.exit.*) 16*5a400bbbSmatt *(.text.startup .text.startup.*) 17*5a400bbbSmatt *(.text.hot .text.hot.*) 18*5a400bbbSmatt *(.text.* .gnu.linkonce.t.*) 19*5a400bbbSmatt __stub_start = .; 20*5a400bbbSmatt *(.stub) 21*5a400bbbSmatt __stub_end = .; 22*5a400bbbSmatt __stub_pmap_start = .; 23*5a400bbbSmatt *(.stub.pmap) 24*5a400bbbSmatt __stub_pmap_end = .; 25*5a400bbbSmatt /* .gnu.warning sections are handled specially by elf32.em. */ 26*5a400bbbSmatt *(.gnu.warning) 27*5a400bbbSmatt *(.glink) 28*5a400bbbSmatt } =0x60000000 29*5a400bbbSmatt _etext = .; 30*5a400bbbSmatt PROVIDE (__etext = .); 31*5a400bbbSmatt PROVIDE (_etext = .); 32*5a400bbbSmatt PROVIDE (etext = .); 33*5a400bbbSmatt .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 34*5a400bbbSmatt .rodata1 : { *(.rodata1) } 35*5a400bbbSmatt .sdata2 : 36*5a400bbbSmatt { 37*5a400bbbSmatt *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) 38*5a400bbbSmatt } 39*5a400bbbSmatt .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } 40*5a400bbbSmatt .jcr : { KEEP (*(.jcr)) } 41*5a400bbbSmatt . = DATA_SEGMENT_RELRO_END (0, .); 42*5a400bbbSmatt .data : 43*5a400bbbSmatt { 44*5a400bbbSmatt _fdata = .; 45*5a400bbbSmatt *(.data .data.* .gnu.linkonce.d.*) 46*5a400bbbSmatt SORT(CONSTRUCTORS) 47*5a400bbbSmatt } 48*5a400bbbSmatt .data1 : { *(.data1) } 49*5a400bbbSmatt .toc1 : ALIGN(8) { *(.toc1) } 50*5a400bbbSmatt .opd : ALIGN(8) { KEEP (*(.opd)) } 51*5a400bbbSmatt .branch_lt : ALIGN(8) { *(.branch_lt) } 52*5a400bbbSmatt .got : ALIGN(8) { *(.got .toc) } 53*5a400bbbSmatt /* We want the small data sections together, so single-instruction offsets 54*5a400bbbSmatt can access them all, and initialized data all before uninitialized, so 55*5a400bbbSmatt we can shorten the on-disk segment size. */ 56*5a400bbbSmatt . = ALIGN(64); /* COHERENCY UNIT */ 57*5a400bbbSmatt .data.cacheline_aligned : { *(.data.cacheline_aligned) } 58*5a400bbbSmatt . = ALIGN(64); /* COHERENCY UNIT */ 59*5a400bbbSmatt .data.read_mostly : { *(.data.read_mostly) } 60*5a400bbbSmatt . = ALIGN(64); /* COHERENCY UNIT */ 61*5a400bbbSmatt .sdata : 62*5a400bbbSmatt { 63*5a400bbbSmatt *(.sdata .sdata.* .gnu.linkonce.s.*) 64*5a400bbbSmatt } 65*5a400bbbSmatt _edata = .; PROVIDE (edata = .); 66*5a400bbbSmatt __bss_start = .; 67*5a400bbbSmatt .tocbss : ALIGN(8) { *(.tocbss)} 68*5a400bbbSmatt .sbss : 69*5a400bbbSmatt { 70*5a400bbbSmatt *(.dynsbss) 71*5a400bbbSmatt *(.sbss .sbss.* .gnu.linkonce.sb.*) 72*5a400bbbSmatt *(.scommon) 73*5a400bbbSmatt } 74*5a400bbbSmatt .plt : { *(.plt) } 75*5a400bbbSmatt .iplt : { *(.iplt) } 76*5a400bbbSmatt .bss : 77*5a400bbbSmatt { 78*5a400bbbSmatt *(.dynbss) 79*5a400bbbSmatt *(.bss .bss.* .gnu.linkonce.b.*) 80*5a400bbbSmatt *(COMMON) 81*5a400bbbSmatt /* Align here to ensure that the .bss section occupies space up to 82*5a400bbbSmatt _end. Align after .bss to ensure correct alignment even if the 83*5a400bbbSmatt .bss section disappears because there are no input sections. 84*5a400bbbSmatt FIXME: Why do we need it? When there is no .bss section, we don't 85*5a400bbbSmatt pad the .data section. */ 86*5a400bbbSmatt . = ALIGN(. != 0 ? 64 / 8 : 1); 87*5a400bbbSmatt } 88*5a400bbbSmatt . = ALIGN(64 / 8); 89*5a400bbbSmatt . = ALIGN(64 / 8); 90*5a400bbbSmatt _end = .; PROVIDE (end = .); 91*5a400bbbSmatt . = DATA_SEGMENT_END (.); 92*5a400bbbSmatt} 93