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