[OpenBIOS] [PATCH] sparc64: fix registers dealing with client
Blue Swirl
blauwirbel at gmail.com
Sun Jul 12 12:15:52 CEST 2009
On 7/12/09, Igor Kovalenko <igor.v.kovalenko at gmail.com> wrote:
> On Sat, Jul 11, 2009 at 4:16 PM, Blue Swirl<blauwirbel at gmail.com> wrote:
> > On 7/11/09, Igor Kovalenko <igor.v.kovalenko at gmail.com> wrote:
> >> On Fri, Jul 10, 2009 at 11:20 PM, Blue Swirl<blauwirbel at gmail.com> wrote:
> >>
> >> > On 7/6/09, Igor Kovalenko <igor.v.kovalenko at gmail.com> wrote:
> >> >> Hi!
> >> >>
> >> >> This patch improves previous proposal and adds:
> >> >>
> >> >> - save/restore global registers across client interface calls.
> >> >> Since OS kernel generally has it's own idea of what
> >> >> the ABI is we have to follow this requirement.
> >> >>
> >> >> - adjust stack to allow using unoptimized openbios
> >> >> build with linux kernel. Linux provides only 128 bytes
> >> >> on stack which is not enough to save arguments by
> >> >> code generated with gcc -O0
> >> >>
> >> >> - fix switch_to so it actually could be used to switch
> >> >> to client image. context pointer must be volatile to
> >> >> prevent gcc optimizing out stores to it.
> >> >>
> >> >> Signed-off-by: igor.v.kovalenko at gmail.com
> >> >
> >> > Thanks, but with the patch applied, SILO in most of my test images no
> >> > longer boots. For example, HelenOS 0.2.0.5:
> >> > OpenBIOS for Sparc64
> >> > Configuration device id QEMU version 1 machine id 0
> >> > CPUs: 1 x SUNW,UltraSPARC-II
> >> > UUID: 00000000-0000-0000-0000-000000000000
> >> > Welcome to OpenBIOS v1.0 built on Jul 10 2009 19:12
> >> > Type 'help' for detailed information
> >> >
> >> > [sparc64] Booting file 'cdrom' with parameters ''
> >> > Not a bootable ELF image
> >> > Not a Linux kernel image
> >> > Loading a.out image...
> >> > Loaded 7680 bytes
> >> > entry point is 0x4000
> >> > Jumping to entry point...
> >> > switching to new context: entry point 0x4000 stack 0x00000000ffe51999
> >> > SIUnhandled Exception 0x0000000000000068
> >> > PC = 0x00000000ffd0ff14 NPC = 0x00000000ffd0ff18
> >> > Stopping execution
> >> >
> >>
> >>
> >> I found two issues:
> >>
> >> - block reading routines are using significant amount of stack data so
> >> 4k is not enough (8k seems OK)
> >> - must flush windows on caller's stack before switching stack pointer,
> >> this causes hard-to-find memory corruption
> >>
> >> Here is updated version, now silo seems to be working here.
> >
> > Works for me too. Thanks, I'll apply this.
>
>
> Thanks!
> Please add arch/sparc64/call-client.S to repository, I suppose that file
> missed svn add operation.
Sorry, Git makes things so easy.
More information about the OpenBIOS
mailing list