From 296ebfbb91bc9453134c467b4bfe8363582674f7 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 5 Jan 2016 16:43:58 +0000 Subject: [PATCH] Fix the execution of the MSP430 simulator testsuite. ld * 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. tests * testutils.inc (__pass): Use the LMA addresses of the _passmsg symbol. (__fail): Likewise. --- ld/ChangeLog | 8 ++++++++ ld/emulparams/msp430elf.sh | 2 +- ld/scripttempl/elf32msp430.sc | 3 +++ ld/scripttempl/elf32msp430_3.sc | 3 +++ sim/testsuite/sim/msp430/ChangeLog | 6 ++++++ sim/testsuite/sim/msp430/testutils.inc | 34 ++++++++++++++++++++++++++++++++-- 6 files changed, 53 insertions(+), 3 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 3aa46ed..528cc6e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2016-01-05 Nick Clifton + + * 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 * emultempl/mipself.em (PARSE_AND_LIST_PROLOGUE): Convert diff --git a/ld/emulparams/msp430elf.sh b/ld/emulparams/msp430elf.sh index a76e9ee..e9d0237 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 78c7c12..50b7ddb 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 7a13081..7ad04e1 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 d26efad..458ee21 100644 --- a/sim/testsuite/sim/msp430/ChangeLog +++ b/sim/testsuite/sim/msp430/ChangeLog @@ -1,3 +1,9 @@ +2016-01-05 Nick Clifton + + * testutils.inc (__pass): Use the LMA addresses of the _passmsg + symbol. + (__fail): Likewise. + 2014-03-10 Mike Frysinger * 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 6c540b1..1ddef23 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 -- 2.7.4