[OpenBIOS] [PATCH] sparc64: fix registers dealing with client
igor.v.kovalenko at gmail.com
Sun Jul 12 12:07:38 CEST 2009
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.
Please add arch/sparc64/call-client.S to repository, I suppose that file
missed svn add operation.
Igor V. Kovalenko
More information about the OpenBIOS