]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
Support of mspgcc 4.5.2
authorVladimir Burian <buriavl2@fel.cvut.cz>
Sat, 28 May 2011 21:39:57 +0000 (23:39 +0200)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Sat, 28 May 2011 23:38:33 +0000 (01:38 +0200)
Linker script has different structure. Meaning of "sfrb" and "sfrw" is
also different - hardware header is rewritten.

arch/msp430/mach-openmsp430/defines/hardware.h
board/msp430/virtex2/ldscripts/Makefile.omk
board/msp430/virtex2/ldscripts/memory.x [new file with mode: 0644]
board/msp430/virtex2/ldscripts/openmsp430.ld
board/msp430/virtex2/ldscripts/periph.x [new file with mode: 0644]

index 3bd495fd59f81c2488c19e2b9be73a32482d27aa..68b6a43b06d0d806be4a9288aea307c53393f5ef 100644 (file)
@@ -1,23 +1,13 @@
 #ifndef HARDWARE_H
 #define HARDWARE_H
 
-#include <io.h>
-
 
 //HW UART registers
-#define UART_OFFSET        0x0100
-
-#define UBAUD_             UART_OFFSET + 00
-#define UTX_               UART_OFFSET + 02
-#define URX_               UART_OFFSET + 04
-#define USTAT_             UART_OFFSET + 06
-#define UIE_               UART_OFFSET + 07
-
-sfrw(UBAUD, UBAUD_);
-sfrb(UTX, UTX_);
-sfrb(URX, URX_);
-sfrb(USTAT, USTAT_);
-sfrb(UIE, UIE_);
+volatile unsigned int  UBAUD asm("0x0100");
+volatile unsigned char UTX   asm("0x0102");
+volatile unsigned char URX   asm("0x0104");
+volatile unsigned char USTAT asm("0x0106");
+volatile unsigned char UIE   asm("0x0107");
 
 
 #endif
