11.5Smatt/*	$NetBSD: ldscript,v 1.5 2012/08/06 02:14:16 matt Exp $	*/
21.1Smycroft
31.1SmycroftOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
41.1Smycroft	      "elf32-littlearm")
51.1Smycroft
61.1SmycroftOUTPUT_ARCH(arm)
71.1SmycroftENTRY(FLASH)
81.1Smycroft
91.1SmycroftMEMORY
101.1Smycroft{
111.1Smycroft  /* We will locate the .text section in flash, and will run directly
121.1Smycroft     from there just long enough to relocate our .text and .data into
131.1Smycroft     a small chunk of SDRAM starting at (SDRAM + 1M).  */
141.1Smycroft  flash : o = 0x00000000, l = 16M
151.1Smycroft  sdram : o = 0x30000000, l = 1M	/* kernel loads at 0x30200000 */
161.1Smycroft}
171.1Smycroft
181.1SmycroftSECTIONS
191.1Smycroft{
201.1Smycroft  FLASH = 0x00000000;
211.1Smycroft  SDRAM = 0x30000000;
221.1Smycroft
231.5Smatt  /DISCARD/ : { *(.ARM.attributes*) *(.ARM.exidx) }  
241.5Smatt
251.1Smycroft  /* Read-only sections, merged into text segment: */
261.1Smycroft  /* __text_store = FLASH; */
271.1Smycroft  .text      :
281.1Smycroft  AT (FLASH)
291.1Smycroft  {
301.1Smycroft    *(.vectors)
311.1Smycroft    __text_store = . - SDRAM;
321.1Smycroft    *(.text)
331.1Smycroft    *(.text.*)
341.1Smycroft    *(.stub)
351.1Smycroft    *(.glue_7t) *(.glue_7)
361.1Smycroft    *(.rodata) *(.rodata.*)
371.1Smycroft  } > sdram = 0
381.1Smycroft  PROVIDE (__etext = .);
391.1Smycroft  PROVIDE (_etext = .);
401.1Smycroft  PROVIDE (etext = .);
411.1Smycroft  __data_store = FLASH + SIZEOF(.text);
421.1Smycroft  .data    :
431.1Smycroft  AT (LOADADDR(.text) + SIZEOF(.text))
441.1Smycroft  {
451.1Smycroft    __data_start = . ;
461.1Smycroft    *(.data)
471.1Smycroft    *(.data.*)
481.1Smycroft  } > sdram
491.1Smycroft  .sdata     : 
501.1Smycroft  AT (LOADADDR(.data) + SIZEOF(.data))
511.1Smycroft  {
521.1Smycroft    *(.sdata) 
531.1Smycroft    *(.sdata.*)
541.2Sjoff    . = ALIGN(32 / 8);
551.1Smycroft  } > sdram
561.1Smycroft  _edata = .;
571.1Smycroft  PROVIDE (edata = .);
581.1Smycroft  __bss_start = .;
591.1Smycroft  __bss_start__ = .;
601.1Smycroft  .sbss      :
611.4Sskrll  AT (ADDR(.sbss))
621.1Smycroft  {
631.1Smycroft    PROVIDE (__sbss_start = .);
641.1Smycroft    PROVIDE (___sbss_start = .);
651.1Smycroft    *(.dynsbss)
661.1Smycroft    *(.sbss)
671.1Smycroft    *(.sbss.*)
681.1Smycroft    *(.scommon)
691.1Smycroft    PROVIDE (__sbss_end = .);
701.1Smycroft    PROVIDE (___sbss_end = .);
711.1Smycroft  } > sdram
721.1Smycroft  .bss       :
731.4Sskrll  AT (ADDR(.bss))
741.1Smycroft  {
751.1Smycroft    *(.dynbss)
761.1Smycroft    *(.bss)
771.1Smycroft    *(.bss.*)
781.1Smycroft    *(COMMON)
791.1Smycroft    /* Align here to ensure that the .bss section occupies space up to
801.1Smycroft       _end.  Align after .bss to ensure correct alignment even if the
811.1Smycroft       .bss section disappears because there are no input sections.  */
821.1Smycroft    . = ALIGN(32 / 8);
831.1Smycroft  } > sdram
841.1Smycroft  . = ALIGN(32 / 8);
851.1Smycroft  _end = .;
861.1Smycroft  _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
871.1Smycroft  PROVIDE (end = .);
881.1Smycroft  /* .image   (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : */
891.1Smycroft  .image   (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) :
901.1Smycroft  AT (LOADADDR(.sdata) + SIZEOF(.sdata))
911.1Smycroft  {
921.1Smycroft    *(.image)
931.1Smycroft  }
941.1Smycroft
951.1Smycroft  __rom_size__ = LOADADDR(.image) + SIZEOF(.image);
961.1Smycroft}
971.1Smycroft
98