[OpenBIOS] [PATCH] sparc64: clear unused registers when calling client image
Blue Swirl
blauwirbel at gmail.com
Sat May 30 09:44:33 CEST 2009
On 5/27/09, Igor Kovalenko <igor.v.kovalenko at gmail.com> wrote:
> On Wed, May 20, 2009 at 8:57 PM, Blue Swirl <blauwirbel at gmail.com> wrote:
> > On 5/19/09, Igor Kovalenko <igor.v.kovalenko at gmail.com> wrote:
> >> This change seems to fix the problem here with silo not being able
> >> to deal with bss data. The problem is that silo does access to an address
> >> which is calculated from %i3 + bss offset, so %i3 must be somehow initialized.
> >>
> >> To do this I created start_client_image() helper which initializes
> >> clear context,
> >> fills it with stack pointer and client interface handler pointer then
> >> switches to it.
> >> According to docs all registers not used to convey data to client code must be
> >> cleared.
> >>
> >> Since my sparc64-elf-gcc cross compiler managed to discard stores
> >> to __context in switch_to() I had to make __context a volatile pointer.
> >>
> >> Signed-off-by: Igor Kovalenko <igor.v.kovalenko at gmail.com>
> >
> > There is something strange with the patch, for example SILO on Gentoo
> > 2008.0 install CD does not load completely:
> > [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 0xffe50a51
> > SIUnhandled Exception 0x0000000000000068
> > PC = 0x00000000ffd0fd44 NPC = 0x00000000ffd0fd48
> > Stopping execution
> >
>
>
> I now see there are other issues with that patch, for example stack
> pointer is assigned at bottom of client image stack.
>
> Let's do a workaround instead. This patch just clears %i3 before
> calling client image, allowing silo to initialize and boot image.
Thanks, applied (r500).
More information about the OpenBIOS
mailing list