commit 8e6185a88e998118aa5b5bdebb4f45b241ddf1d1
Author: Dimitry Andric <dimitry@andric.com>
Date:   Sat Feb 14 18:14:58 2015 +0100

    Work around http://llvm.org/PR19778, which can cause either assertions
    or fatal backend errors in clang, by defining several TLS related
    symbols as extern, with hidden visibility.

diff --git a/src/mapi/entry_x86-64_tls.h b/src/mapi/entry_x86-64_tls.h
index 71e9d60..41e16f0 100644
--- a/src/mapi/entry_x86-64_tls.h
+++ b/src/mapi/entry_x86-64_tls.h
@@ -62,8 +62,13 @@ entry_patch_public(void)
 {
 }
 
+#ifndef __clang__
 static char
 x86_64_entry_start[];
+#else
+extern char
+x86_64_entry_start[] __attribute__((visibility("hidden")));
+#endif
 
 mapi_func
 entry_get_public(int slot)
diff --git a/src/mapi/entry_x86_tls.h b/src/mapi/entry_x86_tls.h
index fa7bc15..0e20da3 100644
--- a/src/mapi/entry_x86_tls.h
+++ b/src/mapi/entry_x86_tls.h
@@ -72,8 +72,13 @@ __asm__(".text");
 extern unsigned long
 x86_current_tls();
 
+#ifndef __clang__
 static char x86_entry_start[];
 static char x86_entry_end[];
+#else
+extern char x86_entry_start[] __attribute__((visibility("hidden")));
+extern char x86_entry_end[] __attribute__((visibility("hidden")));
+#endif
 
 void
 entry_patch_public(void)
diff --git a/src/mapi/entry_x86_tsd.h b/src/mapi/entry_x86_tsd.h
index ece00fa..9610da8 100644
--- a/src/mapi/entry_x86_tsd.h
+++ b/src/mapi/entry_x86_tsd.h
@@ -59,8 +59,13 @@ __asm__(".balign 32\n"
 #include <string.h>
 #include "u_execmem.h"
 
+#ifndef __clang__
 static const char x86_entry_start[];
 static const char x86_entry_end[];
+#else
+extern const char x86_entry_start[] __attribute__((visibility("hidden")));
+extern const char x86_entry_end[] __attribute__((visibility("hidden")));
+#endif
 
 void
 entry_patch_public(void)
