Author: hdu
Date: Thu Feb 13 13:21:50 2014
New Revision: 1567914

URL: http://svn.apache.org/r1567914
Log:
#i124086# preserve 16byte stack alignment in gcc3-solaris-intel's uno2cpp bridge

Patch-by: Apostolos Syropoulos <[email protected]>
Review-by: Herbert Dürr <[email protected]>

Modified:
    openoffice/trunk/main/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx

Modified: 
openoffice/trunk/main/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx?rev=1567914&r1=1567913&r2=1567914&view=diff
==============================================================================
--- openoffice/trunk/main/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx 
(original)
+++ openoffice/trunk/main/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx 
Thu Feb 13 13:21:50 2014
@@ -45,7 +45,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,
@@ -67,6 +75,13 @@ static void callVirtualMethod(
     void * stackptr;
        asm volatile (
         "mov   %%esp, %6\n\t"
+       // preserve potential 128bit stack alignment
+        "and   $0xfffffff0, %%esp\n\t"
+        "mov   %0, %%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   %0, %%eax\n\t"
                "mov   %%eax, %%edx\n\t"


Reply via email to