Fix a mistake in call-client.S whereby the stack offsets were out by one item. When saving registers upon a client's entry into

the CIF, we were using space for one more stack item than we had allocated. Hence a subsequent stack push would corrupt the 
topmost item (in this case register %g7) causing it to be restored with a random value before returning to the client.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@749 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
Mark Cave-Ayland
2010-04-16 10:20:06 +00:00
committed by Mark Cave-Ayland
parent a183f2ed4b
commit 454b8225dc

View File

@@ -21,24 +21,24 @@ sparc64_of_client_interface:
flushw
save %sp, -248, %sp
stx %g1, [%sp + 2047 + 192 + 0]
stx %g2, [%sp + 2047 + 192 + 16]
stx %g3, [%sp + 2047 + 192 + 24]
stx %g4, [%sp + 2047 + 192 + 32]
stx %g5, [%sp + 2047 + 192 + 40]
stx %g6, [%sp + 2047 + 192 + 48]
stx %g7, [%sp + 2047 + 192 + 56]
stx %g2, [%sp + 2047 + 192 + 8]
stx %g3, [%sp + 2047 + 192 + 16]
stx %g4, [%sp + 2047 + 192 + 24]
stx %g5, [%sp + 2047 + 192 + 32]
stx %g6, [%sp + 2047 + 192 + 40]
stx %g7, [%sp + 2047 + 192 + 48]
call of_client_interface
mov %i0, %o0
mov %o0, %i0
ldx [%sp + 2047 + 192 + 0], %g1
ldx [%sp + 2047 + 192 + 16], %g2
ldx [%sp + 2047 + 192 + 24], %g3
ldx [%sp + 2047 + 192 + 32], %g4
ldx [%sp + 2047 + 192 + 40], %g5
ldx [%sp + 2047 + 192 + 48], %g6
ldx [%sp + 2047 + 192 + 56], %g7
ldx [%sp + 2047 + 192 + 8], %g2
ldx [%sp + 2047 + 192 + 16], %g3
ldx [%sp + 2047 + 192 + 24], %g4
ldx [%sp + 2047 + 192 + 32], %g5
ldx [%sp + 2047 + 192 + 40], %g6
ldx [%sp + 2047 + 192 + 48], %g7
return %i7+8
nop