rfc: _thiscall and msvcrt

Ann and Jason Edmeades us at the-edmeades.demon.co.uk
Sat May 24 14:50:23 CDT 2003


Hi Uwe / Alexander,

I've been trying to get the 'thiscall' issue sorted out, but its proving
slightly interesting :-) 

The issue is as follows: Post-change I have a routine like:

void MSVCRT___non_rtti_object_copy_ctor(const __non_rtti_object * rhs,
CONTEXT86* context)
{
  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
  TRACE("(%p %p)\n",_this,rhs);
  MSVCRT_bad_typeid_copy_ctor(&_this->base,&rhs->base);   <<--- Type
errors during compile
}

This will not compile, because I have ALSO changed
MSVCRT_bad_typeid_copy_ctor as it too suffers from the _thiscall issue.
(Even if I switch the parms around to account for moving the this to the
last parm).

void MSVCRT_bad_typeid_copy_ctor(const bad_typeid * rhs, CONTEXT86*
context)
{
  bad_typeid *_this = (bad_typeid *)context->Ecx;
  TRACE("(%p %p)\n",_this,rhs);
  MSVCRT_exception_copy_ctor(&_this->base,&rhs->base);
}

Ie it now expects a context86 structure with ecx pointing to 'this'
(this I guess is &_this->base). (And note it suffers from the same
problem in the call to MSVCRT_exception_copy_ctor!)

Now I can change the routines to say for example:
  context->Ecx = (DWORD)&_this->base;
  MSVCRT_bad_typeid_copy_ctor(&rhs->base, context);

But I feel this is making a hack even worse, as the context isnt really
anymore as other registers would have changed. Is this acceptable?

If so, how does this patch look (I havent tried it against the original
culprit just yet, but will do assuming the idea is right).

Jason
-------------- next part --------------
Index: dlls/msvcrt/cpp.c
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/cpp.c,v
retrieving revision 1.12
diff -u -r1.12 cpp.c
--- dlls/msvcrt/cpp.c	19 Jul 2002 03:24:50 -0000	1.12
+++ dlls/msvcrt/cpp.c	24 May 2003 19:40:48 -0000
@@ -97,8 +97,9 @@
 /******************************************************************
  *		??0exception@@QAE at ABQBD@Z (MSVCRT.@)
  */
-void MSVCRT_exception_ctor(exception * _this, const char ** name)
+void MSVCRT_exception_ctor(const char ** name, CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p %s)\n",_this,*name);
   _this->vtable = exception_vtable;
   _this->name = *name;
@@ -109,8 +110,9 @@
 /******************************************************************
  *		??0exception@@QAE at ABV0@@Z (MSVCRT.@)
  */
-void MSVCRT_exception_copy_ctor(exception * _this, const exception * rhs)
+void MSVCRT_exception_copy_ctor(const exception * rhs, CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
   if (_this != rhs)
     memcpy (_this, rhs, sizeof (*_this));
@@ -120,8 +122,9 @@
 /******************************************************************
  *		??0exception@@QAE at XZ (MSVCRT.@)
  */
-void MSVCRT_exception_default_ctor(exception * _this)
+void MSVCRT_exception_default_ctor(CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p)\n",_this);
   _this->vtable = exception_vtable;
   _this->name = "";
@@ -131,16 +134,18 @@
 /******************************************************************
  *		??1exception@@UAE at XZ (MSVCRT.@)
  */
-void MSVCRT_exception_dtor(exception * _this)
+void MSVCRT_exception_dtor(CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p)\n",_this);
 }
 
 /******************************************************************
  *		??4exception@@QAEAAV0 at ABV0@@Z (MSVCRT.@)
  */
