-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Please review, i'll split it up and commit it.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQGcBAEBAgAGBQJTiLoLAAoJEGm5GZTakYsszxoMALMK9wIyw737hP/+HPbnj2VJ KZ1r4j49ofWF1K0KQt0oyyDKk2gkP2Kys5xdzgHoArrp1cKEU50Z+EurKL0Uh4Xz m3ZQ11NYr6Ws5CZyLZZ0yY8l00bJe8F1iE4aiz07D5z2wnap3XPJh43870VhgtyQ bF1CuU3lVchreKOUKusXYP8q7mc5rVMWDQ6YulRJyhps7EvL1OferXZHUlf4V11V JQWCmGhiOatKIYdQhRRS1dUNj7eEN5GviwEl667DVDz6GriRaPbA6g4LEf2eNk2P eTpiBNLv7+/h69n5TEuFCa6uA/+6K0B9FwlzsxcrWCo99ozsPMImtHtSAKYgatLL VE49ztqhR5lKCq9zHz5yRCLzlUmUwkye9YCSDoJkIf9HtGLJ0olAkzBwu8mZJjsS CHO03XvEOsrfisH9y2hEcsvOUtwgHqzbQTEKJxPD6t/s0UGC5/dvlIgBPm/Y5zKh M1mBJdHTwz9htLkg8GDPPgUagL3ilEgxIqCJSavvwA== =1dqI -----END PGP SIGNATURE-----
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index fbb00b6..b809595 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -306,7 +306,7 @@ src_intrincs= \
intrincs/ilockor64.c intrincs/ilockxor.c intrincs/ilockxor64.c intrincs/inbyte.c intrincs/inbytestring.c \
intrincs/indword.c intrincs/indwordstring.c intrincs/inword.c intrincs/inwordstring.c intrincs/outbyte.c \
intrincs/outbytestring.c intrincs/outdword.c intrincs/outdwordstring.c intrincs/outword.c intrincs/outwordstring.c \
- intrincs/rdtsc.c intrincs/readcr0.c intrincs/readcr2.c intrincs/readcr3.c intrincs/readcr4.c \
+ intrincs/readcr0.c intrincs/readcr2.c intrincs/readcr3.c intrincs/readcr4.c \
intrincs/readcr8.c intrincs/readmsr.c intrincs/writecr0.c intrincs/writecr2.c intrincs/writecr3.c \
intrincs/writecr4.c intrincs/writecr8.c intrincs/writemsr.c intrincs/__int2c.c intrincs/RtlSecureZeroMemory.c
@@ -314,7 +314,7 @@ src_intrincs= \
src_intrincs64=\
intrincs/bittest64.c intrincs/bittestc64.c intrincs/bittestr64.c intrincs/bittestri64.c \
intrincs/bittests64.c intrincs/bittestsi64.c intrincs/bitscanfwd64.c intrincs/bitscanrev64.c \
- intrincs/ilockadd64.c intrincs/readgsbyte.c intrincs/readgsword.c intrincs/readgsdword.c \
+ intrincs/ilockadd64.c intrincs/rdtsc.c intrincs/readgsbyte.c intrincs/readgsword.c intrincs/readgsdword.c \
intrincs/readgsqword.c intrincs/writegsbyte.c intrincs/writegsword.c intrincs/writegsdword.c \
intrincs/writegsqword.c intrincs/mul128ex.c intrincs/umul128ex.c intrincs/_mul128.c \
intrincs/_umul128.c intrincs/__movsq.c intrincs/__stosq.c intrincs/__shiftright128.c \
@@ -322,9 +322,12 @@ src_intrincs64=\
# these only go into the 32 bit version:
src_intrincs32=\
- intrincs/readfsbyte.c intrincs/readfsword.c intrincs/readfsdword.c \
+ intrincs/rdtsc.c intrincs/readfsbyte.c intrincs/readfsword.c intrincs/readfsdword.c \
intrincs/writefsbyte.c intrincs/writefsword.c intrincs/writefsdword.c
+# these only go into the ARM32 version:
+src_intrincsarm32=
+
winrtlibs=\
winrt/libruntimeobject.a
@@ -1148,14 +1151,14 @@ dxerr.c \
test.c
libarm32_LIBRARIES = libarm32/libkernel32.a
-libarm32_libkernel32_a_SOURCES = $(src_intrincs)
+libarm32_libkernel32_a_SOURCES = $(src_intrincs) $(src_intrincsarm32)
libarm32_libkernel32_a_AR = $(DTLIBARM32) && $(AR) $(ARFLAGS)
libarm32_libkernel32_a_CPPFLAGS=$(CPPFLAGSARM32) $(extra_include) $(AM_CPPFLAGS)
if !W32API
libarm32_LIBRARIES += libarm32/libmsvcrt.a
libarm32_libmsvcrt_a_SOURCES = $(src_msvcrt32)
-libarm32_libmsvcrt_a_AR = $(DTDEFARM32) && $(AR) $(ARFLAGS)
+libarm32_libmsvcrt_a_AR = $(DTLIBARM32) && $(AR) $(ARFLAGS)
libarm32_libmsvcrt_a_CPPFLAGS=$(CPPFLAGSARM32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes)
EXTRA_libarm32_libmsvcrt_a_DEPENDENCIES=libarm32/msvcrt.def
endif
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
index fef0172..ade4124 100644
--- a/mingw-w64-crt/crt/crtexe.c
+++ b/mingw-w64-crt/crt/crtexe.c
@@ -226,7 +226,7 @@ __tmainCRTStartup (void)
WINBOOL inDoubleQuote = FALSE;
memset (&StartupInfo, 0, sizeof (STARTUPINFO));
-#ifndef _WIN64
+#if defined(__i386__) || defined(_X86_)
/* We need to make sure that this function is build with frame-pointer
and that we align the stack to 16 bytes for the sake of SSE ops in main
or in functions inlined into main. */
@@ -235,7 +235,7 @@ __tmainCRTStartup (void)
#ifdef __GNUC__
asm __volatile__ ("andl $-16, %%esp" : : : "%esp");
#endif
-#endif
+#endif /* defined(__i386__) || defined(_X86_) */
if (mingw_app_type)
GetStartupInfo (&StartupInfo);
diff --git a/mingw-w64-crt/crt/gs_support.c b/mingw-w64-crt/crt/gs_support.c
index 4126526..dbd95d5 100644
--- a/mingw-w64-crt/crt/gs_support.c
+++ b/mingw-w64-crt/crt/gs_support.c
@@ -119,21 +119,26 @@ __report_gsfailure (ULONG_PTR StackCookie)
else
#endif /* _WIN64 */
{
-#ifdef _WIN64
+#if defined(__x86_64__) || defined(_AMD64_)
GS_ContextRecord.Rip = (ULONGLONG) _ReturnAddress();
GS_ContextRecord.Rsp = (ULONGLONG) _AddressOfReturnAddress() + 8;
-#else
+#elif defined(__i386__) || defined(_X86_)
GS_ContextRecord.Eip = (DWORD) _ReturnAddress();
GS_ContextRecord.Esp = (DWORD) _AddressOfReturnAddress() + 4;
+#elif defined(__arm__) || defined(_ARM_)
+ GS_ContextRecord.Pc = (DWORD) _ReturnAddress();
+ GS_ContextRecord.Sp = (DWORD) _AddressOfReturnAddress() + 4;
#endif /* _WIN64 */
}
-#ifdef _WIN64
+#if defined(__x86_64__) || defined(_AMD64_)
GS_ExceptionRecord.ExceptionAddress = (PVOID) GS_ContextRecord.Rip;
GS_ContextRecord.Rcx = StackCookie;
-#else
+#elif defined(__i386__) || defined(_X86_)
GS_ExceptionRecord.ExceptionAddress = (PVOID) GS_ContextRecord.Eip;
GS_ContextRecord.Ecx = StackCookie;
+#elif defined(__arm__) || defined(_ARM_)
+ GS_ExceptionRecord.ExceptionAddress = (PVOID) GS_ContextRecord.Pc;
#endif /* _WIN64 */
GS_ExceptionRecord.ExceptionCode = STATUS_STACK_BUFFER_OVERRUN;
GS_ExceptionRecord.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
diff --git a/mingw-w64-crt/intrincs/ilockadd.c b/mingw-w64-crt/intrincs/ilockadd.c
index 115c18b..8e3d2f2 100644
--- a/mingw-w64-crt/intrincs/ilockadd.c
+++ b/mingw-w64-crt/intrincs/ilockadd.c
@@ -4,6 +4,7 @@ __LONG32 _InterlockedAdd(__LONG32 volatile *, __LONG32); /* not in intrin.h */
__LONG32 _InterlockedAdd(__LONG32 volatile *Addend, __LONG32 Value)
{
/* return InterlockedExchangeAdd(Addend,Value) + Value; */
+#if defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_)
__LONG32 ret;
__asm__ __volatile__ ("lock\n\t"
"xaddl %0,(%1)"
@@ -11,6 +12,9 @@ __LONG32 _InterlockedAdd(__LONG32 volatile *Addend, __LONG32 Value)
: "r" (Addend), "0" (Value)
: "memory");
return ret + Value;
+#else
+ return __sync_fetch_and_add(Addend, Value) + Value;
+#endif
}
#ifdef _WIN64
tmp.diff.sig
Description: PGP signature
------------------------------------------------------------------------------ Time is money. Stop wasting it! Get your web API in 5 minutes. www.restlet.com/download http://p.sf.net/sfu/restlet
_______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
