[Libreoffice-commits] core.git: bridges/source

Herbert Dürr hdu at apache.org
Fri Feb 14 16:09:41 CET 2014


 bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

New commits:
commit 1e3e7b077f708aefd2e866eca85abc822ae4cd02
Author: Herbert Dürr <hdu at apache.org>
Date:   Thu Feb 13 13:21:50 2014 +0000

    Resolves: #i124086# preserve 16byte stack alignment...
    
    in gcc3-solaris-intel's uno2cpp bridge
    
    Patch-by: Apostolos Syropoulos <asyropoulos123 at hotmail.com>
    Review-by: Herbert Dürr <hdu at apache.org>
    (cherry picked from commit 95eeed58af27c63977a43c4d688b1467ef3cf047)
    
    Conflicts:
    	bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
    
    Change-Id: I92a151c5d65f685a6249954b84da31471501ff9b

diff --git a/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
index 2999fff..3d7ef69 100644
--- a/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
+++ b/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
@@ -39,7 +39,15 @@ namespace
 {
 
 //==================================================================================================
-static void callVirtualMethod(
+void callVirtualMethod(
+    void * pAdjustedThisPtr,
+    sal_Int32 nVtableIndex,
+    void * pRegisterReturn,
+    typelib_TypeClass eReturnType,
+    sal_Int32 * pStackLongs,
+    sal_Int32 nStackLongs ) __attribute__((noinline));
+
+void callVirtualMethod(
     void * pAdjustedThisPtr,
     sal_Int32 nVtableIndex,
     void * pRegisterReturn,
@@ -61,6 +69,13 @@ static void callVirtualMethod(
     void * stackptr;
     asm volatile (
         "mov   %%esp, %2\n\t"
+       // preserve potential 128bit stack alignment
+        "and   $0xfffffff0, %%esp\n\t"
+        "mov   %3, %%eax\n\t"
+        "lea   -4(,%%eax,4), %%eax\n\t"
+        "and   $0xf, %%eax\n\t"
+        "sub   $0xc, %%eax\n\t"
+        "add   %%eax, %%esp\n\t"
         // copy values
         "mov   %3, %%eax\n\t"
         "mov   %%eax, %%edx\n\t"


More information about the Libreoffice-commits mailing list