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 --- bfd/peXXigen.c | 22 ++++++++++++++++++++++ gold/gold-threads.cc | 15 ++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -3617,6 +3617,28 @@ } #endif /* not Cygwin/Mingw */ +#if defined __APPLE__ && __DARWIN_C_LEVEL < 200809L +/* 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 (bool is_name, rsrc_entry * a, rsrc_entry * b) --- a/gold/gold-threads.cc +++ b/gold/gold-threads.cc @@ -284,9 +284,18 @@ 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*