OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
  . = 0x00000000;

  __text_start = .;
  .text      :
  {
    *(.vectors)
    *(.text)
    *(.text.*)
  } =0

  __text_end = .;
  
  __rodata_start = .;
  .rodata   : { *(.rodata) *(.rodata.*)}
  __rodata_end = .;
  	
	. = 0x40000000;		/*Data in SRAM*/
	
  __data_start = .;
  . = ALIGN(4);
  .data : 
  {	
    	*(.data)
    	*(.data.*)
  }
  __data_end = .;

  . = ALIGN(4);
  __bss_start = __data_end;
  .bss       :
  {
   *(.bss)
   *(.bss.*)
   *(COMMON)
   . = ALIGN(4);
  }
  . = ALIGN(4);
  __bss_end = .;

  . = ALIGN(4);
  __UndStack_start = __bss_end;
  .UndStack : { *(.UndStack) }
  __UndStack_end = ( __UndStack_start + 0x00000100 );
	
  . = ALIGN(4);
  __IRQStack_start = __UndStack_end;
  .IRQStack : { *(.IRQStack) }
  __IRQStack_end = ( __IRQStack_start + 0x00000400 );
	
  . = ALIGN(4);
  __FIQStack_start = __IRQStack_end;
  .FIQStack : { *(.FIQStack) }
  __FIQStack_end = ( __FIQStack_start + 0x00000400 );
	
  . = ALIGN(4);
  __SVCStack_start = __FIQStack_end;
  .SVCStack : { *(.SVCStack) }
  __SVCStack_end = ( __SVCStack_start + 0x00000400 );
	
  . = ALIGN(4);
  __ABTStack_start = __SVCStack_end;
  .ABTStack : { *(.ABTStack) }
  __ABTStack_end = ( __ABTStack_start + 0x00000400 );
  
    . = ALIGN(4);
  __USRStack_start = __ABTStack_end;
  .USRStack : { *(.USRStack) }
  __USRStack_end = ( __USRStack_start + 0x00000400 );
	
  . = ALIGN(4);
  __Heap_start = __USRStack_end;
  .Heap : { *(.Heap) }
  __Heap_end = (__Heap_start + 0x00004000);


  /* Stabs debugging sections.  */
  .stab 0 : { *(.stab) }
  .stabstr 0 : { *(.stabstr) }
  .stab.excl 0 : { *(.stab.excl) }
  .stab.exclstr 0 : { *(.stab.exclstr) }
  .stab.index 0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment 0 : { *(.comment) }

  _end = .;
}
