[CRT]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Mon, 15 Nov 2010 20:08:49 +0000 (20:08 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Mon, 15 Nov 2010 20:08:49 +0000 (20:08 +0000)
Add a number of compilation fixes for MSVC

svn path=/branches/cmake-bringup/; revision=49598

lib/sdk/crt/except/cpp.c
lib/sdk/crt/except/cppexcept.c
lib/sdk/crt/float/i386/logb.c
lib/sdk/crt/stdlib/rot.c
lib/sdk/crt/time/ctime.c
lib/sdk/crt/time/futime.c
lib/sdk/crt/time/utime.c

index 445ce08..718276f 100644 (file)
@@ -63,6 +63,17 @@ typedef struct _rtti_object_locator
 
 #define THISCALL(func) __thiscall_ ## func
 #define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
+
+#ifdef _MSC_VER
+#pragma message ("DEFINE_THISCALL_WRAPPER broken")
+#define DEFINE_THISCALL_WRAPPER(func,args) \
+    extern void THISCALL(func)(void);
+//    __ASM_GLOBAL_FUNC(__thiscall_ ## func, \
+//                      pop eax \
+//                      push ecx \
+//                      push eax \
+//                      jmp __ASM_NAME(#func) __ASM_STDCALL(args) )
+#else
 #define DEFINE_THISCALL_WRAPPER(func,args) \
     extern void THISCALL(func)(void); \
     __ASM_GLOBAL_FUNC(__thiscall_ ## func, \
@@ -70,6 +81,8 @@ typedef struct _rtti_object_locator
                       "pushl %ecx\n\t" \
                       "pushl %eax\n\t" \
                       "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
+#endif /* _MSC_VER */
+
 #else /* __i386__ */
 
 #define THISCALL(func) func
index 02a74a9..5ff9e2b 100644 (file)
@@ -45,6 +45,9 @@ static inline void *call_ebp_func( void *func, void *ebp )
 {
     void *ret;
     int dummy;
+#ifdef _MSC_VER
+#pragma message ("call_ebp_func is unimplemented for MSC")
+#else
     __asm__ __volatile__ ("pushl %%ebx\n\t"
                           "pushl %%ebp\n\t"
                           "movl %4,%%ebp\n\t"
@@ -53,6 +56,7 @@ static inline void *call_ebp_func( void *func, void *ebp )
                           "popl %%ebx"
                           : "=a" (ret), "=S" (dummy), "=D" (dummy)
                           : "0" (func), "1" (ebp) : "ecx", "edx", "memory" );
+#endif
     return ret;
 }
 
@@ -60,6 +64,9 @@ static inline void *call_ebp_func( void *func, void *ebp )
 static inline void call_copy_ctor( void *func, void *this, void *src, int has_vbase )
 {
     TRACE( "calling copy ctor %p object %p src %p\n", func, this, src );
+#ifdef _MSC_VER
+#pragma message ("call_copy_ctor is unimplemented for MSC")
+#else
     if (has_vbase)
         /* in that case copy ctor takes an extra bool indicating whether to copy the base class */
         __asm__ __volatile__("pushl $1; pushl %2; call *%0"
@@ -67,19 +74,28 @@ static inline void call_copy_ctor( void *func, void *this, void *src, int has_vb
     else
         __asm__ __volatile__("pushl %2; call *%0"
                              : : "r" (func), "c" (this), "r" (src) : "eax", "edx", "memory" );
+#endif
 }
 
 /* call the destructor of the exception object */
 static inline void call_dtor( void *func, void *object )
 {
+#ifdef _MSC_VER
+#pragma message ("call_dtor is unimplemented for MSC")
+#else
     __asm__ __volatile__("call *%0" : : "r" (func), "c" (object) : "eax", "edx", "memory" );
+#endif
 }
 
 /* continue execution to the specified address after exception is caught */
 static inline void DECLSPEC_NORETURN continue_after_catch( cxx_exception_frame* frame, void *addr )
 {
+#ifdef _MSC_VER
+#pragma message ("continue_after_catch is unimplemented for MSC")
+#else
     __asm__ __volatile__("movl -4(%0),%%esp; leal 12(%0),%%ebp; jmp *%1"
                          : : "r" (frame), "a" (addr) );
+#endif
     for (;;) ; /* unreached */
 }
 
@@ -415,6 +431,14 @@ DWORD CDECL cxx_frame_handler( PEXCEPTION_RECORD rec, cxx_exception_frame* frame
  */
 extern DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame,
                                       PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch );
+#ifdef _MSC_VER
+#pragma message ("__CxxFrameHandler is unimplemented for MSC")
+DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame,
+                                      PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch )
+{
+    return 0;
+}
+#else
 __ASM_GLOBAL_FUNC( __CxxFrameHandler,
                    "pushl $0\n\t"        /* nested_trylevel */
                    __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
@@ -434,7 +458,7 @@ __ASM_GLOBAL_FUNC( __CxxFrameHandler,
                    "add $28,%esp\n\t"
                    __ASM_CFI(".cfi_adjust_cfa_offset -28\n\t")
                    "ret" )
-
+#endif
 
 /*********************************************************************
  *             __CxxLongjmpUnwind (MSVCRT.@)
index 0c02c0e..e4b6194 100644 (file)
@@ -30,7 +30,7 @@ double _logb (double __x)
     ("fxtract\n\t"
      : "=t" (__junk), "=u" (__val) : "0" (__x));
 #else
-#error REVIEW ME
+#pragma message ("REVIEW ME")
   __asm fld [__x];
   __asm fxtract;
   __asm fstp st(0);
index 7502fb7..d9655a2 100644 (file)
 
 #include <stdlib.h>
 
+#ifdef _MSC_VER
+#pragma function(_rotr, _rotl, _rotr, _lrotl, _lrotr)
+#endif
+
 unsigned int _rotr( unsigned int value, int shift );
 /*
  * @implemented
index b6d1bfb..3b93ba1 100644 (file)
@@ -7,6 +7,7 @@
  */
 #define MINGW_HAS_SECURE_API 1
 
+#define RC_INVOKED 1 // to prevent inline functions
 #include <tchar.h>
 #include <time.h>
 #include "bitsfixup.h"
index 99010f0..8e3ae86 100644 (file)
@@ -6,6 +6,7 @@
  * PROGRAMERS:  Timo Kreuzer
  */
 #include <precomp.h>
+#define RC_INVOKED 1 // to prevent inline functions
 #include <time.h>
 #include <sys/utime.h>
 #include "bitsfixup.h"
index 130e5a4..d879d49 100644 (file)
@@ -7,6 +7,7 @@
  */
 #include <precomp.h>
 #include <tchar.h>
+#define RC_INVOKED 1 // to prevent inline functions
 #include <sys/utime.h>
 #include "bitsfixup.h"