diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2016-09-24 13:43:26 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2016-09-24 13:43:26 +0000 |
commit | 3692b64d575f468f6f2d796a62aa2c9cb7924a8e (patch) | |
tree | 2a1202fd2dfd200d7ded83caf908abe1ffa5b0c6 /sys/arch/arm | |
parent | f07f96ab40c87fd2ac7c668c8a9e0d9fc8b46f71 (diff) |
If the value of r0 upon entering the kernel is zero, interpret this as the
address of the end of the symbol table. This will make it possible to get
rid of the code in the bootloader that patches up the kernel with the updated
esym value.
ok tom@, patrick@
Diffstat (limited to 'sys/arch/arm')
-rw-r--r-- | sys/arch/arm/arm/locore.S | 4 | ||||
-rw-r--r-- | sys/arch/arm/include/machdep.h | 4 |
2 files changed, 5 insertions, 3 deletions
diff --git a/sys/arch/arm/arm/locore.S b/sys/arch/arm/arm/locore.S index a1532f63d6d..a142476f2ed 100644 --- a/sys/arch/arm/arm/locore.S +++ b/sys/arch/arm/arm/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.11 2016/09/21 11:33:05 kettenis Exp $ */ +/* $OpenBSD: locore.S,v 1.12 2016/09/24 13:43:25 kettenis Exp $ */ /* $NetBSD: locore.S,v 1.14 2003/04/20 16:21:40 thorpej Exp $ */ /* @@ -56,6 +56,7 @@ ENTRY_NP(kernel_text) ASENTRY_NP(start) mov r5, r1 mov r6, r2 + mov r7, r3 adr r1, .Lstart ldmia r1, {r1, r2, r8, sp} /* Set initial stack and */ @@ -74,6 +75,7 @@ ASENTRY_NP(start) mov fp, #0x00000000 /* trace back starts here */ mov r1, r5 mov r2, r6 + mov r3, r7 bl _C_LABEL(initarm) /* Off we go */ /* init arm will return the new stack pointer. */ diff --git a/sys/arch/arm/include/machdep.h b/sys/arch/arm/include/machdep.h index b7f035675ed..d5f06623e05 100644 --- a/sys/arch/arm/include/machdep.h +++ b/sys/arch/arm/include/machdep.h @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.h,v 1.4 2011/10/19 20:18:31 drahn Exp $ */ +/* $OpenBSD: machdep.h,v 1.5 2016/09/24 13:43:25 kettenis Exp $ */ /* $NetBSD: machdep.h,v 1.7 2002/02/21 02:52:21 thorpej Exp $ */ #ifndef _ARM_MACHDEP_H_ @@ -16,7 +16,7 @@ void dumpsys (void); * note that we use void * as all the platforms have different ideas on what * the structure is */ -u_int initarm (void *, void *, void *); +u_int initarm (void *, void *, void *, paddr_t); /* from arm/arm/intr.c */ void dosoftints (void); |