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