Upstream merge.
diff --git a/Misc/NEWS b/Misc/NEWS
index 9e63beb..91f3883 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -16,8 +16,8 @@
 
 - Issue #10271: Allow warnings.showwarning() be any callable.
 
-- Issue #11627: Fix segfault when __new__ on a exception returns a non-exception
-  class.
+- Issue #11627: Fix segfault when __new__ on a exception returns a
+  non-exception class.
 
 - Issue #12149: Update the method cache after a type's dictionnary gets
   cleared by the garbage collector.  This fixes a segfault when an instance
@@ -1044,6 +1044,10 @@
 Extension Modules
 -----------------
 
+- Issue #10309: Define _GNU_SOURCE so that mremap() gets the proper
+  signature.  Without this, architectures where sizeof void* != sizeof int are
+  broken.  Patch given by Hallvard B Furuseth.
+
 - Issue #12221: Replace pyexpat.__version__ with the Python version.
 
 - Issue #12051: Fix segfault in json.dumps() while encoding highly-nested
diff --git a/Modules/_ctypes/libffi/src/dlmalloc.c b/Modules/_ctypes/libffi/src/dlmalloc.c
index 783c5c2..582ddc3 100644
--- a/Modules/_ctypes/libffi/src/dlmalloc.c
+++ b/Modules/_ctypes/libffi/src/dlmalloc.c
@@ -457,6 +457,11 @@
 #define LACKS_ERRNO_H
 #define MALLOC_FAILURE_ACTION
 #define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */
+#elif !defined _GNU_SOURCE
+/* mremap() on Linux requires this via sys/mman.h
+ * See roundup issue 10309
+ */
+#define _GNU_SOURCE 1
 #endif  /* WIN32 */
 
 #if defined(DARWIN) || defined(_DARWIN)