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