[OpenBIOS] [PATCH] sparc64: clear unused registers when calling client image
blauwirbel at gmail.com
Wed May 20 18:57:43 CEST 2009
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
> 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
More information about the OpenBIOS