index c3fb377032d5a135e9df93fff4c9aee4cda97a58..7a762b2d175fa8caf71a7c7dbb77364840ee673a 100644 (file)
@@ -1 +1,2 @@
-lib_LDSCRIPTS = $(notdir $(wildcard $(SOURCES_DIR)/*.ld*))
\ No newline at end of file
+lib_LDSCRIPTS  = $(notdir $(wildcard $(SOURCES_DIR)/*.ld*))
+lib_LDSCRIPTS += $(notdir $(wildcard $(SOURCES_DIR)/*.x*))
diff --git a/board/msp430/virtex2/ldscripts/memory.x b/board/msp430/virtex2/ldscripts/memory.x
new file mode 100644 (file)
index 0000000..ad8e525
--- /dev/null
@@ -0,0 +1,19 @@
+MEMORY {
+  sfr              : ORIGIN = 0x0000, LENGTH = 0x0010 /* END=0x0010, size 16 */
+  peripheral_8bit  : ORIGIN = 0x0010, LENGTH = 0x00f0 /* END=0x0100, size 240 */
+  peripheral_16bit : ORIGIN = 0x0100, LENGTH = 0x0100 /* END=0x0200, size 256 */
+  ram (wx)         : ORIGIN = 0x0200, LENGTH = 0x2000 /* END=0x2100, size 8K  */
+  infomem          : ORIGIN = 0x1000, LENGTH = 0x0100 /* END=0x1100, size 256 */
+  infob            : ORIGIN = 0x1000, LENGTH = 0x0080 /* END=0x1080, size 128 */
+  infoa            : ORIGIN = 0x1080, LENGTH = 0x0080 /* END=0x1100, size 128 */
+  rom (rx)         : ORIGIN = 0x8000, LENGTH = 0x7fe0 /* END=0xffe0, size 32K */
+  vectors          : ORIGIN = 0xffe0, LENGTH = 0x0020 /* END=0x10000, size 32 */
+  /* Remaining banks are absent */
+  bsl              : ORIGIN = 0x0000, LENGTH = 0x0000
+  infoc            : ORIGIN = 0x0000, LENGTH = 0x0000
+  infod            : ORIGIN = 0x0000, LENGTH = 0x0000
+  far_rom          : ORIGIN = 0x00000000, LENGTH = 0x00000000
+}
+REGION_ALIAS("REGION_TEXT", rom);
+REGION_ALIAS("REGION_DATA", ram);
+REGION_ALIAS("REGION_FAR_ROM", far_rom);
index c1c6c0ad1c267e13f2e3abcfc7683dec418b1fe4..3b2dae37a7411b01731b2a2d25ca314264a3b76e 100644 (file)
@@ -1,15 +1,8 @@
 /* Default linker script, for normal executables */
-OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")
-OUTPUT_ARCH(msp:42)
-MEMORY
-{
-  text   (rx)       : ORIGIN = 0x8000,     LENGTH = 0x7fe0 /* 32K */
-  data   (rwx)      : ORIGIN = 0x0200,     LENGTH = 0x2000 /*  8K */
-  vectors (rw)      : ORIGIN = 0xffe0,     LENGTH = 32
-  bootloader(rx)    : ORIGIN = 0x0c00,     LENGTH = 1K
-  infomem(rx)       : ORIGIN = 0x1000,     LENGTH = 256
-  infomemnobits(rx) : ORIGIN = 0x1000,     LENGTH = 256
-}
+OUTPUT_FORMAT("elf32-msp430")
+OUTPUT_ARCH("msp430")
+INCLUDE memory.x
+INCLUDE periph.x
 SECTIONS
 {
   /* Read-only sections, merged into text segment.  */
@@ -72,101 +65,55 @@ SECTIONS
   /* Internal text space.  */
   .text :
   {
-    . = ALIGN(2);
-    *(.init)
+     . = ALIGN(2);
     KEEP(*(.init))
     *(.init0)  /* Start here after reset.               */
-    KEEP(*(.init0))
     *(.init1)  /* User definable.                       */
-    KEEP(*(.init1))
     *(.init2)  /* Initialize stack.                     */
-    KEEP(*(.init2))
     *(.init3)  /* Initialize hardware, user definable.  */
-    KEEP(*(.init3))
     *(.init4)  /* Copy data to .data, clear bss.        */
-    KEEP(*(.init4))
     *(.init5)  /* User definable.                       */
-    KEEP(*(.init5))
     *(.init6)  /* C++ constructors.                     */
-    KEEP(*(.init6))
     *(.init7)  /* User definable.                       */
-    KEEP(*(.init7))
     *(.init8)  /* User definable.                       */
-    KEEP(*(.init8))
     *(.init9)  /* Call main().                          */
-    KEEP(*(.init9))
-     __ctors_start = . ;
-     *(.ctors)
-     KEEP(*(.ctors))
-     __ctors_end = . ;
-     __dtors_start = . ;
-     *(.dtors)
-     KEEP(*(.dtors))
-     __dtors_end = . ;
-    . = ALIGN(2);
-    *(.text)
-    . = ALIGN(2);
-    *(.text.*)
-    . = ALIGN(2);
-    *(.fini9)  /* Jumps here after main(). User definable.  */
-    KEEP(*(.fini9))
+    *(.fini9)  /* Falls into here after main(). User definable.  */
     *(.fini8)  /* User definable.                           */
-    KEEP(*(.fini8))
     *(.fini7)  /* User definable.                           */
-    KEEP(*(.fini7))
     *(.fini6)  /* C++ destructors.                          */
-    KEEP(*(.fini6))
     *(.fini5)  /* User definable.                           */
-    KEEP(*(.fini5))
     *(.fini4)  /* User definable.                           */
-    KEEP(*(.fini4))
     *(.fini3)  /* User definable.                           */
-    KEEP(*(.fini3))
     *(.fini2)  /* User definable.                           */
-    KEEP(*(.fini2))
     *(.fini1)  /* User definable.                           */
-    KEEP(*(.fini1))
     *(.fini0)  /* Infinite loop after program termination.  */
-    KEEP(*(.fini0))
-    *(.fini)
     KEEP(*(.fini))
-    _etext = .;
-  }  > text
+     . = ALIGN(2);
+     __ctors_start = . ;
+     KEEP(*(.ctors))
+     __ctors_end = . ;
+     __dtors_start = . ;
+     KEEP(*(.dtors))
+     __dtors_end = . ;
+     . = ALIGN(2);
+    *(.text)
+     . = ALIGN(2);
+    *(.text.*)
+     _etext = .;
+  }  > REGION_TEXT
   .data   :
   {
+     . = ALIGN(2);
      PROVIDE (__data_start = .) ;
-    . = ALIGN(2);
     *(.data)
     *(SORT_BY_ALIGNMENT(.data.*))
-    . = ALIGN(2);
+     . = ALIGN(2);
     *(.gnu.linkonce.d*)
-    . = ALIGN(2);
+     . = ALIGN(2);
      _edata = . ;
-  }  > data AT > text
+  }  > REGION_DATA AT > REGION_TEXT
     PROVIDE (__data_load_start = LOADADDR(.data) );
     PROVIDE (__data_size = SIZEOF(.data) );
