mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 23:54:02 +02:00
Fix semihosting on gcc. We need to save lr as svc instruction will change it.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11171 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
32732a333a
commit
7d9524051e
@ -26,10 +26,16 @@ INTERWORK_FUNC(GccSemihostCall)
|
|||||||
BKPT 0xAB for ARMv7-M (Thumb-2 only)
|
BKPT 0xAB for ARMv7-M (Thumb-2 only)
|
||||||
|
|
||||||
R0 - operation type
|
R0 - operation type
|
||||||
R1 - block containing all other parametes
|
R1 - block containing all other parametes
|
||||||
|
|
||||||
|
lr - must be saved as svc instruction will cause an svc exception and write
|
||||||
|
the svc lr register. That happens to be the one we are using, so we must
|
||||||
|
save it or we will not be able to return.
|
||||||
*/
|
*/
|
||||||
ASM_PFX(GccSemihostCall):
|
ASM_PFX(GccSemihostCall):
|
||||||
|
stmfd sp!, {lr}
|
||||||
svc #0x123456
|
svc #0x123456
|
||||||
|
ldmfd sp!, {lr}
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user