summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRüdiger Timm <rt@openoffice.org>2003-04-23 15:30:27 +0000
committerRüdiger Timm <rt@openoffice.org>2003-04-23 15:30:27 +0000
commitf0a5a4715356b8751447a453be14f939176f25f7 (patch)
tree1fdd02f931c90abd061e23534fdbfe63661b6de5
parentdbadb3da20a84178a1f85b4846ac141fcab3d76f (diff)
INTEGRATION: CWS uno2 (1.2.2); FILE MERGED
2003/03/31 08:54:15 sb 1.2.2.1: #i12721# Fixed stack adjustment in callVirtualMethod (copied fix from ../gcc3_linux_intel/uno2cpp.cxx 1.3.48.1).
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx14
1 files changed, 7 insertions, 7 deletions
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx
index c915d408fff9..5c296021853c 100644
--- a/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: hr $ $Date: 2003-03-18 19:06:53 $
+ * last change: $Author: rt $ $Date: 2003-04-23 16:30:27 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,7 +97,9 @@ static void callVirtualMethod(
if (! pThis) dummy_can_throw_anything("xxx"); // address something
volatile long edx = 0, eax = 0; // for register returns
+ void * stackptr;
asm volatile (
+ "mov %%esp, %6\n\t"
// copy values
"mov %0, %%eax\n\t"
"mov %%eax, %%edx\n\t"
@@ -121,13 +123,11 @@ static void callVirtualMethod(
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %0, %%eax\n\t"
- "shl $2, %%eax\n\t"
- "add %%eax, %%esp\n\t"
+ "mov %6, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
+ "m"(eax), "m"(edx), "m"(stackptr)
: "eax", "edx" );
-
switch( eReturnType )
{
case typelib_TypeClass_HYPER: