Index: otp/erts/emulator/drivers/win32/registry_drv.c =================================================================== --- otp.orig/erts/emulator/drivers/win32/registry_drv.c 2012-12-18 09:56:14.395375000 +0200 +++ otp/erts/emulator/drivers/win32/registry_drv.c 2012-12-18 09:58:44.801625000 +0200 @@ -22,6 +22,9 @@ */ #include +#include +#include + #include "erl_driver.h" #include "sys.h" Index: otp/erts/emulator/drivers/win32/ttsl_drv.c =================================================================== --- otp.orig/erts/emulator/drivers/win32/ttsl_drv.c 2012-12-18 09:56:14.395375000 +0200 +++ otp/erts/emulator/drivers/win32/ttsl_drv.c 2012-12-18 09:58:44.817250000 +0200 @@ -98,15 +98,15 @@ static HANDLE ttysl_out = INVALID_HANDLE_VALUE; /* Handle for console output */ /* Functions that work on the line buffer. */ -static int start_lbuf(); -static int stop_lbuf(); -static int put_chars(); -static int move_rel(); -static int ins_chars(); -static int del_chars(); +static int start_lbuf(void); +static int stop_lbuf(void); +static int put_chars(byte *s, int l); +static int move_rel(int n); +static int ins_chars(byte *s, int l); +static int del_chars(int n); static int step_over_chars(int n); -static int insert_buf(); -static int write_buf(); +static int insert_buf(byte *s, int n); +static int write_buf(Uint32 *s, int n); static void move_cursor(int, int); /* Define the driver table entry. */ Index: otp/erts/emulator/drivers/win32/win_efile.c =================================================================== --- otp.orig/erts/emulator/drivers/win32/win_efile.c 2012-12-18 09:56:14.395375000 +0200 +++ otp/erts/emulator/drivers/win32/win_efile.c 2012-12-18 09:58:44.832875000 +0200 @@ -209,7 +209,7 @@ ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (ov.hEvent == NULL) return set_error(errInfo); - if (! write_file_gather(fd, iov, *size, NULL, &ov)) + if (!WriteFileGather(fd, iov, *size, NULL, &ov)) return set_error(errInfo); if (WaitForSingleObject(ov.hEvent, INFINITE) != WAIT_OBJECT_0) return set_error(errInfo); Index: otp/erts/emulator/sys/win32/dosmap.c =================================================================== --- otp.orig/erts/emulator/sys/win32/dosmap.c 2012-12-18 09:56:14.411000000 +0200 +++ otp/erts/emulator/sys/win32/dosmap.c 2012-12-18 09:58:44.864125000 +0200 @@ -24,7 +24,7 @@ /* Only use for win32 if linking to MSVCR??.DLL and not if statically linking to LIBCMT.LIB */ -#if defined(WIN32) && defined(_MT) && defined(_DLL) +#if defined(WIN32) #include #include Index: otp/erts/emulator/sys/win32/erl_poll.c =================================================================== --- otp.orig/erts/emulator/sys/win32/erl_poll.c 2012-12-18 09:56:14.411000000 +0200 +++ otp/erts/emulator/sys/win32/erl_poll.c 2012-12-18 09:58:44.864125000 +0200 @@ -25,6 +25,7 @@ #include "sys.h" #include "erl_alloc.h" #include "erl_poll.h" +#include "erl_thr_progress.h" /* * Some debug macros Index: otp/erts/emulator/sys/win32/erl_win_sys.h =================================================================== --- otp.orig/erts/emulator/sys/win32/erl_win_sys.h 2012-12-18 09:56:14.411000000 +0200 +++ otp/erts/emulator/sys/win32/erl_win_sys.h 2012-12-18 09:58:44.879750000 +0200 @@ -51,10 +51,12 @@ #include #include #include +#ifndef __GNUC__ #pragma comment(linker,"/manifestdependency:\"type='win32' "\ "name='Microsoft.Windows.Common-Controls' "\ "version='6.0.0.0' processorArchitecture='*' "\ "publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif #define WIN32_LEAN_AND_MEAN #include @@ -180,8 +182,10 @@ /* ** These are to avoid irritating warnings */ +#ifndef __GNUC__ #pragma warning(disable : 4244) #pragma warning(disable : 4018) +#endif /* * Floating point support. Index: otp/erts/emulator/sys/win32/sys.c =================================================================== --- otp.orig/erts/emulator/sys/win32/sys.c 2012-12-18 09:56:22.442250000 +0200 +++ otp/erts/emulator/sys/win32/sys.c 2012-12-18 09:58:44.895375000 +0200 @@ -32,7 +32,7 @@ #include "erl_threads.h" #include "../../drivers/win32/win_con.h" #include "erl_cpu_topology.h" - +#include "../common/erl_check_io.h" void erts_sys_init_float(void); @@ -57,7 +57,9 @@ #define __argv e_argv #endif -static void init_console(); +struct async_io; + +static void init_console(void); static int get_and_remove_option(int* argc, char** argv, const char* option); static char *get_and_remove_option2(int *argc, char **argv, const char *option); @@ -157,7 +159,7 @@ HMODULE beam_module = NULL; -void erl_sys_init(); +void erl_sys_init(void); void erl_sys_args(int* argc, char** argv); @@ -383,10 +385,10 @@ } void -os_version(pMajor, pMinor, pBuild) -int* pMajor; /* Pointer to major version. */ -int* pMinor; /* Pointer to minor version. */ -int* pBuild; /* Pointer to build number. */ +os_version( + int * pMajor, /* Pointer to major version. */ + int * pMinor, /* Pointer to minor version. */ + int * pBuild) /* Pointer to build number. */ { *pMajor = int_os_version.dwMajorVersion; *pMinor = int_os_version.dwMinorVersion; @@ -982,8 +984,8 @@ if (aio->thread != (HANDLE) -1) { DEBUGF(("async_read_file: signaling thread 0x%x, event 0x%x\n", aio->thread, aio->ioAllowed)); - OV_BUFFER_PTR(aio) = buf; - OV_NUM_TO_READ(aio) = numToRead; + aio->ov.Internal = (ULONG_PTR)buf; + aio->ov.InternalHigh = (ULONG_PTR)numToRead; ResetEvent(aio->ov.hEvent); SetEvent(aio->ioAllowed); } else { @@ -1032,8 +1034,8 @@ if (aio->thread != (HANDLE) -1) { DEBUGF(("async_write_file: signaling thread 0x%x, event 0x%x\n", aio->thread, aio->ioAllowed)); - OV_BUFFER_PTR(aio) = buf; - OV_NUM_TO_READ(aio) = numToWrite; + aio->ov.Internal = (ULONG_PTR)buf; + aio->ov.InternalHigh = (ULONG_PTR)numToWrite; ResetEvent(aio->ov.hEvent); SetEvent(aio->ioAllowed); } else { Index: otp/erts/emulator/sys/win32/sys_float.c =================================================================== --- otp.orig/erts/emulator/sys/win32/sys_float.c 2012-12-18 09:56:14.426625000 +0200 +++ otp/erts/emulator/sys/win32/sys_float.c 2012-12-18 09:58:44.926625000 +0200 @@ -21,6 +21,7 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include "sys.h" #include "signal.h" Index: otp/erts/emulator/sys/win32/sys_interrupt.c =================================================================== --- otp.orig/erts/emulator/sys/win32/sys_interrupt.c 2012-12-18 09:56:14.426625000 +0200 +++ otp/erts/emulator/sys/win32/sys_interrupt.c 2012-12-18 09:58:44.926625000 +0200 @@ -49,6 +49,8 @@ extern int nohup; HANDLE erts_sys_break_event = NULL; +extern void do_break(void); + void erts_do_break_handling(void) { /* Index: otp/erts/epmd/src/epmd_int.h =================================================================== --- otp.orig/erts/epmd/src/epmd_int.h 2012-12-18 09:56:14.426625000 +0200 +++ otp/erts/epmd/src/epmd_int.h 2012-12-18 09:58:44.942250000 +0200 @@ -51,6 +51,8 @@ # endif # include # include +# include +# include #endif #include Index: otp/erts/etc/win32/win_erlexec.c =================================================================== --- otp.orig/erts/etc/win32/win_erlexec.c 2012-12-18 09:56:14.426625000 +0200 +++ otp/erts/etc/win32/win_erlexec.c 2012-12-18 09:58:44.973500000 +0200 @@ -46,9 +46,7 @@ #define LOAD_BEAM_DYNAMICALLY 1 static int start(char* emu, char** argv); static void start_winsock(void); -static char* last_error(void); static char* last_wsa_error(void); -static char* win32_errorstr(int error); static int has_console(void); static char** fnuttify_argv(char **argv); static void free_fnuttified(char **v); @@ -300,7 +298,7 @@ exit(1); } -static char* +char* last_error(void) { return win32_errorstr(GetLastError()); @@ -312,7 +310,7 @@ * isn't called again. */ -static char* +char* win32_errorstr(int error) { static LPTSTR lpBufPtr = NULL; Index: otp/erts/include/internal/ethread.h =================================================================== --- otp.orig/erts/include/internal/ethread.h 2012-12-18 09:56:22.473500000 +0200 +++ otp/erts/include/internal/ethread.h 2012-12-18 09:58:44.989125000 +0200 @@ -329,6 +329,10 @@ extern ethr_runtime_t ethr_runtime__; +#ifdef ETHR_WIN32_THREADS +int ethr_win_get_errno__(void); +#endif + /* For native CPU-optimised atomics, spinlocks, and rwlocks. */ #if !defined(ETHR_DISABLE_NATIVE_IMPLS) # if defined(__GNUC__) Index: otp/erts/include/internal/win/ethr_atomic.h =================================================================== --- otp.orig/erts/include/internal/win/ethr_atomic.h 2012-12-18 09:56:14.442250000 +0200 +++ otp/erts/include/internal/win/ethr_atomic.h 2012-12-18 09:58:45.004750000 +0200 @@ -66,56 +66,80 @@ # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT # define ETHR_WIN_HAVE_DEC -# pragma intrinsic(_InterlockedDecrement) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedDecrement) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT_REL # define ETHR_WIN_HAVE_DEC_REL -# pragma intrinsic(_InterlockedDecrement_rel) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedDecrement_rel) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT # define ETHR_WIN_HAVE_INC -# pragma intrinsic(_InterlockedIncrement) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedIncrement) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ # define ETHR_WIN_HAVE_INC_ACQ -# pragma intrinsic(_InterlockedIncrement_acq) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedIncrement_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD # define ETHR_WIN_HAVE_XCHG_ADD -# pragma intrinsic(_InterlockedExchangeAdd) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedExchangeAdd) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ # define ETHR_WIN_HAVE_XCHG_ADD_ACQ -# pragma intrinsic(_InterlockedExchangeAdd_acq) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedExchangeAdd_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGE # define ETHR_WIN_HAVE_XCHG -# pragma intrinsic(_InterlockedExchange) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedExchange) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDAND # define ETHR_WIN_HAVE_AND -# pragma intrinsic(_InterlockedAnd) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedAnd) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDOR # define ETHR_WIN_HAVE_OR -# pragma intrinsic(_InterlockedOr) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedOr) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE # define ETHR_WIN_HAVE_CMPXCHG -# pragma intrinsic(_InterlockedCompareExchange) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedCompareExchange) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ # define ETHR_WIN_HAVE_CMPXCHG_ACQ -# pragma intrinsic(_InterlockedCompareExchange_acq) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedCompareExchange_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL # define ETHR_WIN_HAVE_CMPXCHG_REL -# pragma intrinsic(_InterlockedCompareExchange_rel) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedCompareExchange_rel) +# endif # endif -# define ETHR_ILCKD__(X) _Interlocked ## X -# define ETHR_ILCKD_ACQ__(X) _Interlocked ## X ## _acq -# define ETHR_ILCKD_REL__(X) _Interlocked ## X ## _rel +# define ETHR_ILCKD__(X) Interlocked ## X +# define ETHR_ILCKD_ACQ__(X) Interlocked ## X ## _acq +# define ETHR_ILCKD_REL__(X) Interlocked ## X ## _rel # define ETHR_NATMC_FUNC__(X) ethr_native_atomic32_ ## X # define ETHR_ATMC_T__ ethr_native_atomic32_t @@ -128,63 +152,88 @@ # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT64 # define ETHR_WIN_HAVE_DEC -# pragma intrinsic(_InterlockedDecrement64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedDecrement64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT64_REL # define ETHR_WIN_HAVE_DEC_REL -# pragma intrinsic(_InterlockedDecrement64_rel) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedDecrement64_rel) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ # define ETHR_WIN_HAVE_INC_ACQ -# pragma intrinsic(_InterlockedIncrement64_acq) -# endif +# ifndef __GNUC__ +# pragma intrinsic(InterlockedIncrement64_acq) +# endif +# endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT64 # define ETHR_WIN_HAVE_INC -# pragma intrinsic(_InterlockedIncrement64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedIncrement64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 # define ETHR_WIN_HAVE_XCHG_ADD -# pragma intrinsic(_InterlockedExchangeAdd64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedExchangeAdd64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ # define ETHR_WIN_HAVE_XCHG_ADD_ACQ -# pragma intrinsic(_InterlockedExchangeAdd64_acq) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedExchangeAdd64_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGE64 # define ETHR_WIN_HAVE_XCHG -# pragma intrinsic(_InterlockedExchange64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedExchange64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDAND64 # define ETHR_WIN_HAVE_AND -# pragma intrinsic(_InterlockedAnd64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedAnd64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDOR64 # define ETHR_WIN_HAVE_OR -# pragma intrinsic(_InterlockedOr64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedOr64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 # define ETHR_WIN_HAVE_CMPXCHG -# pragma intrinsic(_InterlockedCompareExchange64) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedCompareExchange64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ # define ETHR_WIN_HAVE_CMPXCHG_ACQ -# pragma intrinsic(_InterlockedCompareExchange64_acq) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedCompareExchange64_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL # define ETHR_WIN_HAVE_CMPXCHG_REL -# pragma intrinsic(_InterlockedCompareExchange64_rel) +# ifndef __GNUC__ +# pragma intrinsic(InterlockedCompareExchange64_rel) +# endif # endif -# define ETHR_ILCKD__(X) _Interlocked ## X ## 64 -# define ETHR_ILCKD_ACQ__(X) _Interlocked ## X ## 64_acq -# define ETHR_ILCKD_REL__(X) _Interlocked ## X ## 64_rel +# define ETHR_ILCKD__(X) Interlocked ## X ## 64 +# define ETHR_ILCKD_ACQ__(X) Interlocked ## X ## 64_acq +# define ETHR_ILCKD_REL__(X) Interlocked ## X ## 64_rel # define ETHR_NATMC_FUNC__(X) ethr_native_atomic64_ ## X # define ETHR_ATMC_T__ ethr_native_atomic64_t # define ETHR_AINT_T__ ethr_sint64_t # else -# error "Unsupported integer size" +# error "Unsupported integer +size" # endif typedef struct { Index: otp/erts/include/internal/win/ethr_event.h =================================================================== --- otp.orig/erts/include/internal/win/ethr_event.h 2012-12-18 09:56:14.442250000 +0200 +++ otp/erts/include/internal/win/ethr_event.h 2012-12-18 09:58:45.020375000 +0200 @@ -32,12 +32,9 @@ #if defined(ETHR_TRY_INLINE_FUNCS) || defined(ETHR_EVENT_IMPL__) -#pragma intrinsic(_InterlockedExchange) - static ETHR_INLINE void ETHR_INLINE_FUNC_NAME_(ethr_event_set)(ethr_event *e) { - /* _InterlockedExchange() imply a full memory barrier which is important */ ethr_sint32_t state = ethr_atomic32_xchg_wb(&e->state, ETHR_EVENT_ON__); if (state == ETHR_EVENT_OFF_WAITER__) { if (!SetEvent(e->handle)) Index: otp/lib/wx/c_src/egl_impl.cpp =================================================================== --- otp.orig/lib/wx/c_src/egl_impl.cpp 2012-12-18 09:56:14.473500000 +0200 +++ otp/lib/wx/c_src/egl_impl.cpp 2012-12-18 09:58:45.036000000 +0200 @@ -74,11 +74,9 @@ # define OPENGLU_LIB "libGLU.so.1" # endif #endif -extern "C" { DRIVER_INIT(EGL_DRIVER) { return NULL; } -} int egl_init_opengl(void *erlCallbacks) {