author | mikek |
Wed, 16 Jun 2010 07:31:57 +0100 | |
branch | GCC_SURGE |
changeset 158 | 3132f83c8488 |
parent 0 | a41df078684a |
child 50 | 999bb78c71ac |
permissions | -rw-r--r-- |
// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" // which accompanies this distribution, and is available // at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. // // Contributors: // // Description: // e32\include\win32crt.h // // /** @file @internalTechnology */ typedef void (__cdecl *_PVFV)(void); typedef void* HANDLE; // // Static construction / destruction depends on compiler // // GCC creates two lists of functions to call, __CTOR_LIST__ and __DTOR_LIST__ #if defined(__GCC32__) typedef void (*PFV)(); extern PFV __CTOR_LIST__[]; extern PFV __DTOR_LIST__[]; static inline void constructStatics() { TUint _i=1; while (__CTOR_LIST__[_i]) (*__CTOR_LIST__[_i++])(); } static inline void destroyStatics() { TUint _i=1; while (__DTOR_LIST__[_i]) (*__DTOR_LIST__[_i++])(); } // VC puts constructor/destructor function pointers in specially-named sections #else #pragma data_seg(".CRT$XIA") _PVFV __xi_a[] = { NULL }; #pragma data_seg(".CRT$XIZ") _PVFV __xi_z[] = { NULL }; #pragma data_seg(".CRT$XCA") _PVFV __xc_a[] = { NULL }; #pragma data_seg(".CRT$XCZ") _PVFV __xc_z[] = { NULL }; #pragma data_seg(".CRT$XPA") _PVFV __xp_a[] = { NULL }; #pragma data_seg(".CRT$XPZ") _PVFV __xp_z[] = { NULL }; #pragma data_seg(".CRT$XTA") _PVFV __xt_a[] = { NULL }; #pragma data_seg(".CRT$XTZ") _PVFV __xt_z[] = { NULL }; #pragma data_seg() /* reset */ LOCAL_C void invokeTable(_PVFV *aStart,_PVFV *aEnd) { while (aStart<aEnd) { if (*aStart!=NULL) (**aStart)(); aStart++; } } #define constructStatics() invokeTable(__xi_a,__xi_z), invokeTable(__xc_a,__xc_z) #define destroyStatics() invokeTable(__xp_a,__xp_z), invokeTable(__xt_a,__xt_z) #endif #if defined(__VC32__) // // Some symbols generated by the VC++ compiler for floating point stuff. // extern "C" { #ifndef __EPOC32__ #pragma data_seg(".data2") #pragma bss_seg(".data2") GLDEF_D TInt _adj_fdivr_m64; GLDEF_D TInt _adjust_fdiv; GLDEF_D TInt _adj_fdiv_r; GLDEF_D TInt _adj_fdiv_m64; GLDEF_D TInt _adj_fdiv_m32i; GLDEF_D TInt _adj_fdivr_m32i; #ifndef __FLTUSED #define __FLTUSED extern "C" __declspec(selectany) int _fltused=0; #endif //__FLTUSED #pragma data_seg() #pragma bss_seg() #endif // !__EPOC32__ __int64 _ftol(void) { __int64 retval; short tmpcw; short oldcw; _asm fstcw oldcw _asm wait _asm mov ax, oldcw _asm or ah, 0x0c _asm mov tmpcw, ax _asm fldcw tmpcw _asm fistp retval _asm fldcw oldcw return retval; } __declspec(naked) __int64 _ftol2(void) { _asm call _ftol; _asm ret; } __declspec(naked) __int64 _ftol2_sse(void) { _asm call _ftol; _asm ret; } __declspec(naked) __int64 _ftol2_sse_excpt(void) { _asm call _ftol; _asm ret; } __declspec(naked) __int64 _ftol2_pentium4(void) { _asm call _ftol; _asm ret; } } extern "C" void abort() { abort(); } #endif extern "C" int __cdecl _purecall() /* // Gets called for any unreplaced pure virtual methods. */ { return 0; }