summaryrefslogtreecommitdiffstats
path: root/sys/boot/arm
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-04-28 23:46:04 +0000
committerian <ian@FreeBSD.org>2014-04-28 23:46:04 +0000
commitbd2b096941de42db2cd1b8d1ccd6a4ebec694459 (patch)
tree5bbb7172ec3ddc10287b22a959ed409bc74d665d /sys/boot/arm
parentfaf1fb225965638f990e26fa051acac68e79acbd (diff)
downloadFreeBSD-src-bd2b096941de42db2cd1b8d1ccd6a4ebec694459.zip
FreeBSD-src-bd2b096941de42db2cd1b8d1ccd6a4ebec694459.tar.gz
MFC r257210, r258527: No hardfloat in ubldr, save/restore r9 for api calls.
Diffstat (limited to 'sys/boot/arm')
-rw-r--r--sys/boot/arm/uboot/Makefile2
-rw-r--r--sys/boot/arm/uboot/start.S18
2 files changed, 13 insertions, 7 deletions
diff --git a/sys/boot/arm/uboot/Makefile b/sys/boot/arm/uboot/Makefile
index 236e3f3..3402e02 100644
--- a/sys/boot/arm/uboot/Makefile
+++ b/sys/boot/arm/uboot/Makefile
@@ -90,7 +90,7 @@ CFLAGS+= -I.
CLEANFILES+= vers.c loader.help
-CFLAGS+= -ffreestanding
+CFLAGS+= -ffreestanding -msoft-float
LDFLAGS= -nostdlib -static
LDFLAGS+= -T ldscript.generated
diff --git a/sys/boot/arm/uboot/start.S b/sys/boot/arm/uboot/start.S
index 8af47f3..6e8f117 100644
--- a/sys/boot/arm/uboot/start.S
+++ b/sys/boot/arm/uboot/start.S
@@ -39,9 +39,10 @@ _start:
ldr ip, =uboot_address
str sp, [ip]
- /* Save U-Boot's r8 */
+ /* Save U-Boot's r8 and r9 */
ldr ip, =saved_regs
str r8, [ip, #0]
+ str r9, [ip, #4]
#ifdef _ARM_ARCH_6
mrc p15, 0, r2, c1, c0, 0
@@ -57,21 +58,24 @@ _start:
* syscall()
*/
ENTRY(syscall)
- /* Save caller's lr and r8 */
+ /* Save caller's lr, r8 and r9 */
ldr ip, =saved_regs
- str lr, [ip, #4]
str r8, [ip, #8]
- /* Restore U-Boot's r8 */
+ str r9, [ip, #12]
+ str lr, [ip, #16]
+ /* Restore U-Boot's r8 and r9 */
ldr r8, [ip, #0]
+ ldr r9, [ip, #4]
/* Call into U-Boot */
ldr lr, =return_from_syscall
ldr ip, =syscall_ptr
ldr pc, [ip]
return_from_syscall:
- /* Restore loader's r8 and lr */
+ /* Restore loader's r8, r9 and lr */
ldr ip, =saved_regs
+ ldr lr, [ip, #16]
+ ldr r9, [ip, #12]
ldr r8, [ip, #8]
- ldr lr, [ip, #4]
/* Return to caller */
mov pc, lr
@@ -90,5 +94,7 @@ uboot_address:
saved_regs:
.long 0 /* U-Boot's r8 */
+ .long 0 /* U-Boot's r9 */
.long 0 /* Loader's r8 */
+ .long 0 /* Loader's r9 */
.long 0 /* Loader's lr */
OpenPOWER on IntegriCloud