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.
This commit is contained in:
Nick Clifton 2016-01-05 16:43:58 +00:00
parent fa89c1268f
commit 296ebfbb91
6 changed files with 53 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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);}

View File

@ -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);}

View File

@ -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.

View File

@ -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