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
- [Libreoffice] Please run an instrumented LO for me (patch included) · Tor Lillqvist
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.