summaryrefslogtreecommitdiff
path: root/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.s
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/source/cpp_uno/gcc3_linux_arm/armhelper.s')
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/armhelper.s22
1 files changed, 22 insertions, 0 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.s b/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.s
new file mode 100644
index 000000000000..8fd1a38e4f51
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.s
@@ -0,0 +1,22 @@
+@ ARM support code for OpenOffice C++/UNO bridging
+@
+@ Written by Peter Naulls <peter@chocky.org>
+@ Modified by Caolan McNamara <caolanm@redhat.com>
+ .file "armhelper.s"
+ .text
+ .align 4
+ .global privateSnippetExecutor
+ .type privateSnippetExecutor, %function
+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