Author: tkreuzer Date: Wed Nov 4 22:22:53 2009 New Revision: 43956
URL: http://svn.reactos.org/svn/reactos?rev=43956&view=rev Log: Sync mingw lib to version 4.4.1-1a
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_glob.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/binmode.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt_handler.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dll_argv.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw_custom.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c (with props) branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/txtmode.c (with props) Modified: branches/ros-amd64-bringup/reactos/include/crt/_mingw.h branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/internal.h branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/oscalls.h branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/sect_attribs.h branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp10.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp8.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/atonexit.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_c.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_w.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtdll.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtexe.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllentry.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllmain.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gccmain.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gs_support.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw.rbuild branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pesect.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pseudo-reloc.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/tlssup.c branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/wildcard.c
Modified: branches/ros-amd64-bringup/reactos/include/crt/_mingw.h URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/includ... ============================================================================== --- branches/ros-amd64-bringup/reactos/include/crt/_mingw.h [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/include/crt/_mingw.h [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -189,5 +189,15 @@ #define _CRT_UNUSED(x) (void)x #endif
+#define __MINGW_USE_UNDERSCORE_PREFIX 1 + +#if __MINGW_USE_UNDERSCORE_PREFIX == 0 +#define __MINGW_IMP_SYMBOL(sym) _imp_##sym +#define __MINGW_USYMBOL(sym) sym +#else +#define __MINGW_IMP_SYMBOL(sym) _imp__##sym +#define __MINGW_USYMBOL(sym) _##sym +#endif + #endif /* !_INC_MINGW */
Modified: branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/internal.h URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/includ... ============================================================================== --- branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/internal.h [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/internal.h [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -22,7 +22,7 @@ typedef int (__cdecl *_PIFV)(void); typedef void (__cdecl *_PVFI)(int);
-#if defined (SPECIAL_CRTEXE) && defined (_DLL) +#if defined (SPECIAL_CRTEXE) && (defined (_DLL) || defined (__GNUC__)) extern int _commode; #else _CRTIMP extern int _commode; @@ -31,12 +31,6 @@ #define __IOINFO_TM_ANSI 0 #define __IOINFO_TM_UTF8 1 #define __IOINFO_TM_UTF16LE 2 - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4214) -#pragma warning(disable:4820) -#endif
typedef struct { intptr_t osfhnd; @@ -48,10 +42,6 @@ char unicode : 1; char pipech2[2]; } ioinfo; - -#ifdef _MSC_VER -#pragma warning(pop) -#endif
#define IOINFO_ARRAY_ELTS (1 << 5)
@@ -69,13 +59,13 @@ #define _tm_unicode_safe(i) (_pioinfo_safe(i)->unicode)
#ifndef __badioinfo - extern ioinfo ** _imp____badioinfo[]; -#define __badioinfo (*_imp____badioinfo) + extern ioinfo ** __MINGW_IMP_SYMBOL(__badioinfo)[]; +#define __badioinfo (* __MINGW_IMP_SYMBOL(__badioinfo)) #endif
#ifndef __pioinfo - extern ioinfo ** _imp____pioinfo[]; -#define __pioinfo (*_imp____pioinfo) + extern ioinfo ** __MINGW_IMP_SYMBOL(__pioinfo)[]; +#define __pioinfo (* __MINGW_IMP_SYMBOL(__pioinfo)) #endif
#define _NO_CONSOLE_FILENO (intptr_t)-2 @@ -107,24 +97,24 @@ extern int _newmode;
#ifndef __winitenv -extern wchar_t ***_imp____winitenv; -#define __winitenv (*_imp____winitenv) +extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv); +#define __winitenv (* __MINGW_IMP_SYMBOL(__winitenv)) #endif
#ifndef __initenv -extern char ***_imp____initenv; -#define __initenv (*_imp____initenv) +extern char *** __MINGW_IMP_SYMBOL(__initenv); +#define __initenv (* __MINGW_IMP_SYMBOL(__initenv)) #endif
#ifndef _acmdln -extern char **_imp___acmdln; -#define _acmdln (*_imp___acmdln) +extern char ** __MINGW_IMP_SYMBOL(_acmdln); +#define _acmdln (* __MINGW_IMP_SYMBOL(_acmdln)) /* _CRTIMP extern char *_acmdln; */ #endif
#ifndef _wcmdln -extern char **_imp___wcmdln; -#define _wcmdln (*_imp___wcmdln) +extern char ** __MINGW_IMP_SYMBOL(_wcmdln); +#define _wcmdln (* __MINGW_IMP_SYMBOL(_wcmdln)) /* __CRTIMP extern wchar_t *_wcmdln; */ #endif
@@ -169,7 +159,7 @@ #include <errno.h>
void * __cdecl _encode_pointer(void *); - void * __cdecl _encoded_null(void); + void * __cdecl _encoded_null(); void * __cdecl _decode_pointer(void *);
BOOL __cdecl _ValidateImageBase (PBYTE pImageBase);
Modified: branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/oscalls.h URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/includ... ============================================================================== --- branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/oscalls.h [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/oscalls.h [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -30,11 +30,6 @@ #endif #endif
-#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4214) -#endif - typedef struct _FTIME { unsigned short twosecs : 5; @@ -51,10 +46,6 @@ unsigned short year : 7; } FDATE;
-#ifdef _MSC_VER -#pragma warning(pop) -#endif - typedef FDATE *PFDATE;
#endif
Modified: branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/sect_attribs.h URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/includ... ============================================================================== --- branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/sect_attribs.h [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/include/reactos/mingw-w64/sect_attribs.h [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -10,7 +10,7 @@ #define _ATTRIBUTES shared #endif
-#if defined(_MSC_VER) +#if 0 /* Reference list of existing section for msvcrt. */ #pragma section(".CRTMP$XCA",long,_ATTRIBUTES) #pragma section(".CRTMP$XCZ",long,_ATTRIBUTES) @@ -55,14 +55,6 @@ #pragma section(".rtc$IZZ",long,read) #pragma section(".rtc$TAA",long,read) #pragma section(".rtc$TZZ",long,read) -#pragma section(".tls",long,read,write) -#pragma section(".tls$ZZZ",long,read,write) #endif
-#if defined(_MSC_VER) -#define _CRTALLOC(x) __declspec(allocate(x)) -#elif defined(__GNUC__) #define _CRTALLOC(x) __attribute__ ((section (x) )) -#else -#error -#endif
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp10.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp10.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp10.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -4,17 +4,9 @@ * No warranty is given; refer to the file DISCLAIMER within this package. */
+void _fpreset (void); + void _fpreset (void) -{ -#ifdef __GNUC__ - __asm__ ("fninit" ); -#else - __asm fninit; -#endif -} + { __asm__ ("fninit" ) ;}
-#ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); -#else -void fpreset(void) { _fpreset(); } -#endif
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp8.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp8.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_fp8.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -4,12 +4,14 @@ * No warranty is given; refer to the file DISCLAIMER within this package. */
-extern void (*_imp___fpreset)(void) ; +#include <_mingw.h> + +extern void (* __MINGW_IMP_SYMBOL(_fpreset))(void); +void _fpreset (void); + void _fpreset (void) -{ (*_imp___fpreset)(); } +{ + (* __MINGW_IMP_SYMBOL(_fpreset))(); +}
-#ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); -#else -void fpreset(void) { _fpreset(); } -#endif
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_glob.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_glob.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_glob.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,17 @@ +/* + * CRT_glob.c + * This file has no copyright is assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Include this object file to set _dowildcard to a state that will turn on + * command line globbing by default. (wildcard.o which goes into libmingw32.a + * has a default state of off.) + * + * To use this object include the object file in your link command: + * gcc -o foo.exe foo.o CRT_glob.o + * + */ + +int _dowildcard = -1; +
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/CRT_glob.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/atonexit.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/atonexit.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/atonexit.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -25,10 +25,11 @@ _PVFV *__onexitend;
extern _CRTIMP _onexit_t __dllonexit (_onexit_t, _PVFV**, _PVFV**); -extern _onexit_t (__cdecl *_imp___onexit) (_onexit_t func); +extern _onexit_t (__cdecl * __MINGW_IMP_SYMBOL(_onexit)) (_onexit_t func);
-#if 0 /* Choose a different name to prevent name conflicts. The CRT one works fine. */ +_onexit_t __cdecl mingw_onexit(_onexit_t func); + _onexit_t __cdecl mingw_onexit(_onexit_t func) { _PVFV *onexitbegin; @@ -38,7 +39,7 @@ onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin);
if (onexitbegin == (_PVFV *) -1) - return (*_imp___onexit) (func); + return (* __MINGW_IMP_SYMBOL(_onexit)) (func); _lock (_EXIT_LOCK1); onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin); onexitend = (_PVFV *) _decode_pointer (__onexitend); @@ -56,4 +57,3 @@ { return (mingw_onexit((_onexit_t)func) == NULL) ? -1 : 0; } -#endif
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/binmode.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/binmode.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/binmode.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,10 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#define SPECIAL_CRTEXE + +#include <fcntl.h> +#include <stdlib.h>
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/binmode.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_c.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_c.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_c.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -6,7 +6,15 @@
#include <windows.h>
-int main (int flags, char **cmdline, char **inst) +extern HINSTANCE __mingw_winmain_hInstance; +extern LPSTR __mingw_winmain_lpCmdLine; +extern DWORD __mingw_winmain_nShowCmd; + +/*ARGSUSED*/ +int main (int flags __attribute__ ((__unused__)), + char **cmdline __attribute__ ((__unused__)), + char **inst __attribute__ ((__unused__))) { - return (int) WinMain ((HINSTANCE) inst, NULL, (LPSTR) cmdline,(DWORD) flags); + return (int) WinMain (__mingw_winmain_hInstance, NULL, + __mingw_winmain_lpCmdLine, __mingw_winmain_nShowCmd); }
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_w.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_w.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt0_w.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -3,14 +3,23 @@ * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER within this package. */ - #include <windows.h>
-extern void __main(void); - +/* Do the UNICODE prototyping of WinMain. Be aware that in winbase.h WinMain is a macro + defined to wWinMain. */ int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd);
-int wmain (int flags, wchar_t **cmdline, wchar_t **inst) +extern HINSTANCE __mingw_winmain_hInstance; +extern LPWSTR __mingw_winmain_lpCmdLine; +extern DWORD __mingw_winmain_nShowCmd; + +int wmain (int, wchar_t **, wchar_t **); + +/*ARGSUSED*/ +int wmain (int flags __attribute__ ((__unused__)), + wchar_t **cmdline __attribute__ ((__unused__)), + wchar_t **inst __attribute__ ((__unused__))) { - return (int) wWinMain ((HINSTANCE) inst, NULL, (LPWSTR) cmdline,(DWORD) flags); + return (int) wWinMain (__mingw_winmain_hInstance, NULL, + __mingw_winmain_lpCmdLine, __mingw_winmain_nShowCmd); }
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt_handler.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt_handler.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt_handler.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,177 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#include <windows.h> +#include <excpt.h> +#include <string.h> +#include <stdlib.h> +#include <malloc.h> +#include <memory.h> +#include <signal.h> +#include <stdio.h> + +#if defined (_WIN64) && defined (__ia64__) +#error FIXME: Unsupported __ImageBase implementation. +#else +#define __ImageBase _image_base__ +/* This symbol is defined by the linker. */ +extern IMAGE_DOS_HEADER __ImageBase; +#endif + +#pragma pack(push,1) +typedef struct _UNWIND_INFO { + BYTE VersionAndFlags; + BYTE PrologSize; + BYTE CountOfUnwindCodes; + BYTE FrameRegisterAndOffset; + ULONG AddressOfExceptionHandler; +} UNWIND_INFO,*PUNWIND_INFO; +#pragma pack(pop) + +PIMAGE_SECTION_HEADER _FindPESectionByName (const char *); +PIMAGE_SECTION_HEADER _FindPESectionExec (size_t); +PBYTE _GetPEImageBase (void); + +int __mingw_init_ehandler (void); + +#ifdef _WIN64 +EXCEPTION_DISPOSITION __mingw_SEH_error_handler(struct _EXCEPTION_RECORD *, void *, struct _CONTEXT *, void *); + +#define MAX_PDATA_ENTRIES 32 +static RUNTIME_FUNCTION emu_pdata[MAX_PDATA_ENTRIES]; +static UNWIND_INFO emu_xdata[MAX_PDATA_ENTRIES]; + +int +__mingw_init_ehandler (void) +{ + static int was_here = 0; + size_t e = 0; + PIMAGE_SECTION_HEADER pSec; + PBYTE _ImageBase = _GetPEImageBase (); + + if (was_here || !_ImageBase) + return was_here; + was_here = 1; + if (_FindPESectionByName (".pdata") != NULL) + return 1; + + /* Allocate # of e tables and entries. */ + memset (emu_pdata, 0, sizeof (RUNTIME_FUNCTION) * MAX_PDATA_ENTRIES); + memset (emu_xdata, 0, sizeof (UNWIND_INFO) * MAX_PDATA_ENTRIES); + + e = 0; + /* Fill tables and entries. */ + while (e < MAX_PDATA_ENTRIES && (pSec = _FindPESectionExec (e)) != NULL) + { + emu_xdata[e].VersionAndFlags = 9; /* UNW_FLAG_EHANDLER | UNW_VERSION */ + emu_xdata[e].AddressOfExceptionHandler = + (DWORD)(size_t) ((LPBYTE)__mingw_SEH_error_handler - _ImageBase); + emu_pdata[e].BeginAddress = pSec->VirtualAddress; + emu_pdata[e].EndAddress = pSec->VirtualAddress + pSec->Misc.VirtualSize; + emu_pdata[e].UnwindData = + (DWORD)(size_t)((LPBYTE)&emu_xdata[e] - _ImageBase); + ++e; + } +#ifdef _DEBUG_CRT + if (!e || e > MAX_PDATA_ENTRIES) + abort (); +#endif + /* RtlAddFunctionTable. */ + if (e != 0) + RtlAddFunctionTable (emu_pdata, e, (DWORD64)_ImageBase); + return 1; +} + +extern void _fpreset (void); + +EXCEPTION_DISPOSITION +__mingw_SEH_error_handler (struct _EXCEPTION_RECORD* ExceptionRecord, + void *EstablisherFrame __attribute__ ((unused)), + struct _CONTEXT* ContextRecord __attribute__ ((unused)), + void *DispatcherContext __attribute__ ((unused))) +{ + EXCEPTION_DISPOSITION action = EXCEPTION_CONTINUE_SEARCH; + void (*old_handler) (int); + int reset_fpu = 0; + + switch (ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + /* test if the user has set SIGSEGV */ + old_handler = signal (SIGSEGV, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGSEGV, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGSEGV); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_PRIV_INSTRUCTION: + /* test if the user has set SIGILL */ + old_handler = signal (SIGILL, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGILL, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGILL); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + case EXCEPTION_FLT_INVALID_OPERATION: + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + case EXCEPTION_FLT_DENORMAL_OPERAND: + case EXCEPTION_FLT_OVERFLOW: + case EXCEPTION_FLT_UNDERFLOW: + case EXCEPTION_FLT_INEXACT_RESULT: + reset_fpu = 1; + /* fall through. */ + + case EXCEPTION_INT_DIVIDE_BY_ZERO: + /* test if the user has set SIGFPE */ + old_handler = signal (SIGFPE, SIG_DFL); + if (old_handler == SIG_IGN) + { + signal (SIGFPE, SIG_IGN); + if (reset_fpu) + _fpreset (); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGFPE); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_FLT_STACK_CHECK: + case EXCEPTION_INT_OVERFLOW: + case EXCEPTION_INVALID_HANDLE: + /*case EXCEPTION_POSSIBLE_DEADLOCK: */ + action = EXCEPTION_CONTINUE_EXECUTION; + break; + default: + break; + } + return action; +} + +#endif
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crt_handler.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtdll.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtdll.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtdll.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -110,10 +110,9 @@ } if (! nested) { - InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); - } - if (__dyn_tls_init_callback != NULL && - _IsNonwritableInCurrentImage ((PBYTE) &__dyn_tls_init_callback)) + (void) InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); + } + if (__dyn_tls_init_callback != NULL) { __dyn_tls_init_callback (hDllHandle, DLL_THREAD_ATTACH, lpreserved); } @@ -143,7 +142,7 @@ __onexitbegin = __onexitend = (_PVFV *) NULL; } __native_startup_state = __uninitialized; - InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); + (void) InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); } } return TRUE; @@ -151,13 +150,19 @@
static BOOL __DllMainCRTStartup (HANDLE, DWORD, LPVOID);
+BOOL WINAPI DllMainCRTStartup (HANDLE, DWORD, LPVOID); +int __mingw_init_ehandler (void); + BOOL WINAPI -DllMainCRTStartup(HANDLE hDllHandle,DWORD dwReason,LPVOID lpreserved) +DllMainCRTStartup (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { mingw_app_type = 0; if (dwReason == DLL_PROCESS_ATTACH) { __security_init_cookie (); +#ifdef _WIN64 + __mingw_init_ehandler (); +#endif } return __DllMainCRTStartup (hDllHandle, dwReason, lpreserved); }
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtexe.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtexe.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/crtexe.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -20,16 +20,15 @@ #include <tchar.h> #include <sect_attribs.h> #include <locale.h> -#include <intrin.h>
#ifndef __winitenv -extern wchar_t ***_imp____winitenv; -#define __winitenv (*_imp____winitenv) +extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv); +#define __winitenv (* __MINGW_IMP_SYMBOL(__winitenv)) #endif
#ifndef __initenv -extern char ***_imp____initenv; -#define __initenv (*_imp____initenv) +extern char *** __MINGW_IMP_SYMBOL(__initenv); +#define __initenv (* __MINGW_IMP_SYMBOL(__initenv)) #endif
/* Hack, for bug in ld. Will be removed soon. */ @@ -43,20 +42,16 @@
__declspec(dllimport) void __setusermatherr(int (__cdecl *)(struct _exception *));
-extern int *_imp___fmode; -extern int *_imp___commode; +extern int * __MINGW_IMP_SYMBOL(_fmode); +extern int * __MINGW_IMP_SYMBOL(_commode);
#undef _fmode extern int _fmode; -extern int *_imp___commode; -#define _commode (*_imp___commode) +extern int * __MINGW_IMP_SYMBOL(_commode); +#define _commode (* __MINGW_IMP_SYMBOL(_commode)) extern int _dowildcard;
-#if defined(__GNUC__) int _MINGW_INSTALL_DEBUG_MATHERR __attribute__((weak)) = 0; -#else -int _MINGW_INSTALL_DEBUG_MATHERR = 0; -#endif extern int __defaultmatherr; extern _CRTIMP void __cdecl _initterm(_PVFV *, _PVFV *);
@@ -73,6 +68,10 @@ extern _PVFV *__onexitend;
extern int mingw_app_type; + +HINSTANCE __mingw_winmain_hInstance; +_TCHAR *__mingw_winmain_lpCmdLine; +DWORD __mingw_winmain_nShowCmd;
static int argc; #ifdef WPRFLAG @@ -89,10 +88,10 @@ static int managedapp; static int has_cctor = 0; static _startupinfo startinfo; +static LPTOP_LEVEL_EXCEPTION_FILTER __mingw_oldexcpt_handler = NULL;
extern void _pei386_runtime_relocator (void); static long CALLBACK _gnu_exception_handler (EXCEPTION_POINTERS * exception_data); -//static LONG __mingw_vex(EXCEPTION_POINTERS * exception_data); #ifdef WPRFLAG static void duplicate_ppstrings (int ac, wchar_t ***av); #else @@ -101,7 +100,7 @@
static int __cdecl pre_c_init (void); static void __cdecl pre_cpp_init (void); - +static void __cdecl __mingw_prepare_except_for_msvcr80_and_higher (void); _CRTALLOC(".CRT$XIAA") _PIFV mingw_pcinit = pre_c_init; _CRTALLOC(".CRT$XCAA") _PVFV mingw_pcppinit = pre_cpp_init;
@@ -115,8 +114,8 @@ __set_app_type (_CONSOLE_APP); __onexitbegin = __onexitend = (_PVFV *) _encode_pointer ((_PVFV *)(-1));
- *_imp___fmode = _fmode; - *_imp___commode = _commode; + * __MINGW_IMP_SYMBOL(_fmode) = _fmode; + * __MINGW_IMP_SYMBOL(_commode) = _commode;
#ifdef WPRFLAG _wsetargv(); @@ -152,6 +151,8 @@
static int __tmainCRTStartup (void);
+int WinMainCRTStartup (void); + int WinMainCRTStartup (void) { mingw_app_type = 1; @@ -159,6 +160,12 @@ return __tmainCRTStartup (); }
+int mainCRTStartup (void); + +#ifdef _WIN64 +int __mingw_init_ehandler (void); +#endif + int mainCRTStartup (void) { mingw_app_type = 0; @@ -166,7 +173,7 @@ return __tmainCRTStartup (); }
- +static __declspec(noinline) int __tmainCRTStartup (void) { @@ -174,7 +181,7 @@ STARTUPINFO StartupInfo; BOOL inDoubleQuote = FALSE; memset (&StartupInfo, 0, sizeof (STARTUPINFO)); - + if (mingw_app_type) GetStartupInfo (&StartupInfo); { @@ -211,18 +218,17 @@ _ASSERTE(__native_startup_state == __initialized); if (! nested) (VOID)InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); - - if (__dyn_tls_init_callback != NULL && _IsNonwritableInCurrentImage ((PBYTE) &__dyn_tls_init_callback)) + + if (__dyn_tls_init_callback != NULL) __dyn_tls_init_callback (NULL, DLL_THREAD_ATTACH, NULL); - + _pei386_runtime_relocator (); - -#if defined(__i386__) || defined(_M_IX86) - __writefsdword(0, 0xffffffff); -#endif - //AddVectoredExceptionHandler (0, (PVECTORED_EXCEPTION_HANDLER)__mingw_vex); - SetUnhandledExceptionFilter (_gnu_exception_handler); - + __mingw_oldexcpt_handler = SetUnhandledExceptionFilter (_gnu_exception_handler); +#ifdef _WIN64 + __mingw_init_ehandler (); +#endif + __mingw_prepare_except_for_msvcr80_and_higher (); + _fpreset ();
if (mingw_app_type) @@ -239,7 +245,7 @@ #ifdef _MBCS if (_ismbblead (*lpszCommandLine)) { - if (lpszCommandLine) + if (*lpszCommandLine) lpszCommandLine++; } #endif @@ -248,21 +254,11 @@ while (*lpszCommandLine && (*lpszCommandLine <= SPACECHAR)) lpszCommandLine++;
-#ifdef WPRFLAG - /* C++ initialization. - gcc inserts this call automatically for a function called main, but not for wmain. */ - __main (); - mainret = wmain ( - (int) (StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT), - (wchar_t **) lpszCommandLine, (wchar_t **) (HINSTANCE) &__ImageBase); -#else - mainret = main ( - (int) (StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT), - (char **) lpszCommandLine, (char **) (HINSTANCE) &__ImageBase); -#endif + __mingw_winmain_hInstance = (HINSTANCE) &__ImageBase; + __mingw_winmain_lpCmdLine = lpszCommandLine; + __mingw_winmain_nShowCmd = StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? + StartupInfo.wShowWindow : SW_SHOWDEFAULT; } - else - { duplicate_ppstrings (argc, &argv); #ifdef WPRFLAG __winitenv = envp; @@ -274,7 +270,6 @@ __initenv = envp; mainret = main (argc, argv, envp); #endif - } if (!managedapp) exit (mainret);
@@ -328,7 +323,7 @@ }
static long CALLBACK -_gnu_exception_handler (EXCEPTION_POINTERS * exception_data) +_gnu_exception_handler (EXCEPTION_POINTERS *exception_data) { void (*old_handler) (int); long action = EXCEPTION_CONTINUE_SEARCH; @@ -399,42 +394,26 @@ action = EXCEPTION_CONTINUE_EXECUTION; } break; - +#ifdef _WIN64 + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_FLT_STACK_CHECK: + case EXCEPTION_INT_OVERFLOW: + case EXCEPTION_INVALID_HANDLE: + /*case EXCEPTION_POSSIBLE_DEADLOCK: */ + action = EXCEPTION_CONTINUE_EXECUTION; + break; +#endif default: break; } + + if (action == EXCEPTION_CONTINUE_SEARCH && __mingw_oldexcpt_handler) + action = (*__mingw_oldexcpt_handler)(exception_data); return action; }
-#if 0 -static LONG __mingw_vex(EXCEPTION_POINTERS * exception_data) -{ - /* TODO this is not chainablem, therefore need rewrite. Disabled the ill code. */ - #if 0 - #ifdef _WIN64 - __asm__ __volatile__ ( - "movq %gs:0,%rax" "\n\t" - "orq %rax,%rax\n\t" - "jz l1\n\t" - "jmp *8(%rax)\n\r" - "l1:\n\t" - "nop\n"); -#else - __asm__ __volatile__ ( - "movl %fs:0,%eax" "\n\t" - "orl %eax,%eax\n\t" - "jz l1\n\t" - "jmp *4(%eax)\n\r" - "l1:\n\t" - "nop\n"); -#endif -#endif - return _gnu_exception_handler(exception_data); -} -#endif - -#ifdef WPRFLAG - +#ifdef WPRFLAG static size_t wbytelen(const wchar_t *p) { size_t ret = 1; @@ -465,7 +444,7 @@ char **avl; int i; char **n = (char **) malloc (sizeof (char *) * (ac + 1)); - + avl=*av; for (i=0; i < ac; i++) { @@ -477,3 +456,35 @@ *av = n; } #endif + +static void +__mingw_invalidParameterHandler (const wchar_t *expression __attribute__ ((__unused__)), + const wchar_t *function __attribute__ ((__unused__)), + const wchar_t *file __attribute__ ((__unused__)), + unsigned int line __attribute__ ((__unused__)), + uintptr_t pReserved __attribute__ ((__unused__))) +{ +#ifdef __MINGW_SHOW_INVALID_PARAMETER_EXCEPTION + wprintf(L"Invalid parameter detected in function %s. File: %s Line: %d\n", function, file, line); + wprintf(L"Expression: %s\n", expression); +#endif +} + +static void __cdecl +__mingw_prepare_except_for_msvcr80_and_higher (void) +{ + _invalid_parameter_handler (*fIPH)(_invalid_parameter_handler) = NULL; + HMODULE hmsv = GetModuleHandleA ("msvcr80.dll"); + if(!hmsv) + hmsv = GetModuleHandleA ("msvcr70.dll"); + if (!hmsv) + hmsv = GetModuleHandleA ("msvcrt.dll"); + if (!hmsv) + hmsv = LoadLibraryA ("msvcrt.dll"); + if (!hmsv) + return; + fIPH = (_invalid_parameter_handler (*)(_invalid_parameter_handler)) + GetProcAddress (hmsv, "_set_invalid_parameter_handler"); + if (fIPH) + (*fIPH)(__mingw_invalidParameterHandler); +}
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dll_argv.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dll_argv.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dll_argv.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,25 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#ifdef CRTDLL +#undef CRTDLL +#endif + +#include <internal.h> + +extern int _dowildcard; + +#ifdef WPRFLAG +int __CRTDECL +__wsetargv (void) +#else +int __CRTDECL +__setargv (void) +#endif +{ + _dowildcard = 1; + return 0; +}
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dll_argv.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllentry.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllentry.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllentry.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -8,7 +8,11 @@ #define _DECL_DLLMAIN #include <process.h>
-BOOL WINAPI DllEntryPoint(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +BOOL WINAPI DllEntryPoint (HANDLE, DWORD, LPVOID); + +BOOL WINAPI DllEntryPoint (HANDLE hDllHandle __attribute__ ((__unused__)), + DWORD dwReason __attribute__ ((__unused__)), + LPVOID lpreserved __attribute__ ((__unused__))) { return TRUE; }
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllmain.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllmain.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dllmain.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -2,7 +2,9 @@ #define _DECL_DLLMAIN #include <process.h>
-BOOL WINAPI DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +BOOL WINAPI DllMain (HANDLE hDllHandle __attribute__ ((__unused__)), + DWORD dwReason __attribute__ ((__unused__)), + LPVOID lpreserved __attribute__ ((__unused__))) { return TRUE; }
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,146 @@ +/* + * mthr_stub.c + * + * Implement Mingw-w64 thread-support. + * + * This file is used by if gcc is built with --enable-threads=win32. + * + * Based on version created by Mumit Khan khan@nanotech.wisc.edu + * + */ + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include <windows.h> +#include <stdlib.h> + +BOOL __mingw_TLScallback (HANDLE hDllHandle, DWORD reason, LPVOID reserved); +int ___w64_mingwthr_remove_key_dtor (DWORD key); +int ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)); + +/* To protect the thread/key association data structure modifications. */ +static CRITICAL_SECTION __mingwthr_cs; +static volatile int __mingwthr_cs_init = 0; + +typedef struct __mingwthr_key __mingwthr_key_t; + +/* The list of threads active with key/dtor pairs. */ +struct __mingwthr_key { + DWORD key; + void (*dtor)(void *); + __mingwthr_key_t volatile *next; +}; + + +static __mingwthr_key_t volatile *key_dtor_list; + +int +___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)) +{ + __mingwthr_key_t *new_key; + + if (__mingwthr_cs_init == 0) + return 0; + new_key = (__mingwthr_key_t *) calloc (1, sizeof (__mingwthr_key_t)); + if (new_key == NULL) + return -1; + + new_key->key = key; + new_key->dtor = dtor; + + EnterCriticalSection (&__mingwthr_cs); + + new_key->next = key_dtor_list; + key_dtor_list = new_key; + + LeaveCriticalSection (&__mingwthr_cs); + return 0; +} + +int +___w64_mingwthr_remove_key_dtor (DWORD key) +{ + __mingwthr_key_t volatile *prev_key; + __mingwthr_key_t volatile *cur_key; + + if (__mingwthr_cs_init == 0) + return 0; + + EnterCriticalSection (&__mingwthr_cs); + + prev_key = NULL; + cur_key = key_dtor_list; + + while (cur_key != NULL) + { + if ( cur_key->key == key) + { + if (prev_key == NULL) + key_dtor_list = cur_key->next; + else + prev_key->next = cur_key->next; + + free ((void*)cur_key); + break; + } + prev_key = cur_key; + cur_key = cur_key->next; + } + + LeaveCriticalSection (&__mingwthr_cs); + return 0; +} + +static void +__mingwthr_run_key_dtors (void) +{ + __mingwthr_key_t volatile *keyp; + + if (__mingwthr_cs_init == 0) + return; + EnterCriticalSection (&__mingwthr_cs); + + for (keyp = key_dtor_list; keyp; ) + { + LPVOID value = TlsGetValue (keyp->key); + if (GetLastError () == ERROR_SUCCESS) + { + if (value) + (*keyp->dtor) (value); + } + keyp = keyp->next; + } + + LeaveCriticalSection (&__mingwthr_cs); +} + +BOOL +__mingw_TLScallback (HANDLE hDllHandle __attribute__ ((__unused__)), + DWORD reason, + LPVOID reserved __attribute__ ((__unused__))) +{ + switch (reason) + { + case DLL_PROCESS_ATTACH: + if (__mingwthr_cs_init == 0) + InitializeCriticalSection (&__mingwthr_cs); + __mingwthr_cs_init = 1; + break; + case DLL_PROCESS_DETACH: + __mingwthr_run_key_dtors(); + if (__mingwthr_cs_init == 1) + { + __mingwthr_cs_init = 0; + DeleteCriticalSection (&__mingwthr_cs); + } + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + __mingwthr_run_key_dtors(); + break; + } + return TRUE; +} +
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gccmain.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gccmain.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gccmain.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -13,10 +13,15 @@ extern func_ptr __DTOR_LIST__[];
static HMODULE hMsvcrt = NULL; +static int free_Msvcrt = 0;
typedef void __cdecl flongjmp(jmp_buf _Buf,int _Value);
flongjmp *fctMsvcrtLongJmp = NULL; + +void __do_global_dtors (void); +void __do_global_ctors (void); +void __main (void);
void __do_global_dtors (void) @@ -28,8 +33,9 @@ (*(p)) (); p++; } - if (hMsvcrt) + if (free_Msvcrt && hMsvcrt) { + free_Msvcrt = 0; FreeLibrary (hMsvcrt); hMsvcrt = NULL; } @@ -42,7 +48,15 @@ unsigned long i;
if (!hMsvcrt) { - hMsvcrt = LoadLibrary ("msvcrt.dll"); + hMsvcrt = GetModuleHandleA ("msvcr80.dll"); + if (!hMsvcrt) + hMsvcrt = GetModuleHandleA ("msvcr70.dll"); + if (!hMsvcrt) + hMsvcrt = GetModuleHandleA ("msvcrt.dll"); + if (!hMsvcrt) { + hMsvcrt = LoadLibraryA ("msvcrt.dll"); + free_Msvcrt = 1; + } fctMsvcrtLongJmp = (flongjmp *) GetProcAddress( hMsvcrt, "longjmp"); }
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gs_support.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gs_support.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/gs_support.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -43,6 +43,8 @@ DECLSPEC_SELECTANY UINT_PTR __security_cookie = DEFAULT_SECURITY_COOKIE; DECLSPEC_SELECTANY UINT_PTR __security_cookie_complement = ~(DEFAULT_SECURITY_COOKIE);
+void __cdecl __security_init_cookie (void); + void __cdecl __security_init_cookie (void) { @@ -86,6 +88,8 @@ __security_cookie_complement = ~cookie; }
+__declspec(noreturn) void __cdecl __report_gsfailure (ULONGLONG); + __declspec(noreturn) void __cdecl __report_gsfailure (ULONGLONG StackCookie) { @@ -108,22 +112,12 @@ else #endif { -#ifdef __GNUC__ #ifdef _WIN64 GS_ContextRecord.Rip = (ULONGLONG) __builtin_return_address (0); GS_ContextRecord.Rsp = (ULONGLONG) __builtin_frame_address (0) + 8; #else GS_ContextRecord.Eip = (DWORD) __builtin_return_address (0); GS_ContextRecord.Esp = (DWORD) __builtin_frame_address (0) + 4; -#endif -#else -#ifdef _WIN64 - GS_ContextRecord.Rip = (ULONGLONG) _ReturnAddress(); - GS_ContextRecord.Rsp = (ULONGLONG) _AddressOfReturnAddress(); -#else - GS_ContextRecord.Eip = (DWORD) _ReturnAddress(); - GS_ContextRecord.Esp = (DWORD) _AddressOfReturnAddress(); -#endif #endif }
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw.rbuild URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw.rbuild [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw.rbuild [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -8,21 +8,28 @@ <library>kernel32</library> <file>_newmode.c</file> <file>atonexit.c</file> + <file>binmode.c</file> <file>charmax.c</file> <file>cinitexe.c</file> <file>CRT_fp10.c</file> <file>CRT_fp8.c</file> + <file>CRT_glob.c</file> + <file>crt_handler.c</file> <file>dllentry.c</file> + <file>dummy_mingwthrd.c</file> <file>gccmain.c</file> - <file>getopt.c</file> + <!-- file>getopt.c</file --> <file>gs_support.c</file> <file>merr.c</file> + <!-- file>mingw_custom.c</file --> <file>mingw_helpers.c</file> + <file>mingwthrd_nomt.c</file> <file>natstart.c</file> <file>pesect.c</file> <file>pseudo-reloc.c</file> <file>pseudo-reloc-list.c</file> <file>tlssup.c</file> + <file>txtmode.c</file> <file>wildcard.c</file> <file>xncommod.c</file> <file>xthdloc.c</file> @@ -35,6 +42,7 @@ <file>crt0_c.c</file> <file>crtexe.c</file> <file>dllargv.c</file> + <file>ucrtexe.c</file> </module> <module name="mingw_wmain" type="staticlibrary" isstartuplib="true" unicode="yes" crt="dll"> <define name="_CRTBLD" /> @@ -44,11 +52,13 @@ <file>crt0_w.c</file> <file>crtexe.c</file> <file>dllargv.c</file> + <file>ucrtexe.c</file> </module> <module name="mingw_dllmain" type="staticlibrary" isstartuplib="true" crt="dll"> <define name="_CRTBLD" /> <include base="ReactOS">include/reactos/mingw-w64</include> <file>crtdll.c</file> <file>dllargv.c</file> + <file>udllargc.c</file> </module> </group>
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw_custom.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw_custom.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw_custom.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,16 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#include <_mingw.h> +#include "../revstamp.h" + +const char *__mingw_get_crt_info (void) +{ + return "MinGW-W64 Runtime " __MINGW64_VERSION_STR " (" + __MINGW64_VERSION_STATE " - " + "rev. " __MINGW_W64_REV ") " __MINGW_W64_REV_STAMP; +} +
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingw_custom.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,30 @@ +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include <windows.h> +#include <stdlib.h> + +/* We support TLS cleanup code in any case. If shared version of libgcc is used _CRT_MT has value 1, otherwise + we do tls cleanup in runtime and _CRT_MT has value 2. */ +int _CRT_MT = 2; + +int __mingwthr_key_dtor (DWORD key, void (*dtor)(void *)); +int __mingwthr_remove_key_dtor (DWORD key); + +extern int ___w64_mingwthr_remove_key_dtor (DWORD key); +extern int ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)); + +int +__mingwthr_remove_key_dtor (DWORD key) +{ + return ___w64_mingwthr_remove_key_dtor (key); +} + +int +__mingwthr_key_dtor (DWORD key, void (*dtor)(void *)) +{ + if (dtor) + return ___w64_mingwthr_add_key_dtor (key, dtor); + + return 0; +}
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pesect.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pesect.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pesect.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -5,6 +5,7 @@ */
#include <windows.h> +#include <string.h>
#if defined (_WIN64) && defined (__ia64__) #error FIXME: Unsupported __ImageBase implementation. @@ -14,6 +15,8 @@ /* This symbol is defined by the linker. */ extern IMAGE_DOS_HEADER __ImageBase; #endif + +BOOL _ValidateImageBase (PBYTE);
BOOL _ValidateImageBase (PBYTE pImageBase) @@ -33,6 +36,8 @@ return FALSE; return TRUE; } + +PIMAGE_SECTION_HEADER _FindPESection (PBYTE, DWORD_PTR);
PIMAGE_SECTION_HEADER _FindPESection (PBYTE pImageBase, DWORD_PTR rva) @@ -54,6 +59,80 @@ return NULL; }
+PIMAGE_SECTION_HEADER _FindPESectionByName (const char *); + +PIMAGE_SECTION_HEADER +_FindPESectionByName (const char *pName) +{ + PBYTE pImageBase; + PIMAGE_NT_HEADERS pNTHeader; + PIMAGE_SECTION_HEADER pSection; + unsigned int iSection; + + /* Long names aren't supported. */ + if (strlen (pName) > IMAGE_SIZEOF_SHORT_NAME) + return NULL; + + pImageBase = (PBYTE) &__ImageBase; + if (! _ValidateImageBase (pImageBase)) + return NULL; + + pNTHeader = (PIMAGE_NT_HEADERS) (pImageBase + ((PIMAGE_DOS_HEADER) pImageBase)->e_lfanew); + + for (iSection = 0, pSection = IMAGE_FIRST_SECTION (pNTHeader); + iSection < pNTHeader->FileHeader.NumberOfSections; + ++iSection,++pSection) + { + if (!strncmp ((char *) &pSection->Name[0], pName, IMAGE_SIZEOF_SHORT_NAME)) + return pSection; + } + return NULL; +} + +PIMAGE_SECTION_HEADER _FindPESectionExec (size_t); + +PIMAGE_SECTION_HEADER +_FindPESectionExec (size_t eNo) +{ + PBYTE pImageBase; + PIMAGE_NT_HEADERS pNTHeader; + PIMAGE_SECTION_HEADER pSection; + unsigned int iSection; + + pImageBase = (PBYTE) &__ImageBase; + if (! _ValidateImageBase (pImageBase)) + return NULL; + + pNTHeader = (PIMAGE_NT_HEADERS) (pImageBase + ((PIMAGE_DOS_HEADER) pImageBase)->e_lfanew); + + for (iSection = 0, pSection = IMAGE_FIRST_SECTION (pNTHeader); + iSection < pNTHeader->FileHeader.NumberOfSections; + ++iSection,++pSection) + { + if ((pSection->Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0) + { + if (!eNo) + return pSection; + --eNo; + } + } + return NULL; +} + +PBYTE _GetPEImageBase (void); + +PBYTE +_GetPEImageBase (void) +{ + PBYTE pImageBase; + pImageBase = (PBYTE) &__ImageBase; + if (! _ValidateImageBase (pImageBase)) + return NULL; + return pImageBase; +} + +BOOL _IsNonwritableInCurrentImage (PBYTE); + BOOL _IsNonwritableInCurrentImage (PBYTE pTarget) {
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pseudo-reloc.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pseudo-reloc.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/pseudo-reloc.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -2,12 +2,17 @@ * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER within this package. + * + * Contributed by Egor Duda deo@logos-m.ru + * Modified by addition of runtime_pseudo_reloc version 2 + * by Kai Tietz kai.tietz@onevision.com */
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <memory.h> +#include <assert.h>
extern char __RUNTIME_PSEUDO_RELOC_LIST__; extern char __RUNTIME_PSEUDO_RELOC_LIST_END__; @@ -31,15 +36,14 @@ } runtime_pseudo_reloc_v2;
static void -__write_memory (void *addr,const void *src,size_t len) +__write_memory (void *addr, const void *src, size_t len) { MEMORY_BASIC_INFORMATION b; DWORD oldprot; if (!len) return; - if (!VirtualQuery (addr, &b, sizeof(b))) - abort (); - // Protect + assert (VirtualQuery (addr, &b, sizeof(b))); + /* Temporarily allow write access to read-only protected memory. */ if (b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE) VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, &oldprot); @@ -52,7 +56,7 @@ #define RP_VERSION_V2 1
static void -do_pseudo_reloc (void* start,void *end,void *base) +do_pseudo_reloc (void *start, void *end, void *base) { ptrdiff_t addr_imp, reldata; ptrdiff_t reloc_target = (ptrdiff_t) ((char *)end - (char*)start); @@ -81,8 +85,10 @@ /* Check if this is a known version. */ if (v2_hdr->version != RP_VERSION_V2) { +#ifdef DEBUG fprintf (stderr, "pseudo_relocation protocol version %d is unknown to this runtime.\n", (int) v2_hdr->version); +#endif return; } /* Walk over header. */ @@ -120,7 +126,9 @@ #endif default: reldata=0; +#ifdef DEBUG fprintf(stderr, "Unknown pseudo relocation bit size %d\n",(int) (r->flags & 0xff)); +#endif break; } reldata -= ((ptrdiff_t) base + r->sym); @@ -145,8 +153,10 @@ } }
+void _pei386_runtime_relocator (void); + void -_pei386_runtime_relocator () +_pei386_runtime_relocator (void) { static int was_init = 0; if (was_init)
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/tlssup.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/tlssup.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/tlssup.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -14,6 +14,8 @@ #include <malloc.h> #include <crtdbg.h>
+extern BOOL __mingw_TLScallback (HANDLE hDllHandle, DWORD reason, LPVOID reserved); + #define FUNCS_PER_NODE 30
typedef struct TlsDtorNode { @@ -24,20 +26,21 @@
ULONG _tls_index = 0;
-_CRTALLOC(".tls") char _tls_start = 0; +/* TLS raw template data start and end. */ +_CRTALLOC(".tls$AAA") char _tls_start = 0; _CRTALLOC(".tls$ZZZ") char _tls_end = 0;
_CRTALLOC(".CRT$XLA") PIMAGE_TLS_CALLBACK __xl_a = 0; _CRTALLOC(".CRT$XLZ") PIMAGE_TLS_CALLBACK __xl_z = 0;
#ifdef _WIN64 -_CRTALLOC(".rdata$T") const IMAGE_TLS_DIRECTORY64 _tls_used = { - (ULONGLONG) &_tls_start, (ULONGLONG) &_tls_end, (ULONGLONG) &_tls_index, +_CRTALLOC(".tls") const IMAGE_TLS_DIRECTORY64 _tls_used = { + (ULONGLONG) &_tls_start+1, (ULONGLONG) &_tls_end, (ULONGLONG) &_tls_index, (ULONGLONG) (&__xl_a+1), (ULONG) 0, (ULONG) 0 }; #else -_CRTALLOC(".rdata$T") const IMAGE_TLS_DIRECTORY _tls_used = { - (ULONG)(ULONG_PTR) &_tls_start, (ULONG)(ULONG_PTR) &_tls_end, +_CRTALLOC(".tls") const IMAGE_TLS_DIRECTORY _tls_used = { + (ULONG)(ULONG_PTR) &_tls_start+1, (ULONG)(ULONG_PTR) &_tls_end, (ULONG)(ULONG_PTR) &_tls_index, (ULONG)(ULONG_PTR) (&__xl_a+1), (ULONG) 0, (ULONG) 0 }; @@ -47,38 +50,59 @@ #ifdef HAVE_ATTRIBUTE_THREAD #define __CRT_THREAD __declspec(thread) #else -#define __CRT_THREAD +#define __CRT_THREAD __thread #endif #endif
+#define DISABLE_MS_TLS 1 + static _CRTALLOC(".CRT$XDA") _PVFV __xd_a = 0; static _CRTALLOC(".CRT$XDZ") _PVFV __xd_z = 0; + +#if !defined (DISABLE_MS_TLS) static __CRT_THREAD TlsDtorNode *dtor_list; static __CRT_THREAD TlsDtorNode dtor_list_head; +#endif + +extern int _CRT_MT; + +BOOL WINAPI __dyn_tls_init (HANDLE, DWORD, LPVOID);
BOOL WINAPI __dyn_tls_init (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { _PVFV *pfunc;
+ /* We don't let us trick here. */ + if (_CRT_MT != 2) + _CRT_MT = 2; + if (dwReason != DLL_THREAD_ATTACH) - return TRUE; + { + if (dwReason == DLL_PROCESS_ATTACH) + __mingw_TLScallback (hDllHandle, dwReason, lpreserved); + return TRUE; + }
for (pfunc = &__xd_a + 1; pfunc != &__xd_z; ++pfunc) { if (*pfunc != NULL) (*pfunc)(); } - return TRUE; }
const PIMAGE_TLS_CALLBACK __dyn_tls_init_callback = (const PIMAGE_TLS_CALLBACK) __dyn_tls_init; _CRTALLOC(".CRT$XLC") PIMAGE_TLS_CALLBACK __xl_c = (PIMAGE_TLS_CALLBACK) __dyn_tls_init;
+int __cdecl __tlregdtor (_PVFV); + int __cdecl __tlregdtor (_PVFV func) { + if (!func) + return 0; +#if !defined (DISABLE_MS_TLS) if (dtor_list == NULL) { dtor_list = &dtor_list_head; @@ -96,29 +120,42 @@ dtor_list->count = 0; } dtor_list->funcs[dtor_list->count++] = func; +#endif return 0; }
static BOOL WINAPI __dyn_tls_dtor (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { +#if !defined (DISABLE_MS_TLS) TlsDtorNode *pnode, *pnext; int i; +#endif
if (dwReason != DLL_THREAD_DETACH && dwReason != DLL_PROCESS_DETACH) return TRUE; - - for (pnode = dtor_list; pnode != NULL; pnode = pnext) + /* As TLS variables are detroyed already by DLL_THREAD_DETACH + call, we have to avoid access on the possible DLL_PROCESS_DETACH + call the already destroyed TLS vars. + TODO: The used local thread based variables have to be handled + manually, so that we can control their lifetime here. */ +#if !defined (DISABLE_MS_TLS) + if (dwReason != DLL_PROCESS_DETACH) { - for (i = pnode->count - 1; i >= 0; --i) - { - if (pnode->funcs[i] != NULL) - (*pnode->funcs[i])(); - } - pnext = pnode->next; - if (pnext != NULL) - free ((void *) pnode); + for (pnode = dtor_list; pnode != NULL; pnode = pnext) + { + for (i = pnode->count - 1; i >= 0; --i) + { + if (pnode->funcs[i] != NULL) + (*pnode->funcs[i])(); + } + pnext = pnode->next; + if (pnext != NULL) + free ((void *) pnode); + } } +#endif + __mingw_TLScallback (hDllHandle, dwReason, lpreserved); return TRUE; }
Added: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/txtmode.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/txtmode.c (added) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/txtmode.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -1,0 +1,13 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#include <fcntl.h> + +/* Set default file mode to text */ + +/* Is this correct? Default value of _fmode in msvcrt.dll is 0. */ + +int _fmode = _O_TEXT;
Propchange: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/txtmode.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/wildcard.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/3r... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/wildcard.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/3rdparty/mingw/wildcard.c [iso-8859-1] Wed Nov 4 22:22:53 2009 @@ -4,4 +4,16 @@ * No warranty is given; refer to the file DISCLAIMER within this package. */
+/* _dowildcard is an int that controls the globbing of the command line. + * If _dowildcard is non-zero, the command line will be globbed: *.* + * will be expanded to be all files in the startup directory. + * In the mingw-w64 library the _dowildcard variable is defined as being + * 0, therefore command line globbing is DISABLED by default. To turn it + * on and to leave wildcard command line processing MS's globbing code, + * include a line in one of your source modules defining _dowildcard and + * setting it to -1, like so: + * int _dowildcard = -1; + */ + int _dowildcard = 0; +