xref: /netbsd-src/sys/arch/powerpc/conf/kern.ldscript (revision ce93b3da5702ce1edf4d46f9fb716f53daf32f23)
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