-exception * MSVCRT_exception_opequals(exception * _this, const exception * rhs)
+exception * MSVCRT_exception_opequals(const exception * rhs, CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
   memcpy (_this, rhs, sizeof (*_this));
   TRACE("name = %s\n",_this->name);
@@ -150,8 +155,9 @@
 /******************************************************************
  *		??_Eexception@@UAEPAXI at Z (MSVCRT.@)
  */
-void * MSVCRT_exception__unknown_E(exception * _this, unsigned int arg1)
+void * MSVCRT_exception__unknown_E(unsigned int arg1, CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p %d)\n",_this,arg1);
   _purecall();
   return NULL;
@@ -160,8 +166,9 @@
 /******************************************************************
  *		??_Gexception@@UAEPAXI at Z (MSVCRT.@)
  */
-void * MSVCRT_exception__unknown_G(exception * _this, unsigned int arg1)
+void * MSVCRT_exception__unknown_G(unsigned int arg1, CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p %d)\n",_this,arg1);
   _purecall();
   return NULL;
@@ -170,8 +177,9 @@
 /******************************************************************
  *		?what at exception@@UBEPBDXZ (MSVCRT.@)
  */
-const char * MSVCRT_what_exception(exception * _this)
+const char * MSVCRT_what_exception(CONTEXT86* context)
 {
+  exception *_this = (exception *)context->Ecx;
   TRACE("(%p) returning %s\n",_this,_this->name);
   return _this->name;
 }
@@ -237,77 +245,89 @@
 /******************************************************************
  *		??0bad_typeid@@QAE at ABV0@@Z (MSVCRT.@)
  */
-void MSVCRT_bad_typeid_copy_ctor(bad_typeid * _this, const bad_typeid * rhs)
+void MSVCRT_bad_typeid_copy_ctor(const bad_typeid * rhs, CONTEXT86* context)
 {
+  bad_typeid *_this = (bad_typeid *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
-  MSVCRT_exception_copy_ctor(&_this->base,&rhs->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_copy_ctor(&rhs->base, context);
 }
 
 /******************************************************************
  *		??0bad_typeid@@QAE at PBD@Z (MSVCRT.@)
  */
-void MSVCRT_bad_typeid_ctor(bad_typeid * _this, const char * name)
+void MSVCRT_bad_typeid_ctor(const char * name, CONTEXT86* context)
 {
+  bad_typeid *_this = (bad_typeid *)context->Ecx;
   TRACE("(%p %s)\n",_this,name);
-  MSVCRT_exception_ctor(&_this->base, &name);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_ctor(&name, context);
   _this->base.vtable = bad_typeid_vtable;
 }
 
 /******************************************************************
  *		??1bad_typeid@@UAE at XZ (MSVCRT.@)
  */
-void MSVCRT_bad_typeid_dtor(bad_typeid * _this)
+void MSVCRT_bad_typeid_dtor(CONTEXT86* context)
 {
+  bad_typeid *_this = (bad_typeid *)context->Ecx;
   TRACE("(%p)\n",_this);
-  MSVCRT_exception_dtor(&_this->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_dtor(context);
 }
 
 /******************************************************************
  *		??4bad_typeid@@QAEAAV0 at ABV0@@Z (MSVCRT.@)
  */
-bad_typeid * MSVCRT_bad_typeid_opequals(bad_typeid * _this, const bad_typeid * rhs)
+bad_typeid * MSVCRT_bad_typeid_opequals(const bad_typeid * rhs, CONTEXT86* context)
 {
+  bad_typeid *_this = (bad_typeid *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
-  MSVCRT_exception_copy_ctor(&_this->base,&rhs->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_copy_ctor(&rhs->base, context);
   return _this;
 }
 
 /******************************************************************
  *		??0__non_rtti_object@@QAE at ABV0@@Z (MSVCRT.@)
  */
-void MSVCRT___non_rtti_object_copy_ctor(__non_rtti_object * _this,
-                                                const __non_rtti_object * rhs)
+void MSVCRT___non_rtti_object_copy_ctor(const __non_rtti_object * rhs, CONTEXT86* context)
 {
+  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
-  MSVCRT_bad_typeid_copy_ctor(&_this->base,&rhs->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_bad_typeid_copy_ctor(&rhs->base, context);
 }
 
 /******************************************************************
  *		??0__non_rtti_object@@QAE at PBD@Z (MSVCRT.@)
  */
-void MSVCRT___non_rtti_object_ctor(__non_rtti_object * _this,
-                                           const char * name)
+void MSVCRT___non_rtti_object_ctor(const char * name, CONTEXT86* context)
 {
+  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
   TRACE("(%p %s)\n",_this,name);
-  MSVCRT_bad_typeid_ctor(&_this->base,name);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_bad_typeid_ctor(name, context);
   _this->base.base.vtable = __non_rtti_object_vtable;
 }
 
 /******************************************************************
  *		??1__non_rtti_object@@UAE at XZ (MSVCRT.@)
  */
-void MSVCRT___non_rtti_object_dtor(__non_rtti_object * _this)
+void MSVCRT___non_rtti_object_dtor(CONTEXT86* context)
 {
+  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
   TRACE("(%p)\n",_this);
-  MSVCRT_bad_typeid_dtor(&_this->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_bad_typeid_dtor(context);
 }
 
 /******************************************************************
  *		??4__non_rtti_object@@QAEAAV0 at ABV0@@Z (MSVCRT.@)
  */
-__non_rtti_object * MSVCRT___non_rtti_object_opequals(__non_rtti_object * _this,
-                                                              const __non_rtti_object *rhs)
+__non_rtti_object * MSVCRT___non_rtti_object_opequals(const __non_rtti_object *rhs, CONTEXT86* context)
 {
+  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
   memcpy (_this, rhs, sizeof (*_this));
   TRACE("name = %s\n",_this->base.base.name);
@@ -317,8 +337,9 @@
 /******************************************************************
  *		??_E__non_rtti_object@@UAEPAXI at Z (MSVCRT.@)
  */
-void * MSVCRT___non_rtti_object__unknown_E(__non_rtti_object * _this, unsigned int arg1)
+void * MSVCRT___non_rtti_object__unknown_E(unsigned int arg1, CONTEXT86* context)
 {
+  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
   TRACE("(%p %d)\n",_this,arg1);
   _purecall();
   return NULL;
@@ -327,8 +348,9 @@
 /******************************************************************
  *		??_G__non_rtti_object@@UAEPAXI at Z (MSVCRT.@)
  */
-void * MSVCRT___non_rtti_object__unknown_G(__non_rtti_object * _this, unsigned int arg1)
+void * MSVCRT___non_rtti_object__unknown_G(unsigned int arg1, CONTEXT86* context)
 {
+  __non_rtti_object *_this = (__non_rtti_object *)context->Ecx;
   TRACE("(%p %d)\n",_this,arg1);
   _purecall();
   return NULL;
@@ -337,46 +359,55 @@
 /******************************************************************
  *		??0bad_cast@@QAE at ABQBD@Z (MSVCRT.@)
  */
-void MSVCRT_bad_cast_ctor(bad_cast * _this, const char ** name)
+void MSVCRT_bad_cast_ctor(const char ** name, CONTEXT86* context)
 {
+  bad_cast *_this = (bad_cast *)context->Ecx;
   TRACE("(%p %s)\n",_this,*name);
-  MSVCRT_exception_ctor(&_this->base, name);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_ctor(name, context);
   _this->base.vtable = bad_cast_vtable;
 }
 
 /******************************************************************
  *		??0bad_cast@@QAE at ABV0@@Z (MSVCRT.@)
  */
-void MSVCRT_bad_cast_copy_ctor(bad_cast * _this, const bad_cast * rhs)
+void MSVCRT_bad_cast_copy_ctor(const bad_cast * rhs, CONTEXT86* context)
 {
+  bad_cast *_this = (bad_cast *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
-  MSVCRT_exception_copy_ctor(&_this->base,&rhs->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_copy_ctor(&rhs->base, context);
 }
 
 /******************************************************************
  *		??1bad_cast@@UAE at XZ (MSVCRT.@)
  */
-void MSVCRT_bad_cast_dtor(bad_cast * _this)
+void MSVCRT_bad_cast_dtor(CONTEXT86* context)
 {
+  bad_cast *_this = (bad_cast *)context->Ecx;
   TRACE("(%p)\n",_this);
-  MSVCRT_exception_dtor(&_this->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_dtor(context);
 }
 
 /******************************************************************
  *		??4bad_cast@@QAEAAV0 at ABV0@@Z (MSVCRT.@)
  */
-bad_cast * MSVCRT_bad_cast_opequals(bad_cast * _this, const bad_cast * rhs)
+bad_cast * MSVCRT_bad_cast_opequals(const bad_cast * rhs, CONTEXT86* context)
 {
+  bad_cast *_this = (bad_cast *)context->Ecx;
   TRACE("(%p %p)\n",_this,rhs);
-  MSVCRT_exception_copy_ctor(&_this->base,&rhs->base);
+  context->Ecx = (DWORD)&_this->base;
+  MSVCRT_exception_copy_ctor(&rhs->base, context);
   return _this;
 }
 
 /******************************************************************
  *		??8type_info@@QBEHABV0@@Z (MSVCRT.@)
  */
-int __stdcall MSVCRT_type_info_opequals_equals(type_info * _this, const type_info * rhs)
+int __stdcall MSVCRT_type_info_opequals_equals(const type_info * rhs, CONTEXT86* context)
 {
+  type_info *_this = (type_info *)context->Ecx;
   TRACE("(%p %p) returning %d\n",_this,rhs,_this->name == rhs->name);
   return _this->name == rhs->name;
 }
@@ -384,8 +415,9 @@
 /******************************************************************
  *		??9type_info@@QBEHABV0@@Z (MSVCRT.@)
  */
-int __stdcall MSVCRT_type_info_opnot_equals(type_info * _this, const type_info * rhs)
+int __stdcall MSVCRT_type_info_opnot_equals(const type_info * rhs, CONTEXT86* context)
 {
+  type_info *_this = (type_info *)context->Ecx;
   TRACE("(%p %p) returning %d\n",_this,rhs,_this->name == rhs->name);
   return _this->name != rhs->name;
 }
@@ -393,8 +425,9 @@
 /******************************************************************
  *		??1type_info@@UAE at XZ (MSVCRT.@)
  */
-void MSVCRT_type_info_dtor(type_info * _this)
+void MSVCRT_type_info_dtor(CONTEXT86* context)
 {
+  type_info *_this = (type_info *)context->Ecx;
   TRACE("(%p)\n",_this);
   if (_this->data)
     MSVCRT_free(_this->data);
@@ -403,8 +436,9 @@
 /******************************************************************
  *		?name at type_info@@QBEPBDXZ (MSVCRT.@)
  */
-const char * __stdcall MSVCRT_type_info_name(type_info * _this)
+const char * __stdcall MSVCRT_type_info_name(CONTEXT86* context)
 {
+  type_info *_this = (type_info *)context->Ecx;
   TRACE("(%p) returning %s\n",_this,_this->name);
   return _this->name;
 }
@@ -412,8 +446,9 @@
 /******************************************************************
  *		?raw_name at type_info@@QBEPBDXZ (MSVCRT.@)
  */
-const char * __stdcall MSVCRT_type_info_raw_name(type_info * _this)
+const char * __stdcall MSVCRT_type_info_raw_name(CONTEXT86* context)
 {
+  type_info *_this = (type_info *)context->Ecx;
   TRACE("(%p) returning %s\n",_this,_this->name);
   return _this->name;
 }
Index: dlls/msvcrt/msvcrt.spec
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/msvcrt.spec,v
retrieving revision 1.72
diff -u -r1.72 msvcrt.spec
--- dlls/msvcrt/msvcrt.spec	12 May 2003 03:31:16 -0000	1.72
+++ dlls/msvcrt/msvcrt.spec	24 May 2003 19:40:49 -0000
@@ -1,56 +1,56 @@
 # msvcrt.dll - MS VC++ Run Time Library
 
 @ cdecl $I10_OUTPUT() MSVCRT_I10_OUTPUT
-@ cdecl ??0__non_rtti_object@@QAE at ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_copy_ctor
-@ cdecl ??0__non_rtti_object@@QAE at PBD@Z(ptr ptr) MSVCRT___non_rtti_object_ctor
-@ cdecl ??0bad_cast@@QAE at ABQBD@Z(ptr ptr) MSVCRT_bad_cast_ctor
-@ cdecl ??0bad_cast@@QAE at ABV0@@Z(ptr ptr) MSVCRT_bad_cast_copy_ctor
-@ cdecl ??0bad_typeid@@QAE at ABV0@@Z(ptr ptr) MSVCRT_bad_typeid_copy_ctor
-@ cdecl ??0bad_typeid@@QAE at PBD@Z(ptr ptr) MSVCRT_bad_typeid_ctor
-@ cdecl ??0exception@@QAE at ABQBD@Z(ptr ptr) MSVCRT_exception_ctor
-@ cdecl ??0exception@@QAE at ABV0@@Z(ptr ptr) MSVCRT_exception_copy_ctor
-@ cdecl ??0exception@@QAE at XZ(ptr) MSVCRT_exception_default_ctor
-@ cdecl ??1__non_rtti_object@@UAE at XZ(ptr) MSVCRT___non_rtti_object_dtor
-@ cdecl ??1bad_cast@@UAE at XZ(ptr) MSVCRT_bad_cast_dtor
-@ cdecl ??1bad_typeid@@UAE at XZ(ptr) MSVCRT_bad_typeid_dtor
-@ cdecl ??1exception@@UAE at XZ(ptr) MSVCRT_exception_dtor
-@ cdecl ??1type_info@@UAE at XZ(ptr) MSVCRT_type_info_dtor
+@ cdecl -register ??0__non_rtti_object@@QAE at ABV0@@Z(ptr) MSVCRT___non_rtti_object_copy_ctor
+@ cdecl -register ??0__non_rtti_object@@QAE at PBD@Z(ptr) MSVCRT___non_rtti_object_ctor
+@ cdecl -register ??0bad_cast@@QAE at ABQBD@Z(ptr) MSVCRT_bad_cast_ctor
+@ cdecl -register ??0bad_cast@@QAE at ABV0@@Z(ptr) MSVCRT_bad_cast_copy_ctor
+@ cdecl -register ??0bad_typeid@@QAE at ABV0@@Z(ptr) MSVCRT_bad_typeid_copy_ctor
+@ cdecl -register ??0bad_typeid@@QAE at PBD@Z(ptr) MSVCRT_bad_typeid_ctor
+@ cdecl -register ??0exception@@QAE at ABQBD@Z(ptr) MSVCRT_exception_ctor
+@ cdecl -register ??0exception@@QAE at ABV0@@Z(ptr) MSVCRT_exception_copy_ctor
+@ cdecl -register ??0exception@@QAE at XZ() MSVCRT_exception_default_ctor
+@ cdecl -register ??1__non_rtti_object@@UAE at XZ() MSVCRT___non_rtti_object_dtor
+@ cdecl -register ??1bad_cast@@UAE at XZ() MSVCRT_bad_cast_dtor
+@ cdecl -register ??1bad_typeid@@UAE at XZ() MSVCRT_bad_typeid_dtor
+@ cdecl -register ??1exception@@UAE at XZ() MSVCRT_exception_dtor
+@ cdecl -register ??1type_info@@UAE at XZ() MSVCRT_type_info_dtor
 @ cdecl ??2 at YAPAXI@Z(long) MSVCRT_operator_new
 @ cdecl ??_U at YAPAXI@Z(long) MSVCRT_operator_new
 @ cdecl ??3 at YAXPAX@Z(ptr) MSVCRT_operator_delete
 @ cdecl ??_V at YAXPAX@Z(ptr) MSVCRT_operator_delete
-@ cdecl ??4__non_rtti_object@@QAEAAV0 at ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_opequals
-@ cdecl ??4bad_cast@@QAEAAV0 at ABV0@@Z(ptr ptr) MSVCRT_bad_cast_opequals
-@ cdecl ??4bad_typeid@@QAEAAV0 at ABV0@@Z(ptr ptr)MSVCRT_bad_typeid_opequals
-@ cdecl ??4exception@@QAEAAV0 at ABV0@@Z(ptr ptr) MSVCRT_exception_opequals
-@ stdcall ??8type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opequals_equals
-@ stdcall ??9type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opnot_equals
+@ cdecl -register ??4__non_rtti_object@@QAEAAV0 at ABV0@@Z(ptr) MSVCRT___non_rtti_object_opequals
+@ cdecl -register ??4bad_cast@@QAEAAV0 at ABV0@@Z(ptr) MSVCRT_bad_cast_opequals
+@ cdecl -register ??4bad_typeid@@QAEAAV0 at ABV0@@Z(ptr)MSVCRT_bad_typeid_opequals
+@ cdecl -register ??4exception@@QAEAAV0 at ABV0@@Z(ptr) MSVCRT_exception_opequals
+@ stdcall -register ??8type_info@@QBEHABV0@@Z(ptr) MSVCRT_type_info_opequals_equals
+@ stdcall -register ??9type_info@@QBEHABV0@@Z(ptr) MSVCRT_type_info_opnot_equals
 @ stub ??_7__non_rtti_object@@6B@
 @ stub ??_7bad_cast@@6B@
 @ stub ??_7bad_typeid@@6B@
 @ stub ??_7exception@@6B@
-@ cdecl ??_E__non_rtti_object@@UAEPAXI at Z(ptr long) MSVCRT___non_rtti_object__unknown_E
+@ cdecl -register ??_E__non_rtti_object@@UAEPAXI at Z(long) MSVCRT___non_rtti_object__unknown_E
 @ stub ??_Ebad_cast@@UAEPAXI at Z #(ptr long)
 @ stub ??_Ebad_typeid@@UAEPAXI at Z #(ptr long)
-@ cdecl ??_Eexception@@UAEPAXI at Z(ptr long) MSVCRT_exception__unknown_E
-@ cdecl ??_G__non_rtti_object@@UAEPAXI at Z(ptr long) MSVCRT___non_rtti_object__unknown_G
+@ cdecl -register ??_Eexception@@UAEPAXI at Z(long) MSVCRT_exception__unknown_E
+@ cdecl -register ??_G__non_rtti_object@@UAEPAXI at Z(long) MSVCRT___non_rtti_object__unknown_G
 @ stub ??_Gbad_cast@@UAEPAXI at Z #(ptr long)
 @ stub ??_Gbad_typeid@@UAEPAXI at Z #(ptr long)
-@ cdecl ??_Gexception@@UAEPAXI at Z(ptr long) MSVCRT_exception__unknown_G
+@ cdecl -register ??_Gexception@@UAEPAXI at Z(long) MSVCRT_exception__unknown_G
 @ cdecl ?_query_new_handler@@YAP6AHI at ZXZ() MSVCRT__query_new_handler
 @ cdecl ?_query_new_mode@@YAHXZ() MSVCRT__query_new_mode
 @ cdecl ?_set_new_handler@@YAP6AHI at ZP6AHI@Z at Z(ptr) MSVCRT__set_new_handler
 @ cdecl ?_set_new_mode@@YAHH at Z(long) MSVCRT__set_new_mode
 @ cdecl ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0 at Z@Z(ptr) MSVCRT__set_se_translator
 @ stub ?before at type_info@@QBEHABV1@@Z #(ptr ptr) stdcall
-@ stdcall ?name at type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_name
-@ stdcall ?raw_name at type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_raw_name
+@ stdcall -register ?name at type_info@@QBEPBDXZ() MSVCRT_type_info_name
+@ stdcall -register ?raw_name at type_info@@QBEPBDXZ() MSVCRT_type_info_raw_name
 @ cdecl ?set_new_handler@@YAP6AXXZP6AXXZ at Z(ptr) MSVCRT__set_new_handler
 @ cdecl ?set_terminate@@YAP6AXXZP6AXXZ at Z(ptr) MSVCRT_set_terminate
 @ cdecl ?set_unexpected@@YAP6AXXZP6AXXZ at Z(ptr) MSVCRT_set_unexpected
 @ cdecl ?terminate@@YAXXZ() MSVCRT_terminate
 @ cdecl ?unexpected@@YAXXZ() MSVCRT_unexpected
-@ cdecl ?what at exception@@UBEPBDXZ(ptr) MSVCRT_what_exception
+@ cdecl -register ?what at exception@@UBEPBDXZ() MSVCRT_what_exception
 @ cdecl _CIacos()
 @ cdecl _CIasin()
 @ cdecl _CIatan()
Index: dlls/msvcrtd/msvcrtd.spec
===================================================================
RCS file: /home/wine/wine/dlls/msvcrtd/msvcrtd.spec,v
retrieving revision 1.2
diff -u -r1.2 msvcrtd.spec
--- dlls/msvcrtd/msvcrtd.spec	7 Apr 2003 23:30:20 -0000	1.2
+++ dlls/msvcrtd/msvcrtd.spec	24 May 2003 19:40:49 -0000
@@ -1,55 +1,55 @@
 # msvcrtd.dll - MS VC++ Run Time Library
 
 @ cdecl $I10_OUTPUT() msvcrt.$I10_OUTPUT
-@ cdecl ??0__non_rtti_object@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0__non_rtti_object@@QAE at ABV0@@Z
-@ cdecl ??0__non_rtti_object@@QAE at PBD@Z(ptr ptr) msvcrt.??0__non_rtti_object@@QAE at PBD@Z
-@ cdecl ??0bad_cast@@QAE at ABQBD@Z(ptr ptr) msvcrt.??0bad_cast@@QAE at ABQBD@Z
-@ cdecl ??0bad_cast@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0bad_cast@@QAE at ABV0@@Z
-@ cdecl ??0bad_typeid@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0bad_typeid@@QAE at ABV0@@Z
-@ cdecl ??0bad_typeid@@QAE at PBD@Z(ptr ptr) msvcrt.??0bad_typeid@@QAE at PBD@Z
-@ cdecl ??0exception@@QAE at ABQBD@Z(ptr ptr) msvcrt.??0exception@@QAE at ABQBD@Z
-@ cdecl ??0exception@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0exception@@QAE at ABV0@@Z
-@ cdecl ??0exception@@QAE at XZ(ptr) msvcrt.??0exception@@QAE at XZ
-@ cdecl ??1__non_rtti_object@@UAE at XZ(ptr) msvcrt.??1__non_rtti_object@@UAE at XZ
-@ cdecl ??1bad_cast@@UAE at XZ(ptr) msvcrt.??1bad_cast@@UAE at XZ
-@ cdecl ??1bad_typeid@@UAE at XZ(ptr) msvcrt.??1bad_typeid@@UAE at XZ
-@ cdecl ??1exception@@UAE at XZ(ptr) msvcrt.??1exception@@UAE at XZ
-@ cdecl ??1type_info@@UAE at XZ(ptr) msvcrt.??1type_info@@UAE at XZ
+@ cdecl -register ??0__non_rtti_object@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0__non_rtti_object@@QAE at ABV0@@Z
+@ cdecl -register ??0__non_rtti_object@@QAE at PBD@Z(ptr ptr) msvcrt.??0__non_rtti_object@@QAE at PBD@Z
+@ cdecl -register ??0bad_cast@@QAE at ABQBD@Z(ptr ptr) msvcrt.??0bad_cast@@QAE at ABQBD@Z
+@ cdecl -register ??0bad_cast@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0bad_cast@@QAE at ABV0@@Z
+@ cdecl -register ??0bad_typeid@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0bad_typeid@@QAE at ABV0@@Z
+@ cdecl -register ??0bad_typeid@@QAE at PBD@Z(ptr ptr) msvcrt.??0bad_typeid@@QAE at PBD@Z
+@ cdecl -register ??0exception@@QAE at ABQBD@Z(ptr ptr) msvcrt.??0exception@@QAE at ABQBD@Z
+@ cdecl -register ??0exception@@QAE at ABV0@@Z(ptr ptr) msvcrt.??0exception@@QAE at ABV0@@Z
+@ cdecl -register ??0exception@@QAE at XZ(ptr) msvcrt.??0exception@@QAE at XZ
+@ cdecl -register ??1__non_rtti_object@@UAE at XZ(ptr) msvcrt.??1__non_rtti_object@@UAE at XZ
+@ cdecl -register ??1bad_cast@@UAE at XZ(ptr) msvcrt.??1bad_cast@@UAE at XZ
+@ cdecl -register ??1bad_typeid@@UAE at XZ(ptr) msvcrt.??1bad_typeid@@UAE at XZ
+@ cdecl -register ??1exception@@UAE at XZ(ptr) msvcrt.??1exception@@UAE at XZ
+@ cdecl -register ??1type_info@@UAE at XZ(ptr) msvcrt.??1type_info@@UAE at XZ
 @ cdecl ??2 at YAPAXI@Z(long) msvcrt.??2 at YAPAXI@Z
 @ cdecl ??2 at YAPAXIHPBDH@Z(long) msvcrt.??2 at YAPAXIHPBDH@Z
 @ cdecl ??3 at YAXPAX@Z(ptr) msvcrt.??3 at YAXPAX@Z
-@ cdecl ??4__non_rtti_object@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4__non_rtti_object@@QAEAAV0 at ABV0@@Z
-@ cdecl ??4bad_cast@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4bad_cast@@QAEAAV0 at ABV0@@Z
-@ cdecl ??4bad_typeid@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4bad_typeid@@QAEAAV0 at ABV0@@Z
-@ cdecl ??4exception@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4exception@@QAEAAV0 at ABV0@@Z
-@ stdcall ??8type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??8type_info@@QBEHABV0@@Z
-@ stdcall ??9type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??9type_info@@QBEHABV0@@Z
+@ cdecl -register ??4__non_rtti_object@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4__non_rtti_object@@QAEAAV0 at ABV0@@Z
+@ cdecl -register ??4bad_cast@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4bad_cast@@QAEAAV0 at ABV0@@Z
+@ cdecl -register ??4bad_typeid@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4bad_typeid@@QAEAAV0 at ABV0@@Z
+@ cdecl -register ??4exception@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcrt.??4exception@@QAEAAV0 at ABV0@@Z
+@ stdcall -register ??8type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??8type_info@@QBEHABV0@@Z
+@ stdcall -register ??9type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??9type_info@@QBEHABV0@@Z
 @ stub ??_7__non_rtti_object@@6B@
 @ stub ??_7bad_cast@@6B@
 @ stub ??_7bad_typeid@@6B@
 @ stub ??_7exception@@6B@
-@ cdecl ??_E__non_rtti_object@@UAEPAXI at Z(ptr long) msvcrt.??_E__non_rtti_object@@UAEPAXI at Z
+@ cdecl -register ??_E__non_rtti_object@@UAEPAXI at Z(ptr long) msvcrt.??_E__non_rtti_object@@UAEPAXI at Z
 @ stub ??_Ebad_cast@@UAEPAXI at Z #(ptr long)
 @ stub ??_Ebad_typeid@@UAEPAXI at Z #(ptr long)
-@ cdecl ??_Eexception@@UAEPAXI at Z(ptr long) msvcrt.??_Eexception@@UAEPAXI at Z
-@ cdecl ??_G__non_rtti_object@@UAEPAXI at Z(ptr long) msvcrt.??_G__non_rtti_object@@UAEPAXI at Z
+@ cdecl -register ??_Eexception@@UAEPAXI at Z(ptr long) msvcrt.??_Eexception@@UAEPAXI at Z
+@ cdecl -register ??_G__non_rtti_object@@UAEPAXI at Z(ptr long) msvcrt.??_G__non_rtti_object@@UAEPAXI at Z
 @ stub ??_Gbad_cast@@UAEPAXI at Z #(ptr long)
 @ stub ??_Gbad_typeid@@UAEPAXI at Z #(ptr long)
-@ cdecl ??_Gexception@@UAEPAXI at Z(ptr long) msvcrt.??_Gexception@@UAEPAXI at Z
+@ cdecl -register ??_Gexception@@UAEPAXI at Z(ptr long) msvcrt.??_Gexception@@UAEPAXI at Z
 @ cdecl ?_query_new_handler@@YAP6AHI at ZXZ() msvcrt.?_query_new_handler@@YAP6AHI at ZXZ
 @ cdecl ?_query_new_mode@@YAHXZ() msvcrt.?_query_new_mode@@YAHXZ
 @ cdecl ?_set_new_handler@@YAP6AHI at ZP6AHI@Z at Z(ptr) msvcrt.?_set_new_handler@@YAP6AHI at ZP6AHI@Z at Z
 @ cdecl ?_set_new_mode@@YAHH at Z(long) msvcrt.?_set_new_mode@@YAHH at Z
 @ cdecl ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0 at Z@Z(ptr) msvcrt.?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0 at Z@Z
 @ stub ?before at type_info@@QBEHABV1@@Z #(ptr ptr) stdcall
-@ stdcall ?name at type_info@@QBEPBDXZ(ptr) msvcrt.?name at type_info@@QBEPBDXZ
-@ stdcall ?raw_name at type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name at type_info@@QBEPBDXZ
+@ stdcall -register ?name at type_info@@QBEPBDXZ(ptr) msvcrt.?name at type_info@@QBEPBDXZ
+@ stdcall -register ?raw_name at type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name at type_info@@QBEPBDXZ
 @ cdecl ?set_new_handler@@YAP6AXXZP6AXXZ at Z(ptr) msvcrt.?set_new_handler@@YAP6AXXZP6AXXZ at Z
 @ cdecl ?set_terminate@@YAP6AXXZP6AXXZ at Z(ptr) msvcrt.?set_terminate@@YAP6AXXZP6AXXZ at Z
 @ cdecl ?set_unexpected@@YAP6AXXZP6AXXZ at Z(ptr) msvcrt.?set_unexpected@@YAP6AXXZP6AXXZ at Z
 @ cdecl ?terminate@@YAXXZ() msvcrt.?terminate@@YAXXZ
 @ cdecl ?unexpected@@YAXXZ() msvcrt.?unexpected@@YAXXZ
-@ cdecl ?what at exception@@UBEPBDXZ(ptr) msvcrt.?what at exception@@UBEPBDXZ
+@ cdecl -register ?what at exception@@UBEPBDXZ(ptr) msvcrt.?what at exception@@UBEPBDXZ
 @ cdecl _CIacos() msvcrt._CIacos
 @ cdecl _CIasin() msvcrt._CIasin
 @ cdecl _CIatan() msvcrt._CIatan


More information about the wine-devel mailing list