bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx                     |   44 ++++++--
 bridges/source/cpp_uno/gcc3_ios/ios64_helper.s                  |   36 ------
 ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj |   52 
++++++++++
 3 files changed, 88 insertions(+), 44 deletions(-)

New commits:
commit 814bd40070db654d80a16d9f813610cae3b12dd6
Author: jan Iversen <j...@libreoffice.org>
Date:   Sun Mar 11 19:05:09 2018 +0100

    iOS, calling cpp_vtable_call does not corrupt stack
    
    Changing bl -> b (jump long to jump) allowed cpp_vtable_call
    to work without corrumping the stack.
    
    However return still corrumpts the stack.
    
    Change-Id: I3437a73139b65af13dcf6fa0c959bb1c847564b9

diff --git a/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx 
b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
index 1250beedbcda..98d859c69cde 100644
--- a/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
@@ -56,11 +56,11 @@ extern "C" void privateSnippetExecutor()
          // Second argument: The pointer to all the above
          "       mov     x1, sp\n"
 
-         "       bl      _cpp_vtable_call\n"
+         "       b       _cpp_vtable_call\n"
 
          "       ldp     x8, lr, [sp, #0]\n"
          "       add     sp, sp, #144\n"
-         "       ret     lr\n"
+//         "       ret     lr\n"
     );
 }
 
commit a414d362350df8eacd82104545a6aaf4ce102011
Author: jan Iversen <j...@libreoffice.org>
Date:   Sun Mar 11 18:22:38 2018 +0100

    iOS, updated xcode project file
    
    the only change is that addition of files needed to debug the
    stack corruption problem.
    
    Change-Id: I3598cdba2e84f51a3a90387dbe3439eafb34f878

diff --git a/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj 
b/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj
index e02182b1d8e7..c702cef65d22 100644
--- a/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj
+++ b/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj
@@ -93,6 +93,24 @@
                39E950521FC9842000D82C49 /* source */ = {isa = 
PBXFileReference; lastKnownFileType = folder; name = source; path = ../source; 
sourceTree = "<group>"; };
                39EE81531FA644E800B73AB8 /* Info.plist */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = 
Info.plist; sourceTree = "<group>"; };
                39EF4E2E1FA500C9001914AC /* PropertiesController.swift */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.swift; path = PropertiesController.swift; sourceTree = "<group>"; };
+               39FD89C9204E87E900E7179F /* except.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = except.cxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/except.cxx"; sourceTree = 
"<group>"; };
+               39FD89CB204E87FD00E7179F /* except.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = except.cxx; path = ../../bridges/source/cpp_uno/gcc3_ios/except.cxx; 
sourceTree = "<group>"; };
+               39FD89CF204E8EB900E7179F /* cpp2uno.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = cpp2uno.cxx; path = ../../bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx; 
sourceTree = "<group>"; };
+               39FD89D1204E8ED000E7179F /* share.hxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name 
= share.hxx; path = ../../bridges/source/cpp_uno/gcc3_ios/share.hxx; sourceTree 
= "<group>"; };
+               39FD89D2204E8ED000E7179F /* unwind-cxx.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
"unwind-cxx.h"; path = "../../bridges/source/cpp_uno/gcc3_ios/unwind-cxx.h"; 
sourceTree = "<group>"; };
+               39FD89D3204E8ED000E7179F /* rtti.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
rtti.h; path = ../../bridges/source/cpp_uno/gcc3_ios/rtti.h; sourceTree = 
"<group>"; };
+               39FD89D4204E8ED000E7179F /* ios64_helper.s */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = 
ios64_helper.s; path = ../../bridges/source/cpp_uno/gcc3_ios/ios64_helper.s; 
sourceTree = "<group>"; };
+               39FD89D5204E8ED000E7179F /* uno2cpp.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = uno2cpp.cxx; path = ../../bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx; 
sourceTree = "<group>"; };
+               39FD89D8204E8EEE00E7179F /* call.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = call.cxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/call.cxx"; sourceTree = 
"<group>"; };
+               39FD89D9204E8EEE00E7179F /* abi.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = abi.cxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/abi.cxx"; sourceTree = 
"<group>"; };
+               39FD89DA204E8EEE00E7179F /* uno2cpp.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = uno2cpp.cxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx"; sourceTree = 
"<group>"; };
+               39FD89DB204E8EEE00E7179F /* share.hxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name 
= share.hxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/share.hxx"; sourceTree = 
"<group>"; };
+               39FD89DC204E8EEE00E7179F /* call.hxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name 
= call.hxx; path = "../../bridges/source/cpp_uno/gcc3_macosx_x86-64/call.hxx"; 
sourceTree = "<group>"; };
+               39FD89DD204E8EEE00E7179F /* abi.hxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name 
= abi.hxx; path = "../../bridges/source/cpp_uno/gcc3_macosx_x86-64/abi.hxx"; 
sourceTree = "<group>"; };
+               39FD89DE204E8EEE00E7179F /* callvirtualmethod.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = callvirtualmethod.cxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/callvirtualmethod.cxx"; 
sourceTree = "<group>"; };
+               39FD89DF204E8EEF00E7179F /* cpp2uno.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = cpp2uno.cxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx"; sourceTree = 
"<group>"; };
+               39FD89E0204E8EEF00E7179F /* callvirtualmethod.hxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name 
= callvirtualmethod.hxx; path = 
"../../bridges/source/cpp_uno/gcc3_macosx_x86-64/callvirtualmethod.hxx"; 
sourceTree = "<group>"; };
+               39FD89E6204EBCB900E7179F /* exc_thrower.cxx */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
name = exc_thrower.cxx; path = ../../cppuhelper/source/exc_thrower.cxx; 
sourceTree = "<group>"; };
                FC31D01D2012F65500E7F402 /* DocumentHolder.swift */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.swift; path = 
