Depending on how a compiler generates code (e.g., GCC 3.2.2 vs. GCC

3.0.1), a bug in the gcc3_linux_intel UNO bridge is revealed:  If a
C/C++ function returns a complex object (class, struct, union), the 386
ABI specifies that the caller pushes the address for that object on the
stack, and the callee removes it from the stack.  The code in the UNO
bridge (callVirtualMethod in
bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx) erroneously assumes
that the callee does *not* remove the address from the stack, corrupting
the stack.

We use the same bridge code as linux does for gcc3.x. So this fix also
works for us.

Submitted by:	Stephan Bergmann <stephan.bergmann@sun.com>
This commit is contained in:
Martin Blapp 2003-03-27 22:13:25 +00:00
parent 5ced43a6b5
commit a000e73aee
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=77554
17 changed files with 697 additions and 0 deletions

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER:

View file

@ -100,3 +100,44 @@
}
}
--- ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig Thu Mar 27 22:05:43 2003
+++ ../bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx Thu Mar 27 22:08:18 2003
@@ -2,9 +2,9 @@
*
* $RCSfile: uno2cpp.cxx,v $
*
- * $Revision: 1.3.48.1 $
+ * $Revision: 1.1.4.1 $
*
- * last change: $Author: sb $ $Date: 2003/03/27 14:40:32 $
+ * last change: $Author: rt $ $Date: 2003/02/20 16:02:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,9 +97,7 @@
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"
@@ -123,11 +121,13 @@
"mov %%eax, %4\n\t"
"mov %%edx, %5\n\t"
// cleanup stack
- "mov %6, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
:
- : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex),
- "m"(eax), "m"(edx), "m"(stackptr)
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pThis), "m"(nVtableIndex), "m"(eax), "m"(edx)
: "eax", "edx" );
+
switch( eReturnType )
{
case typelib_TypeClass_HYPER: