+2003-12-03  Dmitry Diky  <diwil@mail.ru>
+       
+       * scripttempl/elf32msp430.sc (HEAP_SECTION_MSP430): New section for
+       forthcoming devices.
+       (_etext): provide this defenition for all scripts.
+
 2003-12-02  Kazu Hirata  <kazu@cs.umass.edu>
 
        * emultempl/beos.em: Remove ARGSUSED.
 
+#!/bin/sh
+
+HEAP_SECTION_MSP430=" "
+HEAP_MEMORY_MSP430=" "
+
+if test ${GOT_HEAP_MSP-0} -ne 0 
+then 
+HEAP_SECTION_MSP430=".heap ${RELOCATING-0} :
+  {
+    ${RELOCATING+ PROVIDE (__heap_data_start = .) ; }
+    *(.heap*)
+    ${RELOCATING+ PROVIDE (_heap_data_end = .) ; }
+    ${RELOCATING+. = ALIGN(2);}
+    ${RELOCATING+ PROVIDE (__heap_bottom = .) ; }
+    ${RELOCATING+ PROVIDE (__heap_top = ${HEAP_START} + ${HEAP_LENGTH}) ; }
+  } ${RELOCATING+ > heap}"
+HEAP_MEMORY_MSP430="heap(rwx)          : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH"
+fi
+
+
 cat <<EOF
 OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
 OUTPUT_ARCH(${ARCH})
   bootloader(rx)       : ORIGIN = 0x0c00,      LENGTH = 1K
   infomem(rx)          : ORIGIN = 0x1000,      LENGTH = 256
   infomemnobits(rx)    : ORIGIN = 0x1000,      LENGTH = 256
+  ${HEAP_MEMORY_MSP430}
 }
 
 SECTIONS
     *(.fini0)  /* Infinite loop after program termination.  */
     *(.fini)
 
-    ${RELOCATING+ _etext = . ; }
+    _etext = .;
   } ${RELOCATING+ > text}
 
   .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
     ${RELOCATING+ _vectors_end = . ; }
   } ${RELOCATING+ > vectors}
 
+  ${HEAP_SECTION_MSP430}
 
   /* Stabs debugging sections.  */
   .stab 0 : { *(.stab) } 
   PROVIDE (__data_end_rom   = _etext + SIZEOF (.data)) ;
   PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
   PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
+  PROVIDE (__subdevice_has_heap = ${GOT_HEAP_MSP-0}) ;
 }
 EOF