Index: otp/erts/emulator/sys/win32/erl_win_sys.h =================================================================== --- otp.orig/erts/emulator/sys/win32/erl_win_sys.h 2015-04-28 02:03:43.365738400 +0300 +++ otp/erts/emulator/sys/win32/erl_win_sys.h 2015-04-28 02:05:48.446344700 +0300 @@ -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 @@ -200,8 +202,10 @@ /* ** These are to avoid irritating warnings */ +#ifndef __GNUC__ #pragma warning(disable : 4244) #pragma warning(disable : 4018) +#endif /* * Floating point support. Index: otp/erts/include/internal/ethread.h =================================================================== --- otp.orig/erts/include/internal/ethread.h 2015-04-28 01:58:06.597125000 +0300 +++ otp/erts/include/internal/ethread.h 2015-04-28 02:05:48.516345100 +0300 @@ -338,6 +338,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_event.h =================================================================== --- otp.orig/erts/include/internal/win/ethr_event.h 2015-04-28 01:56:49.130472100 +0300 +++ otp/erts/include/internal/win/ethr_event.h 2015-04-28 02:05:48.549678600 +0300 @@ -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/erts/emulator/drivers/win32/ttsl_drv.c =================================================================== --- otp.orig/erts/emulator/drivers/win32/ttsl_drv.c 2015-04-28 01:56:49.113805400 +0300 +++ otp/erts/emulator/drivers/win32/ttsl_drv.c 2015-04-28 02:05:48.573012000 +0300 @@ -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 2015-04-28 02:05:46.543002200 +0300 +++ otp/erts/emulator/drivers/win32/win_efile.c 2015-04-28 02:05:48.593012100 +0300 @@ -341,7 +341,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/erl_poll.c =================================================================== --- otp.orig/erts/emulator/sys/win32/erl_poll.c 2015-04-28 01:58:06.503375000 +0300 +++ otp/erts/emulator/sys/win32/erl_poll.c 2015-04-28 02:05:48.619678900 +0300 @@ -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/sys_interrupt.c =================================================================== --- otp.orig/erts/emulator/sys/win32/sys_interrupt.c 2015-04-28 01:56:49.123805400 +0300 +++ otp/erts/emulator/sys/win32/sys_interrupt.c 2015-04-28 02:05:48.669679100 +0300 @@ -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 2015-04-28 01:58:06.550250000 +0300 +++ otp/erts/epmd/src/epmd_int.h 2015-04-28 02:05:48.759679600 +0300 @@ -56,6 +56,8 @@ # endif # include # include +# include +# include #endif #include Index: otp/erts/include/internal/win/ethr_atomic.h =================================================================== --- otp.orig/erts/include/internal/win/ethr_atomic.h 2015-04-28 01:56:49.130472100 +0300 +++ otp/erts/include/internal/win/ethr_atomic.h 2015-04-28 02:05:48.813013200 +0300 @@ -66,56 +66,80 @@ # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT # define ETHR_WIN_HAVE_DEC +# ifndef __GNUC__ # pragma intrinsic(_InterlockedDecrement) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT_REL # define ETHR_WIN_HAVE_DEC_REL +# ifndef __GNUC__ # pragma intrinsic(_InterlockedDecrement_rel) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT # define ETHR_WIN_HAVE_INC +# ifndef __GNUC__ # pragma intrinsic(_InterlockedIncrement) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ # define ETHR_WIN_HAVE_INC_ACQ +# ifndef __GNUC__ # pragma intrinsic(_InterlockedIncrement_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD # define ETHR_WIN_HAVE_XCHG_ADD +# ifndef __GNUC__ # pragma intrinsic(_InterlockedExchangeAdd) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ # define ETHR_WIN_HAVE_XCHG_ADD_ACQ +# ifndef __GNUC__ # pragma intrinsic(_InterlockedExchangeAdd_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGE # define ETHR_WIN_HAVE_XCHG +# ifndef __GNUC__ # pragma intrinsic(_InterlockedExchange) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDAND # define ETHR_WIN_HAVE_AND +# ifndef __GNUC__ # pragma intrinsic(_InterlockedAnd) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDOR # define ETHR_WIN_HAVE_OR +# 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 +# ifndef __GNUC__ # pragma intrinsic(_InterlockedCompareExchange_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL # define ETHR_WIN_HAVE_CMPXCHG_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,51 +152,75 @@ # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT64 # define ETHR_WIN_HAVE_DEC +# ifndef __GNUC__ # pragma intrinsic(_InterlockedDecrement64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDDECREMENT64_REL # define ETHR_WIN_HAVE_DEC_REL +# ifndef __GNUC__ # pragma intrinsic(_InterlockedDecrement64_rel) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ # define ETHR_WIN_HAVE_INC_ACQ +# ifndef __GNUC__ # pragma intrinsic(_InterlockedIncrement64_acq) -# endif +# endif +# endif # ifdef ETHR_HAVE__INTERLOCKEDINCREMENT64 # define ETHR_WIN_HAVE_INC +# ifndef __GNUC__ # pragma intrinsic(_InterlockedIncrement64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 # define ETHR_WIN_HAVE_XCHG_ADD +# ifndef __GNUC__ # pragma intrinsic(_InterlockedExchangeAdd64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ # define ETHR_WIN_HAVE_XCHG_ADD_ACQ +# ifndef __GNUC__ # pragma intrinsic(_InterlockedExchangeAdd64_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDEXCHANGE64 # define ETHR_WIN_HAVE_XCHG +# ifndef __GNUC__ # pragma intrinsic(_InterlockedExchange64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDAND64 # define ETHR_WIN_HAVE_AND +# ifndef __GNUC__ # pragma intrinsic(_InterlockedAnd64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDOR64 # define ETHR_WIN_HAVE_OR +# ifndef __GNUC__ # pragma intrinsic(_InterlockedOr64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 # define ETHR_WIN_HAVE_CMPXCHG +# ifndef __GNUC__ # pragma intrinsic(_InterlockedCompareExchange64) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ # define ETHR_WIN_HAVE_CMPXCHG_ACQ +# ifndef __GNUC__ # pragma intrinsic(_InterlockedCompareExchange64_acq) +# endif # endif # ifdef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL # define ETHR_WIN_HAVE_CMPXCHG_REL +# ifndef __GNUC__ # pragma intrinsic(_InterlockedCompareExchange64_rel) +# endif # endif # define ETHR_ILCKD__(X) _Interlocked ## X ## 64 Index: otp/erts/emulator/sys/win32/erl_main.c =================================================================== --- otp.orig/erts/emulator/sys/win32/erl_main.c 2015-04-28 01:56:49.117138700 +0300 +++ otp/erts/emulator/sys/win32/erl_main.c 2015-04-28 02:06:09.143111400 +0300 @@ -22,8 +22,9 @@ #include "sys.h" #include "global.h" -void +int main(int argc, char **argv) { erl_start(argc, argv); + return 0; } Index: otp/lib/erl_interface/src/connect/ei_connect.c =================================================================== --- otp.orig/lib/erl_interface/src/connect/ei_connect.c 2015-04-28 01:56:49.133805500 +0300 +++ otp/lib/erl_interface/src/connect/ei_connect.c 2015-04-28 02:05:48.883013500 +0300 @@ -30,6 +30,7 @@ #include #include #include +#include #elif VXWORKS #include Index: otp/lib/erl_interface/src/misc/show_msg.c =================================================================== --- otp.orig/lib/erl_interface/src/misc/show_msg.c 2015-04-28 01:56:49.137138800 +0300 +++ otp/lib/erl_interface/src/misc/show_msg.c 2015-04-28 02:05:48.986347300 +0300 @@ -39,6 +39,8 @@ # include # endif # endif +#else +# include #endif #include "eiext.h"