[OpenBIOS] [PATCH] arch/ppc/qemu: Moved exception handlers from beginning of RAM

Alexander Graf agraf at suse.de
Wed May 28 01:59:02 CEST 2014


On 26.05.14 23:24, BALATON Zoltan wrote:
> Do not put exception handler routines between 0x00-0xff as some OSes
> use this area for their own purposes and can corrupt them. (In
> particular MorphOS writes to 0x80 during boot). This patch frees up
> this area by moving the routines that were there higher.
>
> Signed-off-by: BALATON Zoltan <balaton at eik.bme.hu>

So do you happen to have any idea why the code was written the way it 
was written? I don't feel very confident that I grasp why the original 
author did it that way.


Alex

> ---
>
> This replaces my previous attempt (Use exception vectors from ROM
> instead of copying them to page zero) as that relied on the MSR[IP]
> bit that was found not to be generally available.
>
> Index: openbios-devel/arch/ppc/qemu/start.S
> ===================================================================
> --- openbios-devel/arch/ppc/qemu/start.S	(revision 1304)
> +++ openbios-devel/arch/ppc/qemu/start.S	(working copy)
> @@ -280,21 +280,9 @@ GLOBL(__vectors):
>   1:	nop			//
>   	b	1b
>   
> -call_dsi_exception:
> -	LOAD_REG_FUNC(r3, dsi_exception)
> -	mtctr	r3
> -	bctrl
> -	b	exception_return
> +VECTOR( 0x100, "SRE" ):
> +        b       _entry
>   
> -call_isi_exception:
> -	LOAD_REG_FUNC(r3, isi_exception)
> -	mtctr	r3
> -	bctrl
> -	b	exception_return
> -
> -exception_return:
> -	EXCEPTION_EPILOGUE
> -
>   trap_error:
>   	lis	r1, 0x8000			/* r1=0x80000000 */
>   	add.	r1,r1,r1			/* r1=r1+r1 (high 32bit !0) */
> @@ -309,9 +297,6 @@ trap_error:
>   	mtctr r4
>   	bctr
>   
> -VECTOR( 0x100, "SRE" ):
> -        b       _entry
> -
>   ILLEGAL_VECTOR( 0x200 )
>   
>   VECTOR( 0x300, "DSI" ):
> @@ -373,11 +358,16 @@ VECTOR( 0x2200, "ISI_64" ):
>   
>   real_dsi:
>   	EXCEPTION_PREAMBLE
> -	b	call_dsi_exception
> +	LOAD_REG_FUNC(r3, dsi_exception)
> +	b call_exception_handler
>   
>   real_isi:
>   	EXCEPTION_PREAMBLE
> -	b	call_isi_exception
> +	LOAD_REG_FUNC(r3, isi_exception)
> +call_exception_handler:
> +	mtctr	r3
> +	bctrl
> +	EXCEPTION_EPILOGUE
>   
>   GLOBL(__vectors_end):
>   




More information about the OpenBIOS mailing list