FCallMemcpy function in vm/arm/memcpy.S creates an stack frame that
libunwind cannot recognize, which leads to the issue in dotnet/coreclr#6752.
This commit makes the stack frame of FCallMemcpy unwindable to fix
issue dotnet/coreclr#6752.
Commit migrated from https://github.com/dotnet/coreclr/commit/
a641d3aa4e90ef59b89511705c43d2a036a9c0d4
LEAF_END \Name, \Section
.endm
+.macro NESTED_END_MARKED Name, Section
+ LEAF_END_MARKED \Name, \Section
+.endm
+
.macro PATCH_LABEL Name
.thumb_func
.global C_FUNC(\Name)
// Copy a block of memory in a forward direction.
//
- LEAF_ENTRY FCallMemcpy, _TEXT
+ NESTED_ENTRY FCallMemcpy, _TEXT, NoHandler
cmp r2, #0
beq LOCAL_LABEL(GC_POLL)
+
+ PROLOG_PUSH "{r7, lr}"
+ PROLOG_STACK_SAVE r7
ldr r3, [r0]
ldr r3, [r1]
- push {r7, lr} // r7 as a dummy to make SP aligned
blx C_FUNC(memcpy)
- pop {r7, lr}
+
+ EPILOG_POP "{r7, pc}"
LOCAL_LABEL(GC_POLL):
ldr r0, =g_TrapReturningThreads
it ne
bne C_FUNC(FCallMemCpy_GCPoll)
bx lr
- LEAF_END_MARKED FCallMemcpy, _TEXT
+ NESTED_END_MARKED FCallMemcpy, _TEXT