mirror of
https://github.com/autc04/Retro68.git
synced 2025-02-07 03:31:40 +00:00
Save all registers for LoadSeg
This prevents crashes when calling a struct-returning function triggers a LoadSeg (the address for the returned struct is passed via A0)
This commit is contained in:
parent
bb894a87c5
commit
b86da1d406
@ -7,16 +7,30 @@ PATCHEDLOADSEG:
|
||||
# (arguments for function)
|
||||
# (return address)
|
||||
# (return address from trap (== address in jt entry))
|
||||
movel %sp@, %sp@-
|
||||
movem.l %a0-%a1/%d0-%d2, -(%sp)
|
||||
subq #4, %sp
|
||||
move.l 24(%sp), -(%sp)
|
||||
|
||||
# Stack now:
|
||||
# (arguments for function)
|
||||
# (return address)
|
||||
# (don't care)
|
||||
# (return address from trap (== address in jt entry))
|
||||
# (don't care any more -- address in jt entry)
|
||||
# (saved registers)
|
||||
# (4 bvtes of space for return value)
|
||||
# (address in jt entry)
|
||||
|
||||
jsr RETRO68LOADSEGMENT
|
||||
|
||||
# Stack now:
|
||||
# (arguments for function)
|
||||
# (return address)
|
||||
# (don't care -- address in jt entry)
|
||||
# (saved registers)
|
||||
# (address of loaded function)
|
||||
|
||||
move.l (%sp)+, 20(%sp)
|
||||
movem.l (%sp)+, %a0-%a1/%d0-%d2
|
||||
|
||||
# Stack now:
|
||||
# (arguments for function)
|
||||
# (return address)
|
||||
|
Loading…
x
Reference in New Issue
Block a user