ARM folks came up with this patch which seems to fix the issue: --- armhelper.s 2007-12-12 15:35:44.000000000 +0000 +++ armhelper.s 2010-03-11 16:22:29.000000000 +0000 @@ -10,13 +10,5 @@ privateSnippetExecutor: stmfd sp!, {r0-r3} @ follow other parameters on stack mov r0, ip @ r0 points to functionoffset/vtable - mov ip, sp @ fix up the ip - stmfd sp!, {fp,ip,lr,pc} @ 8 x 4 => stack remains 8 aligned - sub fp, ip, #4 @ set frame pointer - - add r1, sp, #16 @ r1 points to this and params - bl cpp_vtable_call(PLT) - - add sp, sp, #32 @ restore stack - ldr fp, [sp, #-32] @ restore frame pointer - ldr pc, [sp, #-24] @ return + mov r1, sp @ r1 points to this and params + b cpp_vtable_call(PLT)
ARM folks came up with this patch which seems to fix the issue: Executor: vtable call(PLT) call(PLT)
--- armhelper.s 2007-12-12 15:35:44.000000000 +0000
+++ armhelper.s 2010-03-11 16:22:29.000000000 +0000
@@ -10,13 +10,5 @@
privateSnippet
stmfd sp!, {r0-r3} @ follow other parameters on stack
mov r0, ip @ r0 points to functionoffset/
- mov ip, sp @ fix up the ip
- stmfd sp!, {fp,ip,lr,pc} @ 8 x 4 => stack remains 8 aligned
- sub fp, ip, #4 @ set frame pointer
-
- add r1, sp, #16 @ r1 points to this and params
- bl cpp_vtable_
-
- add sp, sp, #32 @ restore stack
- ldr fp, [sp, #-32] @ restore frame pointer
- ldr pc, [sp, #-24] @ return
+ mov r1, sp @ r1 points to this and params
+ b cpp_vtable_