-  /* Bootloader.  */
-  .bootloader   :
-  {
-     PROVIDE (__boot_start = .) ;
-    *(.bootloader)
-    . = ALIGN(2);
-    *(.bootloader.*)
-  }  > bootloader
-  /* Information memory.  */
-  .infomem   :
-  {
-    *(.infomem)
-    . = ALIGN(2);
-    *(.infomem.*)
-  }  > infomem
-  /* Information memory (not loaded into MPU).  */
-  .infomemnobits   :
-  {
-    *(.infomemnobits)
-    . = ALIGN(2);
-    *(.infomemnobits.*)
-  }  > infomemnobits
   .bss   :
   {
      PROVIDE (__bss_start = .) ;
@@ -175,7 +122,7 @@ SECTIONS
     *(COMMON)
      PROVIDE (__bss_end = .) ;
      _end = . ;
-  }  > data
+  }  > REGION_DATA
     PROVIDE (__bss_size = SIZEOF(.bss) );
   .noinit   :
   {
@@ -185,14 +132,28 @@ SECTIONS
     *(COMMON)
      PROVIDE (__noinit_end = .) ;
      _end = . ;
-  }  > data
+  }  > REGION_DATA
+  /* Information memory.  */
+  .infomem   :
+  {
+    *(.infomem)
+     . = ALIGN(2);
+    *(.infomem.*)
+  }  > infomem
   .vectors  :
   {
      PROVIDE (__vectors_start = .) ;
-    *(.vectors*)
     KEEP(*(.vectors*))
      _vectors_end = . ;
   }  > vectors
+  .fartext :
+  {
+     . = ALIGN(2);
+    *(.fartext)
+     . = ALIGN(2);
+    *(.fartext.*)
+     _efartext = .;
+  }  > REGION_FAR_ROM
   /* Stabs for profiling information*/
   .profiler 0 : { *(.profiler) }
   /* Stabs debugging sections.  */
@@ -210,26 +171,25 @@ SECTIONS
   .debug          0 : { *(.debug) }
   .line           0 : { *(.line) }
   /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
+  .debug_srcinfo  0 : { *(.debug_srcinfo .zdebug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames .zdebug_sfnames) }
   /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
+  .debug_aranges  0 : { *(.debug_aranges .zdebug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
   /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.* .zdebug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev .zdebug_abbrev) }
+  .debug_line     0 : { *(.debug_line .zdebug_line) }
+  .debug_frame    0 : { *(.debug_frame .zdebug_frame) }
+  .debug_str      0 : { *(.debug_str .zdebug_str) }
+  .debug_loc      0 : { *(.debug_loc .zdebug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo .zdebug_macinfo) }
   /* DWARF 3 */
   .debug_pubtypes 0 : { *(.debug_pubtypes) }
   .debug_ranges   0 : { *(.debug_ranges) }
-  PROVIDE (__stack = ORIGIN(data) + LENGTH(data)) ;
-  PROVIDE (__data_start_rom = _etext) ;
-  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 = 0) ;
+   PROVIDE (__stack = ORIGIN(ram) + LENGTH(ram));
+   PROVIDE (__data_start_rom = _etext);
+   PROVIDE (__data_end_rom   = _etext + SIZEOF (.data));
+   PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data));
+   PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit));
 }
diff --git a/board/msp430/virtex2/ldscripts/periph.x b/board/msp430/virtex2/ldscripts/periph.x
new file mode 100644 (file)
index 0000000..f9583e5
--- /dev/null
@@ -0,0 +1,11 @@
+__IE1 = 0x0000;
+__IFG1 = 0x0002;
+__WDTCTL = 0x0120;
+__MPY = 0x0130;
+__MPYS = 0x0132;
+__MAC = 0x0134;
+__MACS = 0x0136;
+__OP2 = 0x0138;
+__RESLO = 0x013A;
+__RESHI = 0x013C;
+__SUMEXT = 0x013E;