From f001b0605ec78096c78793aafca6d58fa74d47ab Mon Sep 17 00:00:00 2001 From: Ray Donnelly Date: Sun, 22 Nov 2015 14:38:18 +0000 Subject: [PATCH] darwin-host: Three build fixes for binutils 2.25{,.1} 1. Need to include not in gold's binary.cc 2. wcsncasecmp isn't always defined in Mac SDK 3. PTHREAD_ONCE_INIT is {0x30B1BCBA, {0}}, so can't be trivially assigned in an intializer list. Signed-off-by: Ray Donnelly --- ...binary-cc-include-string-not-cstring.patch | 11 +++ ...id-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch | 77 +++++++++++++++++++ ...binary-cc-include-string-not-cstring.patch | 11 +++ ...id-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch | 77 +++++++++++++++++++ 4 files changed, 176 insertions(+) create mode 100644 patches/binutils/2.25.1/340-Darwin-gold-binary-cc-include-string-not-cstring.patch create mode 100644 patches/binutils/2.25.1/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch create mode 100644 patches/binutils/2.25/340-Darwin-gold-binary-cc-include-string-not-cstring.patch create mode 100644 patches/binutils/2.25/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch diff --git a/patches/binutils/2.25.1/340-Darwin-gold-binary-cc-include-string-not-cstring.patch b/patches/binutils/2.25.1/340-Darwin-gold-binary-cc-include-string-not-cstring.patch new file mode 100644 index 00000000..33441cc6 --- /dev/null +++ b/patches/binutils/2.25.1/340-Darwin-gold-binary-cc-include-string-not-cstring.patch @@ -0,0 +1,11 @@ +--- binutils-2.25.orig/gold/binary.cc 2015-06-09 10:48:32.000000000 +0100 ++++ binutils-2.25/gold/binary.cc 2015-06-09 10:49:23.000000000 +0100 +@@ -23,7 +23,7 @@ + #include "gold.h" + + #include +-#include ++#include + #include "safe-ctype.h" + + #include "elfcpp.h" diff --git a/patches/binutils/2.25.1/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch b/patches/binutils/2.25.1/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch new file mode 100644 index 00000000..871d239b --- /dev/null +++ b/patches/binutils/2.25.1/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch @@ -0,0 +1,77 @@ +From c39479f4ab4d372b518957871e1f205a03e7c3d6 Mon Sep 17 00:00:00 2001 +From: Andrew Hsieh +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 + diff --git a/patches/binutils/2.25/340-Darwin-gold-binary-cc-include-string-not-cstring.patch b/patches/binutils/2.25/340-Darwin-gold-binary-cc-include-string-not-cstring.patch new file mode 100644 index 00000000..33441cc6 --- /dev/null +++ b/patches/binutils/2.25/340-Darwin-gold-binary-cc-include-string-not-cstring.patch @@ -0,0 +1,11 @@ +--- binutils-2.25.orig/gold/binary.cc 2015-06-09 10:48:32.000000000 +0100 ++++ binutils-2.25/gold/binary.cc 2015-06-09 10:49:23.000000000 +0100 +@@ -23,7 +23,7 @@ + #include "gold.h" + + #include +-#include ++#include + #include "safe-ctype.h" + + #include "elfcpp.h" diff --git a/patches/binutils/2.25/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch b/patches/binutils/2.25/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch new file mode 100644 index 00000000..871d239b --- /dev/null +++ b/patches/binutils/2.25/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch @@ -0,0 +1,77 @@ +From c39479f4ab4d372b518957871e1f205a03e7c3d6 Mon Sep 17 00:00:00 2001 +From: Andrew Hsieh +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 +