kern.ldscript revision 1.5
11.5Suebayasi/*	$NetBSD: kern.ldscript,v 1.5 2015/08/20 06:48:25 uebayasi Exp $	*/
21.1Sthorpej
31.2SthorpejOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
41.2Sthorpej	      "elf32-littlearm")
51.1SthorpejOUTPUT_ARCH(arm)
61.1SthorpejENTRY(KERNEL_BASE_phys)
71.1SthorpejSECTIONS
81.1Sthorpej{
91.1Sthorpej  KERNEL_BASE_phys = 0x0000c000;
101.1Sthorpej  KERNEL_BASE_virt = 0xf000c000;
111.1Sthorpej
121.1Sthorpej  /* Kernel start: */
131.1Sthorpej  .start (KERNEL_BASE_phys) :
141.1Sthorpej  {
151.1Sthorpej    *(.start)
161.1Sthorpej  } =0
171.1Sthorpej
181.1Sthorpej  /* Read-only sections, merged into text segment: */
191.1Sthorpej  .text (KERNEL_BASE_virt + SIZEOF(.start)) :
201.1Sthorpej  AT (LOADADDR(.start) + SIZEOF(.start))
211.1Sthorpej  {
221.1Sthorpej    *(.text)
231.1Sthorpej    *(.text.*)
241.1Sthorpej    *(.stub)
251.1Sthorpej    *(.glue_7t) *(.glue_7)
261.1Sthorpej    *(.rodata) *(.rodata.*)
271.1Sthorpej  } =0
281.4Smatt  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
291.4Smatt  PROVIDE (__exidx_start = .);
301.4Smatt  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
311.4Smatt  PROVIDE (__exidx_end = .);
321.1Sthorpej  PROVIDE (__etext = .);
331.1Sthorpej  PROVIDE (_etext = .);
341.1Sthorpej  PROVIDE (etext = .);
351.1Sthorpej  /* Adjust the address for the data segment to start on the next page
361.1Sthorpej     boundary.  */
371.1Sthorpej  . = ALIGN(0x8000);
381.1Sthorpej  .data    :
391.3Suwe  AT (LOADADDR(.text) + (ADDR(.data) - ADDR(.text)))
401.1Sthorpej  {
411.1Sthorpej    __data_start = . ;
421.1Sthorpej    *(.data)
431.1Sthorpej    *(.data.*)
441.1Sthorpej  }
451.3Suwe  .sdata     :
461.3Suwe  AT (LOADADDR(.data) + (ADDR(.sdata) - ADDR(.data)))
471.1Sthorpej  {
481.5Suebayasi    *(.sdata)
491.1Sthorpej    *(.sdata.*)
501.1Sthorpej  }
511.1Sthorpej  _edata = .;
521.1Sthorpej  PROVIDE (edata = .);
531.1Sthorpej  __bss_start = .;
541.1Sthorpej  __bss_start__ = .;
551.1Sthorpej  .sbss      :
561.1Sthorpej  {
571.1Sthorpej    PROVIDE (__sbss_start = .);
581.1Sthorpej    PROVIDE (___sbss_start = .);
591.1Sthorpej    *(.dynsbss)
601.1Sthorpej    *(.sbss)
611.1Sthorpej    *(.sbss.*)
621.1Sthorpej    *(.scommon)
631.1Sthorpej    PROVIDE (__sbss_end = .);
641.1Sthorpej    PROVIDE (___sbss_end = .);
651.1Sthorpej  }
661.1Sthorpej  .bss       :
671.1Sthorpej  {
681.1Sthorpej   *(.dynbss)
691.1Sthorpej   *(.bss)
701.1Sthorpej   *(.bss.*)
711.1Sthorpej   *(COMMON)
721.1Sthorpej   /* Align here to ensure that the .bss section occupies space up to
731.1Sthorpej      _end.  Align after .bss to ensure correct alignment even if the
741.1Sthorpej      .bss section disappears because there are no input sections.  */
751.1Sthorpej   . = ALIGN(32 / 8);
761.1Sthorpej  }
771.1Sthorpej  . = ALIGN(32 / 8);
781.1Sthorpej  _end = .;
791.1Sthorpej  _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
801.1Sthorpej  PROVIDE (end = .);
811.1Sthorpej}
82