1*bcd04d1dSmatt/*	$NetBSD: ldscript,v 1.5 2012/08/06 02:14:16 matt Exp $	*/
279290227Smycroft
379290227SmycroftOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
479290227Smycroft	      "elf32-littlearm")
579290227Smycroft
679290227SmycroftOUTPUT_ARCH(arm)
779290227SmycroftENTRY(FLASH)
879290227Smycroft
979290227SmycroftMEMORY
1079290227Smycroft{
1179290227Smycroft  /* We will locate the .text section in flash, and will run directly
1279290227Smycroft     from there just long enough to relocate our .text and .data into
1379290227Smycroft     a small chunk of SDRAM starting at (SDRAM + 1M).  */
1479290227Smycroft  flash : o = 0x00000000, l = 16M
1579290227Smycroft  sdram : o = 0x30000000, l = 1M	/* kernel loads at 0x30200000 */
1679290227Smycroft}
1779290227Smycroft
1879290227SmycroftSECTIONS
1979290227Smycroft{
2079290227Smycroft  FLASH = 0x00000000;
2179290227Smycroft  SDRAM = 0x30000000;
2279290227Smycroft
23*bcd04d1dSmatt  /DISCARD/ : { *(.ARM.attributes*) *(.ARM.exidx) }
24*bcd04d1dSmatt
2579290227Smycroft  /* Read-only sections, merged into text segment: */
2679290227Smycroft  /* __text_store = FLASH; */
2779290227Smycroft  .text      :
2879290227Smycroft  AT (FLASH)
2979290227Smycroft  {
3079290227Smycroft    *(.vectors)
3179290227Smycroft    __text_store = . - SDRAM;
3279290227Smycroft    *(.text)
3379290227Smycroft    *(.text.*)
3479290227Smycroft    *(.stub)
3579290227Smycroft    *(.glue_7t) *(.glue_7)
3679290227Smycroft    *(.rodata) *(.rodata.*)
3779290227Smycroft  } > sdram = 0
3879290227Smycroft  PROVIDE (__etext = .);
3979290227Smycroft  PROVIDE (_etext = .);
4079290227Smycroft  PROVIDE (etext = .);
4179290227Smycroft  __data_store = FLASH + SIZEOF(.text);
4279290227Smycroft  .data    :
4379290227Smycroft  AT (LOADADDR(.text) + SIZEOF(.text))
4479290227Smycroft  {
4579290227Smycroft    __data_start = . ;
4679290227Smycroft    *(.data)
4779290227Smycroft    *(.data.*)
4879290227Smycroft  } > sdram
4979290227Smycroft  .sdata     :
5079290227Smycroft  AT (LOADADDR(.data) + SIZEOF(.data))
5179290227Smycroft  {
5279290227Smycroft    *(.sdata)
5379290227Smycroft    *(.sdata.*)
54b6d96c3cSjoff    . = ALIGN(32 / 8);
5579290227Smycroft  } > sdram
5679290227Smycroft  _edata = .;
5779290227Smycroft  PROVIDE (edata = .);
5879290227Smycroft  __bss_start = .;
5979290227Smycroft  __bss_start__ = .;
6079290227Smycroft  .sbss      :
61dc89c663Sskrll  AT (ADDR(.sbss))
6279290227Smycroft  {
6379290227Smycroft    PROVIDE (__sbss_start = .);
6479290227Smycroft    PROVIDE (___sbss_start = .);
6579290227Smycroft    *(.dynsbss)
6679290227Smycroft    *(.sbss)
6779290227Smycroft    *(.sbss.*)
6879290227Smycroft    *(.scommon)
6979290227Smycroft    PROVIDE (__sbss_end = .);
7079290227Smycroft    PROVIDE (___sbss_end = .);
7179290227Smycroft  } > sdram
7279290227Smycroft  .bss       :
73dc89c663Sskrll  AT (ADDR(.bss))
7479290227Smycroft  {
7579290227Smycroft    *(.dynbss)
7679290227Smycroft    *(.bss)
7779290227Smycroft    *(.bss.*)
7879290227Smycroft    *(COMMON)
7979290227Smycroft    /* Align here to ensure that the .bss section occupies space up to
8079290227Smycroft       _end.  Align after .bss to ensure correct alignment even if the
8179290227Smycroft       .bss section disappears because there are no input sections.  */
8279290227Smycroft    . = ALIGN(32 / 8);
8379290227Smycroft  } > sdram
8479290227Smycroft  . = ALIGN(32 / 8);
8579290227Smycroft  _end = .;
8679290227Smycroft  _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
8779290227Smycroft  PROVIDE (end = .);
8879290227Smycroft  /* .image   (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : */
8979290227Smycroft  .image   (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) :
9079290227Smycroft  AT (LOADADDR(.sdata) + SIZEOF(.sdata))
9179290227Smycroft  {
9279290227Smycroft    *(.image)
9379290227Smycroft  }
9479290227Smycroft
9579290227Smycroft  __rom_size__ = LOADADDR(.image) + SIZEOF(.image);
9679290227Smycroft}
9779290227Smycroft
98