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@gmail.com