summaryrefslogtreecommitdiff
path: root/patches/binutils/2.25/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch
blob: 871d239b40e4bb0c66718337486669062777ea33 (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
From c39479f4ab4d372b518957871e1f205a03e7c3d6 Mon Sep 17 00:00:00 2001
From: Andrew Hsieh <andrewhsieh@google.com>
Date: Wed, 18 Mar 2015 10:57:24 +0800
Subject: [PATCH] Fix darwin build

1. In Drawin PTHREAD_ONCE_INIT is {0x30B1BCBA, {0}} and the GCC < 4.4
   doesn't support ended initializer list
2. wcsncasecmp doesn't exist in MacSDK10.6.x

Change-Id: I69204a72f853f5263dffedc448379d75ed4eca2e
---
 binutils-2.25/bfd/peXXigen.c       | 22 ++++++++++++++++++++++
 binutils-2.25/gold/gold-threads.cc | 15 ++++++++++++---
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git binutils-2.25.orig/bfd/peXXigen.c binutils-2.25/bfd/peXXigen.c
index 13e39e4..7a98306 100644
--- binutils-2.25.orig/bfd/peXXigen.c
+++ binutils-2.25/bfd/peXXigen.c
@@ -3522,6 +3522,28 @@ u16_mbtouc (wchar_t * puc, const unsigned short * s, unsigned int n)
 }
 #endif /* HAVE_WCHAR_H and not Cygwin/Mingw */
 
+#ifdef __APPLE__
+/* wcsncasecmp isn't always defined in Mac SDK */
+static int
+wcsncasecmp(const wchar_t *s1, const wchar_t *s2, size_t n)
+{
+  wchar_t c1, c2;
+
+  if (n == 0)
+    return (0);
+  for (; *s1; s1++, s2++)
+  {
+    c1 = towlower(*s1);
+    c2 = towlower(*s2);
+    if (c1 != c2)
+      return ((int)c1 - c2);
+    if (--n == 0)
+      return (0);
+  }
+  return (-*s2);
+}
+#endif
+
 /* Perform a comparison of two entries.  */
 static signed int
 rsrc_cmp (bfd_boolean is_name, rsrc_entry * a, rsrc_entry * b)
diff --git binutils-2.25.orig/gold/gold-threads.cc binutils-2.25/gold/gold-threads.cc
index ff5a8ac..45140e0 100644
--- binutils-2.25.orig/gold/gold-threads.cc
+++ binutils-2.25/gold/gold-threads.cc
@@ -284,9 +284,18 @@ Condvar::~Condvar()
 class Once_initialize
 {
  public:
-  Once_initialize()
-    : once_(PTHREAD_ONCE_INIT)
-  { }
+   Once_initialize()
+#if !defined(__APPLE__)
+     : once_(PTHREAD_ONCE_INIT)
+   { }
+#else
+// In Drawin PTHREAD_ONCE_INIT is {0x30B1BCBA, {0}} and the GCC < 4.4 doesn't support
+// extended initializer list as above */
+   {
+     pthread_once_t once_2 = PTHREAD_ONCE_INIT;
+     once_ = once_2; 
+   }
+#endif
 
   // Return a pointer to the pthread_once_t variable.
   pthread_once_t*
-- 
2.1.3