diff options
author | jan Iversen <jani@libreoffice.org> | 2018-03-15 13:26:41 +0100 |
---|---|---|
committer | jan Iversen <jani@libreoffice.org> | 2018-03-15 13:28:25 +0100 |
commit | 1caf3b9380f3873b7ca165a743f65d332e46ea66 (patch) | |
tree | ef762f5c6ad73f820fcffac635dc15e6f04c8ac7 | |
parent | 953a5cb1c8c750df24ed0316349a5916c384296d (diff) |
iOS, solved corrupted stack in cpp -> uno
Solved problem in assembler code, so the call chain is correct.
There are still something missing for uno to work correctly
Change-Id: Ieb3b3d6b15153576159e07b52ced0efedd135713
-rw-r--r-- | bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx | 34 | ||||
-rw-r--r-- | bridges/source/cpp_uno/gcc3_ios/ios64_helper.s | 40 | ||||
-rw-r--r-- | ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj | 42 |
3 files changed, 58 insertions, 58 deletions
diff --git a/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx index 98d859c69cde..1e2e94d090b2 100644 --- a/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx +++ b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx @@ -30,40 +30,6 @@ #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" - - " b _cpp_vtable_call\n" - - " ldp x8, lr, [sp, #0]\n" - " add sp, sp, #144\n" -// " ret lr\n" - ); -} - extern "C" { extern int nFunIndexes, nVtableOffsets; diff --git a/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s b/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s index 14a62a012e11..6737f73dde6f 100644 --- a/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s +++ b/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s @@ -16,9 +16,9 @@ // except in compliance with the License. You may obtain a copy of // the License at http://www.apache.org/licenses/LICENSE-2.0 . // - .text - .align 4 + .section __TEXT,__text,regular,pure_instructions + .p2align 2 codeSnippet_00000000_0: adr x15, .+8 b _privateSnippetExecutor @@ -221,4 +221,40 @@ _codeSnippets: .long codeSnippet_00000007_3 - _codeSnippets + + .private_extern _privateSnippetExecutor + .globl _privateSnippetExecutor + .p2align 2 +_privateSnippetExecutor: + .cfi_startproc + .cfi_def_cfa w29, 16 + .cfi_offset w30, -8 + .cfi_offset w29, -16 + + // _privateSnippetExecutor is jumped to from codeSnippet_* + + // push all GP, FP/SIMD registers to the stack + stp x6, x7, [sp, #-16]! + stp x4, x5, [sp, #-16]! + stp x2, x3, [sp, #-16]! + stp x0, x1, [sp, #-16]! + stp d6, d7, [sp, #-16]! + stp d4, d5, [sp, #-16]! + stp d2, d3, [sp, #-16]! + stp d0, d1, [sp, #-16]! + + // push x8 (RC pointer) and lr to stack + stp x8, lr, [sp, #-16]! + + // First argument (x15 set up in the codeSnippet instance) + // Second argument: The pointer to all the above + mov x0, x15 + 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: diff --git a/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj b/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj index c702cef65d22..65cbb068613c 100644 --- a/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj +++ b/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj @@ -24,6 +24,11 @@ 3941EF21204B4C8A00082486 /* welcome.odt in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF12204B4C8900082486 /* welcome.odt */; }; 3941EF22204B4C8A00082486 /* config in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF13204B4C8900082486 /* config */; }; 3941EF23204B4C8A00082486 /* share in Resources */ = {isa = PBXBuildFile; fileRef = 3941EF14204B4C8900082486 /* share */; }; + 39514E002057DC55005599D0 /* shared in Resources */ = {isa = PBXBuildFile; fileRef = 39514DFF2057DC55005599D0 /* shared */; }; + 39514E022057DC92005599D0 /* gcc3_ios in Resources */ = {isa = PBXBuildFile; fileRef = 39514E012057DC92005599D0 /* gcc3_ios */; }; + 39514E042057DCE7005599D0 /* gcc3_macosx_x86-64 in Resources */ = {isa = PBXBuildFile; fileRef = 39514E032057DCE7005599D0 /* gcc3_macosx_x86-64 */; }; + 39514E062057DD17005599D0 /* gcc3_linux_aarch64 in Resources */ = {isa = PBXBuildFile; fileRef = 39514E052057DD17005599D0 /* gcc3_linux_aarch64 */; }; + 39514E082057E4A8005599D0 /* inc in Resources */ = {isa = PBXBuildFile; fileRef = 39514E072057E4A8005599D0 /* inc */; }; 396F92F71E7AE62400A28C82 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 396F92F61E7AE62400A28C82 /* Settings.bundle */; }; 397868D61E59A3EA007F9248 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 397868D81E59A3EA007F9248 /* LaunchScreen.xib */; }; 397E08FE1E597BD8001374E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 397E08FD1E597BD8001374E0 /* AppDelegate.swift */; }; @@ -80,6 +85,11 @@ 3941EF13204B4C8900082486 /* config */ = {isa = PBXFileReference; lastKnownFileType = folder; name = config; path = ../generated/resources/config; sourceTree = "<group>"; }; 3941EF14204B4C8900082486 /* share */ = {isa = PBXFileReference; lastKnownFileType = folder; name = share; path = ../generated/resources/share; sourceTree = "<group>"; }; 39503A6F1F94C4AC00F19C78 /* lokit-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "lokit-Bridging-Header.h"; sourceTree = "<group>"; }; + 39514DFF2057DC55005599D0 /* shared */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shared; path = ../../bridges/source/cpp_uno/shared; sourceTree = "<group>"; }; + 39514E012057DC92005599D0 /* gcc3_ios */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gcc3_ios; path = ../../bridges/source/cpp_uno/gcc3_ios; sourceTree = "<group>"; }; + 39514E032057DCE7005599D0 /* gcc3_macosx_x86-64 */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "gcc3_macosx_x86-64"; path = "../../bridges/source/cpp_uno/gcc3_macosx_x86-64"; sourceTree = "<group>"; }; + 39514E052057DD17005599D0 /* gcc3_linux_aarch64 */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gcc3_linux_aarch64; path = ../../bridges/source/cpp_uno/gcc3_linux_aarch64; sourceTree = "<group>"; }; + 39514E072057E4A8005599D0 /* inc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = inc; path = ../../bridges/inc; sourceTree = "<group>"; }; 396F92F61E7AE62400A28C82 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; }; 397275391E77D9F1006ACDCC /* LibreOfficeLight.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = LibreOfficeLight.entitlements; sourceTree = "<group>"; }; 397868D71E59A3EA007F9248 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/LaunchScreen.xib; sourceTree = "<group>"; }; @@ -94,13 +104,6 @@ 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>"; }; @@ -152,8 +155,12 @@ 3956B72D1FAB3DBF00BF5DE4 /* extra */ = { isa = PBXGroup; children = ( + 39514E072057E4A8005599D0 /* inc */, + 39514E052057DD17005599D0 /* gcc3_linux_aarch64 */, + 39514E032057DCE7005599D0 /* gcc3_macosx_x86-64 */, + 39514E012057DC92005599D0 /* gcc3_ios */, + 39514DFF2057DC55005599D0 /* shared */, 39FD89E6204EBCB900E7179F /* exc_thrower.cxx */, - 39FD89CE204E8E6500E7179F /* ipad */, 39FD89CD204E8E5E00E7179F /* sim */, 39E950521FC9842000D82C49 /* source */, ); @@ -249,20 +256,6 @@ 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 = ( @@ -350,12 +343,15 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 39514E042057DCE7005599D0 /* gcc3_macosx_x86-64 in Resources */, 3941EF15204B4C8A00082486 /* unorc in Resources */, 3941EF19204B4C8A00082486 /* oovbaapi.rdb in Resources */, 3941EF1D204B4C8A00082486 /* filter in Resources */, 397E09081E597BD8001374E0 /* Assets.xcassets in Resources */, 397868D61E59A3EA007F9248 /* LaunchScreen.xib in Resources */, + 39514E002057DC55005599D0 /* shared in Resources */, 3941EF1A204B4C8A00082486 /* registry in Resources */, + 39514E062057DD17005599D0 /* gcc3_linux_aarch64 in Resources */, 3941EF18204B4C8A00082486 /* services.rdb in Resources */, 3941EF1C204B4C8A00082486 /* offapi.rdb in Resources */, 3941EF22204B4C8A00082486 /* config in Resources */, @@ -366,7 +362,9 @@ 3941EF21204B4C8A00082486 /* welcome.odt in Resources */, 397E09031E597BD8001374E0 /* Main.storyboard in Resources */, 3941EF20204B4C8A00082486 /* icudt60l.dat in Resources */, + 39514E022057DC92005599D0 /* gcc3_ios in Resources */, 3941EF16204B4C8A00082486 /* fundamentalrc in Resources */, + 39514E082057E4A8005599D0 /* inc in Resources */, 3941EF1F204B4C8A00082486 /* udkapi.rdb in Resources */, 3941EF17204B4C8A00082486 /* program in Resources */, ); |