[OpenBIOS] r384 - openbios-devel/arch/ppc/qemu

svn at openbios.org svn at openbios.org
Sun Jan 11 01:01:40 CET 2009


Author: laurent
Date: 2009-01-11 01:01:40 +0100 (Sun, 11 Jan 2009)
New Revision: 384

Modified:
   openbios-devel/arch/ppc/qemu/start.S
Log:
According to
"PowerPC Processor binding to:
IEEE 1275-1994, Standard for Boot (Initialization, Configuration) Firmware
Revision: 2.1 (Approved Version), November 6, 1996"

7.1 Calling Convention:

Client interface preserves: msr, cr, r1, r2, r13-r31, sprg0-3, fpscr, f0-f31,
sr0-sr15, other SPRs.

This patch modifies of_client_callback(), to preserve r1, r2, r4-r31.

This is needed to be able to execute the first stage of quik which
supposes r7 is unmodified.



Modified: openbios-devel/arch/ppc/qemu/start.S
===================================================================
--- openbios-devel/arch/ppc/qemu/start.S	2009-01-10 23:47:37 UTC (rev 383)
+++ openbios-devel/arch/ppc/qemu/start.S	2009-01-11 00:01:40 UTC (rev 384)
@@ -279,36 +279,127 @@
 	// we should not really come here though
 	blr
 
+#define SAVE_SPACE 140
 GLOBL(of_client_callback):
+
+	stwu	r1, -12(r1)
+
+	/* save r4 */
+
+	stw	r4, 8(r1)
+
+	/* save lr */
+
+	mflr	r4
+	stw	r4, 4(r1)
+
+	/* restore OF stack */
+
 	lis	r4,HA(saved_stack)
 	addi	r4,r4,LO(saved_stack)
 	lwz	r4,0(r4)
-	stwu	r4,-32(r4)
-	mflr	r5
-	stw	r5,32+4(r4)
+
+	stwu	r4,-SAVE_SPACE(r4)
 	stw	r1,8(r4)		// save caller stack
 	mr	r1,r4
+
 	stw	r2,12(r1)
 	stw	r0,16(r1)
+
+	/* save ctr, cr and xer */
+
 	mfctr	r2
 	stw	r2,20(r1)
 	mfcr	r2
 	stw	r2,24(r1)
 	mfxer	r2
 	stw	r2,28(r1)
-	// do we need to save more registers?
+
+	/* save r5 - r31 */
+
+	stw	r5, 32(r1)
+	stw	r6,36(r1)
+	stw	r7,40(r1)
+	stw	r8,44(r1)
+	stw	r9,48(r1)
+	stw	r10,52(r1)
+	stw	r11,56(r1)
+	stw	r12,60(r1)
+	stw	r13,64(r1)
+	stw	r14,68(r1)
+	stw	r15,72(r1)
+	stw	r16,76(r1)
+	stw	r17,80(r1)
+	stw	r18,84(r1)
+	stw	r19,88(r1)
+	stw	r20,92(r1)
+	stw	r21,96(r1)
+	stw	r22,100(r1)
+	stw	r23,104(r1)
+	stw	r24,108(r1)
+	stw	r25,112(r1)
+	stw	r26,116(r1)
+	stw	r27,120(r1)
+	stw	r28,124(r1)
+	stw	r29,128(r1)
+	stw	r30,132(r1)
+	stw	r31,136(r1)
+
 	bl	of_client_interface
-	lwz	r4,32+4(r1)
-	mtlr	r4
+
+	/* restore r5 - r31 */
+
+	lwz	r5,32(r1)
+	lwz	r6,36(r1)
+	lwz	r7,40(r1)
+	lwz	r8,44(r1)
+	lwz	r9,48(r1)
+	lwz	r10,52(r1)
+	lwz	r11,56(r1)
+	lwz	r12,60(r1)
+	lwz	r13,64(r1)
+	lwz	r14,68(r1)
+	lwz	r15,72(r1)
+	lwz	r16,76(r1)
+	lwz	r17,80(r1)
+	lwz	r18,84(r1)
+	lwz	r19,88(r1)
+	lwz	r20,92(r1)
+	lwz	r21,96(r1)
+	lwz	r22,100(r1)
+	lwz	r23,104(r1)
+	lwz	r24,108(r1)
+	lwz	r25,112(r1)
+	lwz	r26,116(r1)
+	lwz	r27,120(r1)
+	lwz	r28,124(r1)
+	lwz	r29,128(r1)
+	lwz	r30,132(r1)
+	lwz	r31,136(r1)
+
+	/* restore ctr, cr and xer */
+
 	lwz	r2,20(r1)
 	mtctr	r2
 	lwz	r2,24(r1)
 	mtcr	r2
 	lwz	r2,28(r1)
 	mtxer	r2
+
+	/* restore r0 and r2 */
+
 	lwz	r2,12(r1)
 	lwz	r0,16(r1)
-	lwz	r1,8(r1)		// restore caller stack
+
+	/* restore caller stack */
+
+	lwz	r1,8(r1)
+
+	lwz	r4, 4(r1)
+	mtlr	r4
+	lwz	r4, 8(r1)
+	lwz	r1, 0(r1)
+
 	blr
 
 	/* rtas glue (must be reloctable) */




More information about the OpenBIOS mailing list