mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 19:55:41 +00:00
[CRT]
Add a number of compilation fixes for MSVC svn path=/branches/cmake-bringup/; revision=49598
This commit is contained in:
parent
b7383087f4
commit
1335cf4210
7 changed files with 46 additions and 2 deletions
|
@ -63,6 +63,17 @@ typedef struct _rtti_object_locator
|
||||||
|
|
||||||
#define THISCALL(func) __thiscall_ ## func
|
#define THISCALL(func) __thiscall_ ## func
|
||||||
#define THISCALL_NAME(func) __ASM_NAME("__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) \
|
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
||||||
extern void THISCALL(func)(void); \
|
extern void THISCALL(func)(void); \
|
||||||
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
||||||
|
@ -70,6 +81,8 @@ typedef struct _rtti_object_locator
|
||||||
"pushl %ecx\n\t" \
|
"pushl %ecx\n\t" \
|
||||||
"pushl %eax\n\t" \
|
"pushl %eax\n\t" \
|
||||||
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
||||||
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
#else /* __i386__ */
|
#else /* __i386__ */
|
||||||
|
|
||||||
#define THISCALL(func) func
|
#define THISCALL(func) func
|
||||||
|
|
|
@ -45,6 +45,9 @@ static inline void *call_ebp_func( void *func, void *ebp )
|
||||||
{
|
{
|
||||||
void *ret;
|
void *ret;
|
||||||
int dummy;
|
int dummy;
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma message ("call_ebp_func is unimplemented for MSC")
|
||||||
|
#else
|
||||||
__asm__ __volatile__ ("pushl %%ebx\n\t"
|
__asm__ __volatile__ ("pushl %%ebx\n\t"
|
||||||
"pushl %%ebp\n\t"
|
"pushl %%ebp\n\t"
|
||||||
"movl %4,%%ebp\n\t"
|
"movl %4,%%ebp\n\t"
|
||||||
|
@ -53,6 +56,7 @@ static inline void *call_ebp_func( void *func, void *ebp )
|
||||||
"popl %%ebx"
|
"popl %%ebx"
|
||||||
: "=a" (ret), "=S" (dummy), "=D" (dummy)
|
: "=a" (ret), "=S" (dummy), "=D" (dummy)
|
||||||
: "0" (func), "1" (ebp) : "ecx", "edx", "memory" );
|
: "0" (func), "1" (ebp) : "ecx", "edx", "memory" );
|
||||||
|
#endif
|
||||||
return ret;
|
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 )
|
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 );
|
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)
|
if (has_vbase)
|
||||||
/* in that case copy ctor takes an extra bool indicating whether to copy the base class */
|
/* in that case copy ctor takes an extra bool indicating whether to copy the base class */
|
||||||
__asm__ __volatile__("pushl $1; pushl %2; call *%0"
|
__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
|
else
|
||||||
__asm__ __volatile__("pushl %2; call *%0"
|
__asm__ __volatile__("pushl %2; call *%0"
|
||||||
: : "r" (func), "c" (this), "r" (src) : "eax", "edx", "memory" );
|
: : "r" (func), "c" (this), "r" (src) : "eax", "edx", "memory" );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call the destructor of the exception object */
|
/* call the destructor of the exception object */
|
||||||
static inline void call_dtor( void *func, void *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" );
|
__asm__ __volatile__("call *%0" : : "r" (func), "c" (object) : "eax", "edx", "memory" );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* continue execution to the specified address after exception is caught */
|
/* continue execution to the specified address after exception is caught */
|
||||||
static inline void DECLSPEC_NORETURN continue_after_catch( cxx_exception_frame* frame, void *addr )
|
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"
|
__asm__ __volatile__("movl -4(%0),%%esp; leal 12(%0),%%ebp; jmp *%1"
|
||||||
: : "r" (frame), "a" (addr) );
|
: : "r" (frame), "a" (addr) );
|
||||||
|
#endif
|
||||||
for (;;) ; /* unreached */
|
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,
|
extern DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame,
|
||||||
PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch );
|
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,
|
__ASM_GLOBAL_FUNC( __CxxFrameHandler,
|
||||||
"pushl $0\n\t" /* nested_trylevel */
|
"pushl $0\n\t" /* nested_trylevel */
|
||||||
__ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
|
__ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
|
||||||
|
@ -434,7 +458,7 @@ __ASM_GLOBAL_FUNC( __CxxFrameHandler,
|
||||||
"add $28,%esp\n\t"
|
"add $28,%esp\n\t"
|
||||||
__ASM_CFI(".cfi_adjust_cfa_offset -28\n\t")
|
__ASM_CFI(".cfi_adjust_cfa_offset -28\n\t")
|
||||||
"ret" )
|
"ret" )
|
||||||
|
#endif
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* __CxxLongjmpUnwind (MSVCRT.@)
|
* __CxxLongjmpUnwind (MSVCRT.@)
|
||||||
|
|
|
@ -30,7 +30,7 @@ double _logb (double __x)
|
||||||
("fxtract\n\t"
|
("fxtract\n\t"
|
||||||
: "=t" (__junk), "=u" (__val) : "0" (__x));
|
: "=t" (__junk), "=u" (__val) : "0" (__x));
|
||||||
#else
|
#else
|
||||||
#error REVIEW ME
|
#pragma message ("REVIEW ME")
|
||||||
__asm fld [__x];
|
__asm fld [__x];
|
||||||
__asm fxtract;
|
__asm fxtract;
|
||||||
__asm fstp st(0);
|
__asm fstp st(0);
|
||||||
|
|
|
@ -10,6 +10,10 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma function(_rotr, _rotl, _rotr, _lrotl, _lrotr)
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned int _rotr( unsigned int value, int shift );
|
unsigned int _rotr( unsigned int value, int shift );
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
#define MINGW_HAS_SECURE_API 1
|
#define MINGW_HAS_SECURE_API 1
|
||||||
|
|
||||||
|
#define RC_INVOKED 1 // to prevent inline functions
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "bitsfixup.h"
|
#include "bitsfixup.h"
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
* PROGRAMERS: Timo Kreuzer
|
* PROGRAMERS: Timo Kreuzer
|
||||||
*/
|
*/
|
||||||
#include <precomp.h>
|
#include <precomp.h>
|
||||||
|
#define RC_INVOKED 1 // to prevent inline functions
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/utime.h>
|
#include <sys/utime.h>
|
||||||
#include "bitsfixup.h"
|
#include "bitsfixup.h"
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
#include <precomp.h>
|
#include <precomp.h>
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
|
#define RC_INVOKED 1 // to prevent inline functions
|
||||||
#include <sys/utime.h>
|
#include <sys/utime.h>
|
||||||
#include "bitsfixup.h"
|
#include "bitsfixup.h"
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue