[U-Boot-Users] [bug] arm920t start.S fails to compile with large CFG_MALLOC_LEN
Andrew Dyer
amdyer at gmail.com
Mon Jul 9 17:52:22 CEST 2007
In cpu/arm920t/start.S the macro get_bad_stack assumes that
(CONFIG_STACKSIZE+CFG_MALLOC_LEN) will fit in a 16-bit constant. I am
trying to do a build where CFG_MALLOC_LEN is much larger (need
buffering for gzip splash screen decompression). Assembly of the file
fails with errors due to invalid constants.
make[1]: Entering directory `/home/adyer/Projects/u-boot/cpu/arm920t'
arm-linux-gcc -D__ASSEMBLY__ -g -Os -fno-strict-aliasing
-fno-common -ffixed-r8 -msoft-float -D__KERNEL__
-DTEXT_BASE=0x0bd80000 -I/home/adyer/Projects/u-boot/include
-fno-builtin -ffreestanding -nostdinc -isystem
/home/adyer/usr/bin/../lib/gcc/arm-linux/4.0.0/include -pipe
-DCONFIG_ARM -D__ARM__ -march=armv4 -mabi=apcs-gnu -c -o start.o
start.S
start.S: Assembler messages:
start.S:375: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:376: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
start.S:381: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:382: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
start.S:387: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:388: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
start.S:393: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:394: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
start.S:399: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:400: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
start.S:424: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:425: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
start.S:430: Error: invalid constant -- `sub r13,r13,#((120<<10)+(4<<20))'
start.S:431: Error: invalid constant -- `sub r2,r2,#((120<<10)+(4<<20))'
make[1]: *** [start.o] Error 1
make[1]: Leaving directory `/home/adyer/Projects/u-boot/cpu/arm920t'
make: *** [cpu/arm920t/libarm920t.a] Error 2
the macro looks like this:
.macro get_bad_stack
ldr r13, _armboot_start @ setup our mode stack
sub r13, r13, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
sub r13, r13, #(CFG_GBL_DATA_SIZE+8)
str lr, [r13] @ save caller lr / spsr
mrs lr, spsr
str lr, [r13, #4]
mov r13, #MODE_SVC @ prepare SVC-Mode
@ msr spsr_c, r13
msr spsr, r13
mov lr, pc
movs pc, lr
.endm
It looks like this macro is called from an exception context. I'm an
ARM newbie, so I'm looking for some help. What registers are safe to
use in this context so I can calculate a good stack location? Any
other ideas on how to get around this?
--
Hardware, n.:
The parts of a computer system that can be kicked.
More information about the U-Boot
mailing list