[OpenBIOS] [PATCH v2 4/4] ppc: Avoid vector overlap on ppc64

Andreas Färber andreas.faerber at web.de
Mon Nov 1 22:41:13 CET 2010


Due to the 64-bit immediate load sequence, the ISI and DSI vectors
are two instructions too long for the respective segment exceptions.

Move the code to the start of the relocated vector region and do a
relative branch there.

v2:
* load() -> LOAD_REG_IMMEDIATE()

Cc: Alexander Graf <agraf at suse.de>
Signed-off-by: Andreas Färber <andreas.faerber at web.de>
---
 arch/ppc/qemu/start.S |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S
index b86cd66..4db6462 100644
--- a/arch/ppc/qemu/start.S
+++ b/arch/ppc/qemu/start.S
@@ -186,6 +186,18 @@ GLOBL(__vectors):
 1:	nop			//
 	b	1b
 
+call_dsi_exception:
+	LOAD_REG_IMMEDIATE(r3, dsi_exception)
+	mtctr	r3
+	bctrl
+	b	exception_return
+
+call_isi_exception:
+	LOAD_REG_IMMEDIATE(r3, isi_exception)
+	mtctr	r3
+	bctrl
+	b	exception_return
+
 exception_return:
 	EXCEPTION_EPILOGUE
 
@@ -202,17 +214,15 @@ ILLEGAL_VECTOR( 0x200 )
 
 VECTOR( 0x300, "DSI" ):
 	EXCEPTION_PREAMBLE
-	LOAD_REG_IMMEDIATE(r3, dsi_exception)
-	mtctr	r3
-	bctrl
-	b	exception_return
+	b	call_dsi_exception
+
+ILLEGAL_VECTOR( 0x380 )
 
 VECTOR( 0x400, "ISI" ):
 	EXCEPTION_PREAMBLE
-	LOAD_REG_IMMEDIATE(r3, isi_exception)
-	mtctr	r3
-	bctrl
-	b	exception_return
+	b	call_isi_exception
+
+ILLEGAL_VECTOR( 0x480 )
 
 	ILLEGAL_VECTOR( 0x500 )
 	ILLEGAL_VECTOR( 0x600 )
-- 
1.7.3




More information about the OpenBIOS mailing list