summaryrefslogtreecommitdiffstats
path: root/0024-libitm-weak-symbols.patch
blob: 87f58f304a60f68b9786bd6a22089d8fc2a1ca91 (plain)
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
--- a/libitm/Makefile.am	2016-02-01 23:54:24.805099900 -0600
+++ b/libitm/Makefile.am	2016-02-02 00:06:11.466834500 -0600
@@ -53,7 +53,6 @@
 # Force link with C, not C++.  For now, while we're using C++ we don't
 # want or need libstdc++.
 libitm_la_DEPENDENCIES = $(libitm_version_dep)
-libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
 libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
 
 libitm_la_SOURCES = \
--- a/libitm/Makefile.in	2016-02-01 23:54:24.813600900 -0600
+++ b/libitm/Makefile.in	2016-02-02 00:07:01.109638300 -0600
@@ -328,7 +328,6 @@
 # Force link with C, not C++.  For now, while we're using C++ we don't
 # want or need libstdc++.
 libitm_la_DEPENDENCIES = $(libitm_version_dep)
-libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
 libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
 libitm_la_SOURCES = aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc \
 	barrier.cc beginend.cc clone.cc eh_cpp.cc local.cc query.cc \
@@ -446,7 +445,7 @@
 	  rm -f "$${dir}/so_locations"; \
 	done
 libitm.la: $(libitm_la_OBJECTS) $(libitm_la_DEPENDENCIES) 
-	$(libitm_la_LINK) -rpath $(toolexeclibdir) $(libitm_la_OBJECTS) $(libitm_la_LIBADD) $(LIBS)
+	$(CXXLINK) $(libitm_la_LDFLAGS) -rpath $(toolexeclibdir) $(libitm_la_OBJECTS) $(libitm_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
--- a/libitm/alloc_cpp.cc	2015-01-05 06:33:28.000000000 -0600
+++ b/libitm/alloc_cpp.cc	2016-02-01 23:52:40.097803700 -0600
@@ -46,21 +46,27 @@
 /* Everything from libstdc++ is weak, to avoid requiring that library
    to be linked into plain C applications using libitm.so.  */
 
+#if defined(__CYGWIN__) && defined(PIC)
+#define WEAK
+#else
+#define WEAK  __attribute__((weak))
+#endif
+
 extern "C" {
 
-extern void *_ZnwX (size_t) __attribute__((weak));
-extern void _ZdlPv (void *) __attribute__((weak));
-extern void *_ZnaX (size_t) __attribute__((weak));
-extern void _ZdaPv (void *) __attribute__((weak));
+extern void *_ZnwX (size_t) WEAK;
+extern void _ZdlPv (void *) WEAK;
+extern void *_ZnaX (size_t) WEAK;
+extern void _ZdaPv (void *) WEAK;
 
 typedef const struct nothrow_t { } *c_nothrow_p;
 
-extern void *_ZnwXRKSt9nothrow_t (size_t, c_nothrow_p) __attribute__((weak));
-extern void _ZdlPvRKSt9nothrow_t (void *, c_nothrow_p) __attribute__((weak));
-extern void *_ZnaXRKSt9nothrow_t (size_t, c_nothrow_p) __attribute__((weak));
-extern void _ZdaPvRKSt9nothrow_t (void *, c_nothrow_p) __attribute__((weak));
+extern void *_ZnwXRKSt9nothrow_t (size_t, c_nothrow_p) WEAK;
+extern void _ZdlPvRKSt9nothrow_t (void *, c_nothrow_p) WEAK;
+extern void *_ZnaXRKSt9nothrow_t (size_t, c_nothrow_p) WEAK;
+extern void _ZdaPvRKSt9nothrow_t (void *, c_nothrow_p) WEAK;
 
-#if !defined (HAVE_ELF_STYLE_WEAKREF) 
+#if !defined (HAVE_ELF_STYLE_WEAKREF) && !defined(PIC)
 void *_ZnwX (size_t) { return NULL; }
 void _ZdlPv (void *) { return; }
 void *_ZnaX (size_t) { return NULL; }
--- a/libitm/beginend.cc	2015-01-05 06:33:28.000000000 -0600
+++ b/libitm/beginend.cc	2016-02-01 23:52:40.106804900 -0600
@@ -25,6 +25,24 @@
 #include "libitm_i.h"
 #include <pthread.h>
 
+#if defined(__CYGWIN__) && defined(PIC)
+#define WEAK
+#else
+#define WEAK  __attribute__((weak))
+#endif
+
+/* Everything from libgcc_s is weak, to avoid requiring that library
+   to be linked into plain C applications using libitm.so.  */
+
+extern "C" {
+
+extern void _Unwind_DeleteException (_Unwind_Exception*) WEAK;
+
+#if !defined (HAVE_ELF_STYLE_WEAKREF) && !defined(PIC)
+void _Unwind_DeleteException (_Unwind_Exception *) { return; }
+#endif /* HAVE_ELF_STYLE_WEAKREF */
+
+}
 
 using namespace GTM;
 
--- a/libitm/configure.tgt	2016-02-01 22:05:27.064912300 -0600
+++ b/libitm/configure.tgt	2016-02-01 22:10:06.233362200 -0600
@@ -141,7 +141,7 @@
   *-*-gnu* | *-*-k*bsd*-gnu \
   | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* \
   | *-*-solaris2* | *-*-sysv4* | *-*-hpux11* \
-  | *-*-darwin* | *-*-aix* | *-*-dragonfly*)
+  | *-*-darwin* | *-*-aix* | *-*-dragonfly* | *-*-cygwin*)
 	# POSIX system.  The OS is supported.
 	;;
 
