mxe/src/pthreads-1-autostatic.patch

151 lines
5.5 KiB
Diff

This file is part of mingw-cross-env.
See doc/index.html for further information.
This patch has been taken from:
http://sourceware.org/ml/pthreads-win32/2010/msg00006.html
diff -ur pthreads-win32-20091019.orig/GNUmakefile pthreads-win32-20091019/GNUmakefile
--- pthreads-win32-20091019.orig/GNUmakefile 2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/GNUmakefile 2010-02-01 14:45:28.471432337 -0200
@@ -63,7 +63,6 @@
XOPT =
RCFLAGS = --include-dir=.
-LFLAGS = -lwsock32
# ----------------------------------------------------------------------
# The library can be built with some alternative behaviour to
diff -ur pthreads-win32-20091019.orig/pthread.c pthreads-win32-20091019/pthread.c
--- pthreads-win32-20091019.orig/pthread.c 2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/pthread.c 2010-02-01 14:26:48.601487556 -0200
@@ -49,6 +49,7 @@
#include "condvar.c"
#include "create.c"
#include "dll.c"
+#include "autostatic.c"
#include "errno.c"
#include "exit.c"
#include "fork.c"
diff -ur pthreads-win32-20091019.orig/pthread_getspecific.c pthreads-win32-20091019/pthread_getspecific.c
--- pthreads-win32-20091019.orig/pthread_getspecific.c 2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/pthread_getspecific.c 2010-02-01 14:28:36.603981857 -0200
@@ -72,12 +72,10 @@
else
{
int lasterror = GetLastError ();
- int lastWSAerror = WSAGetLastError ();
ptr = TlsGetValue (key->key);
SetLastError (lasterror);
- WSASetLastError (lastWSAerror);
}
return ptr;
diff -ur pthreads-win32-20091019.orig/pthread.h pthreads-win32-20091019/pthread.h
--- pthreads-win32-20091019.orig/pthread.h 2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/pthread.h 2010-02-02 16:51:05.047931915 -0200
@@ -533,7 +533,7 @@
* do NOT define PTW32_BUILD, and then the variables/functions will
* be imported correctly.
*/
-#ifndef PTW32_STATIC_LIB
+#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__)
# ifdef PTW32_BUILD
# define PTW32_DLLPORT __declspec (dllexport)
# else
diff -ur pthreads-win32-20091019.orig/sched.h pthreads-win32-20091019/sched.h
--- pthreads-win32-20091019.orig/sched.h 2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/sched.h 2010-02-02 16:51:00.665887720 -0200
@@ -76,7 +76,7 @@
* do NOT define PTW32_BUILD, and then the variables/functions will
* be imported correctly.
*/
-#ifndef PTW32_STATIC_LIB
+#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__)
# ifdef PTW32_BUILD
# define PTW32_DLLPORT __declspec (dllexport)
# else
diff -ur pthreads-win32-20091019.orig/semaphore.h pthreads-win32-20091019/semaphore.h
--- pthreads-win32-20091019.orig/semaphore.h 2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/semaphore.h 2010-02-02 16:50:45.916576916 -0200
@@ -75,7 +75,7 @@
* do NOT define PTW32_BUILD, and then the variables/functions will
* be imported correctly.
*/
-#ifndef PTW32_STATIC_LIB
+#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__)
# ifdef PTW32_BUILD
# define PTW32_DLLPORT __declspec (dllexport)
# else
--- /dev/null 2010-01-29 12:57:37.677072272 -0200
+++ pthreads-win32-20091019/autostatic.c 2010-02-01 14:26:48.601487556 -0200
@@ -0,0 +1,67 @@
+/*
+ * autostatic.c
+ *
+ * Description:
+ * This translation unit implements static library initialisation.
+ *
+ * --------------------------------------------------------------------------
+ *
+ * Pthreads-win32 - POSIX Threads Library for Win32
+ * Copyright(C) 1998 John E. Bossom
+ * Copyright(C) 1999,2005 Pthreads-win32 contributors
+ *
+ * Contact Email: rpj@callisto.canberra.edu.au
+ *
+ * The current list of contributors is contained
+ * in the file CONTRIBUTORS included with the source
+ * code distribution. The list can also be seen at the
+ * following World Wide Web location:
+ * http://sources.redhat.com/pthreads-win32/contributors.html
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library in the file COPYING.LIB;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifdef PTW32_STATIC_LIB
+
+#include "pthread.h"
+#include "implement.h"
+
+static void on_process_init(void)
+{
+ pthread_win32_process_attach_np ();
+}
+
+static void on_process_exit(void)
+{
+ pthread_win32_thread_detach_np ();
+ pthread_win32_process_detach_np ();
+}
+
+#ifdef __MINGW32__
+# define attribute_section(a) __attribute__((section(a)))
+#elif defined(_MSC_VER)
+# define attribute_section(a) __pragma(section(a,long,read)); __declspec(allocate(a))
+#else
+#error compiler not supported!
+#endif
+
+attribute_section(".CRT$XCU") void *msc_ctor = on_process_init;
+attribute_section(".CRT$XPU") void *msc_dtor = on_process_exit;
+
+attribute_section(".ctors" ) void *gcc_ctor = on_process_init;
+attribute_section(".dtors" ) void *gcc_dtor = on_process_exit;
+
+#endif /* PTW32_STATIC_LIB */