On Sun, Jan 3, 2010 at 6:42 AM, Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk wrote:
Igor Kovalenko wrote:
Memory range which it tries to claim is already mapped. If I try to comment out this failing statement, it copies elf data to target addresses, and control is returned to prompt.
Oh that's interesting - is it a bug in the elf-loader, or do we need to change the ofmem implementation to allow multiple mappings?
'go' reports 'go is not yet implemented'
Yeah unfortunately we need someone proficient in SPARC assembler and with the relevant documentation to write the equivalent of PPC's call_elf() for SPARC :(
Seems to be no need to go with assembly yet. With the following change you can try executing
elf-entry @ " (go)" evaluate
like ppc implementation of 'go' does. It would start executing elf code. Unfortunately it would crash with unhandled divide by zero trap which I still cannot find a reason for.
diff --git a/arch/sparc64/openbios.c b/arch/sparc64/openbios.c index 2926212..7c8de91 100644 --- a/arch/sparc64/openbios.c +++ b/arch/sparc64/openbios.c @@ -459,6 +459,13 @@ static void debugger_breakpoint(void) printk("=== DEBUGGER BREAKPOINT ===\n"); }
+static void go( void ) +{ + ucell addr = POP(); + void (*entry)(void) = (void*) addr; + entry(); +} + static void arch_init( void ) { @@ -470,6 +477,7 @@ arch_init( void ) device_end();
bind_func("platform-boot", boot ); + bind_func("(go)", go);
}