summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/emulparams/msp430elf.sh2
-rw-r--r--ld/scripttempl/elf32msp430.sc3
-rw-r--r--ld/scripttempl/elf32msp430_3.sc3
-rw-r--r--sim/testsuite/sim/msp430/ChangeLog6
-rw-r--r--sim/testsuite/sim/msp430/testutils.inc34
6 files changed, 53 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 3aa46ed88e..528cc6ed39 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2016-01-05 Nick Clifton <nickc@redhat.com>
+
+ * emulparams/msp430elf.sh (RAM_START): Move to 0x500 - above the
+ MSP430 hardware multiply address range.
+ * scripttempl/elf32msp430.sc (__romdatastart): Define.
+ (__romdatacopysize): Define.
+ * scripttempl/elf32msp430_3.sc: Likewise.
+
2016-01-04 Maciej W. Rozycki <macro@imgtec.com>
* emultempl/mipself.em (PARSE_AND_LIST_PROLOGUE): Convert
diff --git a/ld/emulparams/msp430elf.sh b/ld/emulparams/msp430elf.sh
index a76e9ee30a..e9d02375d3 100644
--- a/ld/emulparams/msp430elf.sh
+++ b/ld/emulparams/msp430elf.sh
@@ -13,6 +13,6 @@ EMBEDDED=yes
ARCH=msp:14
ROM_START=0x8000
ROM_SIZE=0x7fe0
-RAM_START=0x0200
+RAM_START=0x0500
RAM_SIZE=1K
STACK=0x600
diff --git a/ld/scripttempl/elf32msp430.sc b/ld/scripttempl/elf32msp430.sc
index 78c7c12188..50b7ddb4bb 100644
--- a/ld/scripttempl/elf32msp430.sc
+++ b/ld/scripttempl/elf32msp430.sc
@@ -269,6 +269,9 @@ SECTIONS
${RELOCATING+ _edata = . ; }
} ${RELOCATING+ > data ${RELOCATING+AT> text}}
+ __romdatastart = LOADADDR(.data);
+ __romdatacopysize = SIZEOF(.data);
+
.bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
{
${RELOCATING+. = ALIGN(2);}
diff --git a/ld/scripttempl/elf32msp430_3.sc b/ld/scripttempl/elf32msp430_3.sc
index 7a1308139b..7ad04e1032 100644
--- a/ld/scripttempl/elf32msp430_3.sc
+++ b/ld/scripttempl/elf32msp430_3.sc
@@ -147,6 +147,9 @@ SECTIONS
${RELOCATING+ _edata = . ; }
} ${RELOCATING+ > data ${RELOCATING+AT> text}}
+ __romdatastart = LOADADDR(.data);
+ __romdatacopysize = SIZEOF(.data);
+
.bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
{
${RELOCATING+. = ALIGN(2);}
diff --git a/sim/testsuite/sim/msp430/ChangeLog b/sim/testsuite/sim/msp430/ChangeLog
index d26efadac6..458ee21873 100644
--- a/sim/testsuite/sim/msp430/ChangeLog
+++ b/sim/testsuite/sim/msp430/ChangeLog
@@ -1,3 +1,9 @@
+2016-01-05 Nick Clifton <nickc@redhat.com>
+
+ * testutils.inc (__pass): Use the LMA addresses of the _passmsg
+ symbol.
+ (__fail): Likewise.
+
2014-03-10 Mike Frysinger <vapier@gentoo.org>
* add.s, allinsn.exp, testutils.inc: New files.
diff --git a/sim/testsuite/sim/msp430/testutils.inc b/sim/testsuite/sim/msp430/testutils.inc
index 6c540b1042..1ddef23f7f 100644
--- a/sim/testsuite/sim/msp430/testutils.inc
+++ b/sim/testsuite/sim/msp430/testutils.inc
@@ -9,13 +9,43 @@
.global __pass
.type __pass, function
__pass:
- write 1, _passmsg, 5
+ # Note - we cannot just invoke:
+ #
+ # write 1, _passmsg, 5
+ #
+ # here because _passmsg contains the run-time (VMA) address of
+ # the pass string (probably 0x500) not the load-time (LMA)
+ # address (probably 0x804c). Normally using the VMA address
+ # would be the correct thing to do - *if* there was some start
+ # up code which copied data from LMA to VMA. But we have no
+ # start up code, so the data still resides at the LMA
+ # address. Hence we use __romdatastart instead.
+ #
+ # Note - we are cheating because the address that we pass to
+ # "write" should actually be:
+ #
+ # __romdatastart + (_passmsg - __datastart)
+ #
+ # but the assembler cannot cope with this expression. So we
+ # cheat and use the fact that we know that _passmsg is the
+ # first string in the .data section and so (_passmsg -
+ # __datastart) evaluates to zero.
+
+ write 1, __romdatastart, 5
exit 0
.global __fail
.type __fail, function
__fail:
- write 1, _failmsg, 5
+ # Note - see above.
+ #
+ # write 1, _failmsg, 5
+ #
+ # This time we use the fact that _passmsg is aligned to a
+ # 16 byte boundary to work out that (_failmsg - __datastart)
+ # evaluates to 0x10.
+
+ write 1, __romdatastart + 0x10, 5
exit 1
.data