--- a/libitm/eh_cpp.cc	2015-01-05 06:33:28.000000000 -0600
+++ b/libitm/eh_cpp.cc	2016-02-01 23:52:40.110305300 -0600
@@ -29,7 +29,11 @@
 /* Everything from libstdc++ is weak, to avoid requiring that library
    to be linked into plain C applications using libitm.so.  */
 
+#if defined(__CYGWIN__) && defined(PIC)
+#define WEAK
+#else
 #define WEAK  __attribute__((weak))
+#endif
 
 extern "C" {
 
@@ -39,13 +43,12 @@
 extern void __cxa_end_catch (void) WEAK;
 extern void __cxa_tm_cleanup (void *, void *, unsigned int) WEAK;
 
-#if !defined (HAVE_ELF_STYLE_WEAKREF) 
+#if !defined (HAVE_ELF_STYLE_WEAKREF) && !defined(PIC)
 void *__cxa_allocate_exception (size_t) { return NULL; }
 void __cxa_throw (void *, void *, void *) { return; }
 void *__cxa_begin_catch (void *) { return NULL; }
 void __cxa_end_catch (void) { return; }
 void __cxa_tm_cleanup (void *, void *, unsigned int) { return; }
-void _Unwind_DeleteException (_Unwind_Exception *) { return; }
 #endif /* HAVE_ELF_STYLE_WEAKREF */
 
 }
--- a/libitm/libitm_i.h	2016-02-01 23:31:51.815292000 -0600
+++ b/libitm/libitm_i.h	2016-02-01 23:52:40.115305900 -0600
@@ -38,11 +38,6 @@
 #include <unwind.h>
 #include "local_type_traits"
 #include "local_atomic"
-
-/* Don't require libgcc_s.so for exceptions.  */
-extern void _Unwind_DeleteException (_Unwind_Exception*) __attribute__((weak));
-
-
 #include "common.h"
 
 namespace GTM HIDDEN {
--- a/libitm/method-serial.cc	2015-01-05 06:33:28.000000000 -0600
+++ b/libitm/method-serial.cc	2016-02-01 23:52:40.120306600 -0600
@@ -24,12 +24,14 @@
 
 #include "libitm_i.h"
 
+#if 0 // !defined(__CYGWIN__) || !defined(PIC)
 // Avoid a dependency on libstdc++ for the pure virtuals in abi_dispatch.
 extern "C" void HIDDEN
 __cxa_pure_virtual ()
 {
   abort ();
 }
+#endif
 
 using namespace GTM;