Apparently, Dave Martin at worked on an updated patch which covers more 
combinations of arguments:
http://pastebin.ubuntu.com/395620/

--- armhelper.s 2007-12-12 15:35:44.000000000 +0000
+++ armhelper.s 2010-03-15 11:57:20.000000000 +0000
@@ -8,15 +8,22 @@
        .global privateSnippetExecutor
        .type privateSnippetExecutor, %function
 privateSnippetExecutor:
+        .fnstart                   @ start of unwinder entry
+
         stmfd sp!, {r0-r3}         @ follow other parameters on stack
+        .pad  #16                  @ throw this data away on exception
        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
+        mov   r1, sp               @ r1 points to this and params
+                                   @ (see cppuno.cxx:codeSnippet())
+        stmfd sp!, {r4,lr}         @ save return address 
+                                   @ (r4 pushed to preserve stack alignment)
+        .save {r4,lr}              @ restore these regs on exception
 
-        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
+        add   sp, sp, #4           @ no need to restore r4 (we didn't touch it)
+        ldr   pc, [sp], #20        @ return, discarding function arguments
+
+        .fnend                     @ end of unwinder entry
+
+        .size privateSnippetExecutor, . - privateSnippetExecutor

-- 
Foobared on armel
https://bugs.launchpad.net/bugs/537458
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to