Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


In the iOS porting effort one problematic thing is the dynamic code generation used in the C++/UNO 
bridge. Some experimentation would indicate, however, that in "normal" use of LO very few kinds of 
"snippets" are actually generated, so it would be trivial to just pre-generate a sufficient static 
set of assembly source code snippets using a short shell script or whatever. (Especially as for iOS 
there won't be any Java, Python, or binary extension support, or support of Basic macros in 
documents, so the set of potentially generated code snippets is fixed a priori, even if it might be 
tedious to exactly find out the whole set.)

(It is the App Store rules that as far as I understand prevent the support for arbitrary scripts 
loaded from the outside in any app, including Basic code in documents. As for dynamic code 
generation, I don't know if the OS prevents it (mprotect() etc), or whether this too is "just" an 
enforced rule. Anyway, my goal for the iOS porting effort is that the code could potentially be 
used in an app distributed on the App Store. I am not interested in the jailbreaking scene.)

So, I would want some empirical data... Could you please add logging output code as below to the 
codeSnippet() function in the cpp2uno part of the C++/UNO bridge for your platform, and run some 
representative use cases of LO without using any extensions or macros in documents, but otherwise 
with complex things going on, sort the stderr output dropping duplicates (sort -u), and post as a 
followup, thanks.

Below is diff for MacOSX (which I know compiles and works), and x86-64 Linux (which I don't have 
time right now to test (leaving on a short trip with the family in an hour), but it should be 
trivial to fix in case there is a typo)...

Cheers,
--tml

diff --git a/bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx 
b/bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx
index 2ceb0bb..6a26bd3 100644
--- a/bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx
@@ -438,6 +438,17 @@ unsigned char * codeSnippet(
         = ((unsigned char *) exec) - p - sizeof (sal_Int32);
     p += sizeof (sal_Int32);
     OSL_ASSERT(p - code <= codeSnippetSize);
+    fprintf(stderr,
+            "==> codeSnippet to %s, functionIndex=%d%s, vtableOffset=%d\n",
+            (exec == privateSnippetExecutorGeneral ? "General" :
+             (exec == privateSnippetExecutorVoid ? "Void" :
+              (exec == privateSnippetExecutorHyper ? "Hyper" :
+               (exec == privateSnippetExecutorFloat ? "Float" :
+                (exec == privateSnippetExecutorDouble ? "Double" :
+                 (exec == privateSnippetExecutorClass ? "Class" :
+                  "???")))))),
+            (functionIndex & ~0x80000000), (functionIndex & 0x80000000) ? "|0x80000000":"", 
vtableOffset);
+    fflush(stderr);
     return code + codeSnippetSize;
 }

diff --git a/bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx 
b/bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx
index c9b5185..c8d45a7 100644
--- a/bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx
@@ -434,6 +434,11 @@ unsigned char * codeSnippet( unsigned char * code,
     // jmpq *%r11
     *reinterpret_cast<sal_uInt32 *>( code + 20 ) = 0x00e3ff49;

+    fprintf(stderr,
+            "==> codeSnippet to privateSnippetExecutor, functionIndex=%d%s, vtableOffset=%d\n",
+            nFunctionIndex), (bHasHiddenParam) ? "|0x80000000":"", nVtableOffset);
+    fflush(stderr);
+
     return code + codeSnippetSize;
 }




Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.