mirror of
https://gitlab.com/qemu-project/openbios.git
synced 2024-02-13 08:34:06 +08:00
ppc: Avoid vector overlap on ppc64
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() Signed-off-by: Andreas Färber <andreas.faerber@web.de> Acked-by: Alexander Graf <agraf@suse.de> git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@945 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
committed by
Andreas Färber
parent
814bcd10cd
commit
cddf823b54
@@ -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 )
|
||||
|
||||
Reference in New Issue
Block a user