/usr/src/gcc-4.7/debian/patches/hurd-pthread.diff is in gcc-4.7-source 4.7.3-12ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | # Fix pthread support in a/src/boehm-gc
Index: b/src/boehm-gc/dyn_load.c
===================================================================
--- a/src/boehm-gc/dyn_load.c
+++ b/src/boehm-gc/dyn_load.c
@@ -26,7 +26,7 @@
* None of this is safe with dlclose and incremental collection.
* But then not much of anything is safe in the presence of dlclose.
*/
-#if (defined(__linux__) || defined(__GLIBC__)) && !defined(_GNU_SOURCE)
+#if (defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)) && !defined(_GNU_SOURCE)
/* Can't test LINUX, since this must be define before other includes */
# define _GNU_SOURCE
#endif
Index: b/src/boehm-gc/pthread_support.c
===================================================================
--- a/src/boehm-gc/pthread_support.c
+++ b/src/boehm-gc/pthread_support.c
@@ -885,7 +885,7 @@
GC_nprocs = pthread_num_processors_np();
# endif
# if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS) \
- || defined(GC_SOLARIS_PTHREADS)
+ || defined(GC_SOLARIS_PTHREADS) || defined(GC_GNU_THREADS)
GC_nprocs = sysconf(_SC_NPROCESSORS_ONLN);
if (GC_nprocs <= 0) GC_nprocs = 1;
# endif
Index: b/src/boehm-gc/include/gc_config_macros.h
===================================================================
--- a/src/boehm-gc/include/gc_config_macros.h
+++ b/src/boehm-gc/include/gc_config_macros.h
@@ -6,7 +6,8 @@
|| defined(GC_SOLARIS_PTHREADS) \
|| defined(GC_HPUX_THREADS) \
|| defined(GC_AIX_THREADS) \
- || defined(GC_LINUX_THREADS))
+ || defined(GC_LINUX_THREADS) \
+ || defined(GC_GNU_THREADS))
# define _REENTRANT
/* Better late than never. This fails if system headers that */
/* depend on this were previously included. */
@@ -21,7 +22,8 @@
defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
defined(GC_AIX_THREADS) || \
- (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__))
+ (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) || \
+ defined(GC_GNU_THREADS)
# define GC_PTHREADS
# endif
Index: b/src/boehm-gc/threadlibs.c
===================================================================
--- a/src/boehm-gc/threadlibs.c
+++ b/src/boehm-gc/threadlibs.c
@@ -12,7 +12,8 @@
# endif
# if defined(GC_LINUX_THREADS) || defined(GC_IRIX_THREADS) \
|| defined(GC_SOLARIS_PTHREADS) \
- || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS)
+ || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) \
+ || defined(GC_GNU_THREADS)
printf("-lpthread\n");
# endif
# if defined(GC_FREEBSD_THREADS)
Index: b/src/boehm-gc/configure.ac
===================================================================
--- a/src/boehm-gc/configure.ac
+++ b/src/boehm-gc/configure.ac
@@ -181,6 +181,11 @@
THREADCFLAGS=-pthread
THREADLIBS=-pthread
;;
+ *-*-gnu*)
+ AC_DEFINE(GC_GNU_THREADS,1,[support GNU threads])
+ AC_DEFINE(_REENTRANT)
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ ;;
*-*-solaris2.8*)
AC_DEFINE(GC_SOLARIS_PTHREADS,1,[support for Solaris pthreads])
# Need to use alternate thread library, otherwise gctest hangs
Index: b/src/boehm-gc/os_dep.c
===================================================================
--- a/src/boehm-gc/os_dep.c
+++ b/src/boehm-gc/os_dep.c
@@ -312,7 +312,7 @@
/* for recent Linux versions. This seems to be the easiest way to */
/* cover all versions. */
-# ifdef LINUX
+# if defined(LINUX) || defined(HURD)
/* Some Linux distributions arrange to define __data_start. Some */
/* define data_start as a weak symbol. The latter is technically */
/* broken, since the user program may define data_start, in which */
@@ -331,7 +331,7 @@
{
extern ptr_t GC_find_limit();
-# ifdef LINUX
+# if defined(LINUX) || defined(HURD)
/* Try the easy approaches first: */
if ((ptr_t)__data_start != 0) {
GC_data_start = (ptr_t)(__data_start);
Index: b/src/boehm-gc/include/private/gcconfig.h
===================================================================
--- a/src/boehm-gc/include/private/gcconfig.h
+++ b/src/boehm-gc/include/private/gcconfig.h
@@ -1316,8 +1316,9 @@
# define OS_TYPE "HURD"
# define STACK_GROWS_DOWN
# define HEURISTIC2
- extern int __data_start[];
-# define DATASTART ( (ptr_t) (__data_start))
+# define SIG_SUSPEND SIGUSR1
+# define SIG_THR_RESTART SIGUSR2
+# define SEARCH_FOR_DATA_START
extern int _end[];
# define DATAEND ( (ptr_t) (_end))
/* # define MPROTECT_VDB Not quite working yet? */
@@ -2169,7 +2170,8 @@
# if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \
|| defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
|| defined(DGUX) || defined(BSD) || defined(SUNOS4) \
- || defined(_AIX) || defined(DARWIN) || defined(OSF1)
+ || defined(_AIX) || defined(DARWIN) || defined(OSF1) \
+ || defined(HURD)
# define UNIX_LIKE /* Basic Unix-like system calls work. */
# endif
@@ -2225,7 +2227,7 @@
# define CACHE_LINE_SIZE 32 /* Wild guess */
# endif
-# if defined(LINUX) || defined(__GLIBC__)
+# if defined(LINUX) || defined(HURD) || defined(__GLIBC__)
# define REGISTER_LIBRARIES_EARLY
/* We sometimes use dl_iterate_phdr, which may acquire an internal */
/* lock. This isn't safe after the world has stopped. So we must */
@@ -2260,6 +2262,9 @@
# if defined(GC_AIX_THREADS) && !defined(_AIX)
--> inconsistent configuration
# endif
+# if defined(GC_GNU_THREADS) && !defined(HURD)
+ --> inconsistent configuration
+# endif
# if defined(GC_WIN32_THREADS) && !defined(MSWIN32) && !defined(CYGWIN32)
--> inconsistent configuration
# endif
Index: b/src/boehm-gc/include/gc_config.h.in
===================================================================
--- a/src/boehm-gc/include/gc_config.h.in
+++ b/src/boehm-gc/include/gc_config.h.in
@@ -33,6 +33,9 @@
/* include support for gcj */
#undef GC_GCJ_SUPPORT
+/* support GNU/Hurd threads */
+#undef GC_GNU_THREADS
+
/* enables support for HP/UX 11 pthreads */
#undef GC_HPUX_THREADS
Index: b/src/boehm-gc/specific.c
===================================================================
--- a/src/boehm-gc/specific.c
+++ b/src/boehm-gc/specific.c
@@ -13,7 +13,7 @@
#include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
-#if defined(GC_LINUX_THREADS)
+#if defined(GC_LINUX_THREADS) || defined(GC_GNU_THREADS)
#include "private/specific.h"
|