DocumentHolder.swift; sourceTree = "<group>"; };
                FC31D01F2012F6D300E7F402 /* RenderCache.swift */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.swift; path = 
RenderCache.swift; sourceTree = "<group>"; };
                FC31D02A2013500E00E7F402 /* ButtonScrollView.swift */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.swift; path = 
ButtonScrollView.swift; sourceTree = "<group>"; };
@@ -134,6 +152,9 @@
                3956B72D1FAB3DBF00BF5DE4 /* extra */ = {
                        isa = PBXGroup;
                        children = (
+                               39FD89E6204EBCB900E7179F /* exc_thrower.cxx */,
+                               39FD89CE204E8E6500E7179F /* ipad */,
+                               39FD89CD204E8E5E00E7179F /* sim */,
                                39E950521FC9842000D82C49 /* source */,
                        );
                        name = extra;
@@ -211,6 +232,37 @@
                        name = Resources;
                        sourceTree = SOURCE_ROOT;
                };
+               39FD89CD204E8E5E00E7179F /* sim */ = {
+                       isa = PBXGroup;
+                       children = (
+                               39FD89D9204E8EEE00E7179F /* abi.cxx */,
+                               39FD89DD204E8EEE00E7179F /* abi.hxx */,
+                               39FD89D8204E8EEE00E7179F /* call.cxx */,
+                               39FD89DC204E8EEE00E7179F /* call.hxx */,
+                               39FD89DE204E8EEE00E7179F /* 
callvirtualmethod.cxx */,
+                               39FD89E0204E8EEF00E7179F /* 
callvirtualmethod.hxx */,
+                               39FD89DF204E8EEF00E7179F /* cpp2uno.cxx */,
+                               39FD89DB204E8EEE00E7179F /* share.hxx */,
+                               39FD89DA204E8EEE00E7179F /* uno2cpp.cxx */,
+                               39FD89C9204E87E900E7179F /* except.cxx */,
+                       );
+                       name = sim;
+                       sourceTree = "<group>";
+               };
+               39FD89CE204E8E6500E7179F /* ipad */ = {
+                       isa = PBXGroup;
+                       children = (
+                               39FD89D4204E8ED000E7179F /* ios64_helper.s */,
+                               39FD89D3204E8ED000E7179F /* rtti.h */,
+                               39FD89D1204E8ED000E7179F /* share.hxx */,
+                               39FD89D5204E8ED000E7179F /* uno2cpp.cxx */,
+                               39FD89D2204E8ED000E7179F /* unwind-cxx.h */,
+                               39FD89CF204E8EB900E7179F /* cpp2uno.cxx */,
+                               39FD89CB204E87FD00E7179F /* except.cxx */,
+                       );
+                       name = ipad;
+                       sourceTree = "<group>";
+               };
                FCC2E3F52004A01400CEB504 /* LOKit */ = {
                        isa = PBXGroup;
                        children = (
commit 056bc3cf26e539f4e841aeeecc8f1badff7ddc37
Author: jan Iversen <j...@libreoffice.org>
Date:   Sun Mar 11 18:18:57 2018 +0100

    iOS, moved privateSnippetExecutor from asm to C function.
    
    move asm code to C as first step towards reducing the asm code.
    Since iOS does not permit java/python or anything else than the
    compiled C++ code, the throw should be done simpler.
    
    Apart from that this is the first step in solving a stack
    corruption problem in the throw code
    
    Change-Id: I4f3d3a3ba3f55fb46131d9a8eeb0deebf179d95f

diff --git a/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx 
b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
index 17ed29f60789..1250beedbcda 100644
--- a/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
@@ -17,14 +17,6 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-// For iOS devices (64-bit ARM). Originally a copy of
-// ../gcc3_linux_arm/cpp2uno.cxx.
-
-// No attempts at factoring out the large amounts of more or less
-// common code in this, cpp2uno-arm.cxx and cpp2uno-i386.cxx have been
-// done. Which is sad. But then the whole bridges/source/cpp_uno is
-// full of copy/paste. So I continue in that tradition...
-
 #include <com/sun/star/uno/RuntimeException.hpp>
 #include <sal/log.hxx>
 #include <uno/data.h>
@@ -37,6 +29,42 @@
 
 #include "share.hxx"
 
+
+// Snippet code done inline
+extern "C" void privateSnippetExecutor()
+{
+    // _privateSnippetExecutor is jumped to from each codeSnippet_*
+    asm volatile (
+         // Store potential args in general purpose registers
+         "       stp     x6, x7, [sp, #-16]!\n"
+         "       stp     x4, x5, [sp, #-16]!\n"
+         "       stp     x2, x3, [sp, #-16]!\n"
+         "       stp     x0, x1, [sp, #-16]!\n"
+
+         // Store potential args in floating point/SIMD registers
+         "       stp     d6, d7, [sp, #-16]!\n"
+         "       stp     d4, d5, [sp, #-16]!\n"
+         "       stp     d2, d3, [sp, #-16]!\n"
+         "       stp     d0, d1, [sp, #-16]!\n"
+
+         // First argument to cpp_vtable_call: The x15 set up in the 
codeSnippet instance
+         "       mov     x0, x15\n"
+
+         // Store x8 (potential pointer to return value storage) and lr
+         "       stp     x8, lr, [sp, #-16]!\n"
+
+         // Second argument: The pointer to all the above
+         "       mov     x1, sp\n"
+
+         "       bl      _cpp_vtable_call\n"
+
+         "       ldp     x8, lr, [sp, #0]\n"
+         "       add     sp, sp, #144\n"
+         "       ret     lr\n"
+    );
+}
+
+
 extern "C" {
     extern int nFunIndexes, nVtableOffsets;
     extern int codeSnippets[];
diff --git a/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s 
b/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s
index 6e6e8c74b347..14a62a012e11 100644
--- a/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s
+++ b/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s
@@ -221,40 +221,4 @@ _codeSnippets:
     .long codeSnippet_00000007_3 - _codeSnippets
 
 
-
-    .text
-    .align 4
-
-_privateSnippetExecutor:
-
-    .cfi_startproc
-    // _privateSnippetExecutor is jumped to from each of the
-    // codeSnippet_*  generated by generate-snippets.pl
-
-    // Store potential args in general purpose registers
-    stp     x6, x7, [sp, #-16]!
-    stp     x4, x5, [sp, #-16]!
-    stp     x2, x3, [sp, #-16]!
-    stp     x0, x1, [sp, #-16]!
-
-    // Store potential args in floating point/SIMD registers
-    stp     d6, d7, [sp, #-16]!
-    stp     d4, d5, [sp, #-16]!
-    stp     d2, d3, [sp, #-16]!
-    stp     d0, d1, [sp, #-16]!
-
-    // First argument to cpp_vtable_call: The x15 set up in the codeSnippet 
instance
-    mov     x0, x15
-    // Store x8 (potential pointer to return value storage) and lr
-    stp     x8, lr, [sp, #-16]!
-    // Second argument: The pointer to all the above
-    mov     x1, sp
-
-    bl      _cpp_vtable_call
-
-    ldp     x8, lr, [sp, #0]
-    add     sp, sp, #144
-    ret     lr
-    .cfi_endproc
-
 // vim:set shiftwidth=4 softtabstop=4 expandtab:
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to