This doesn't seem to affect me using GCC 6.1 and gold <br><br><div class="gmail_quote"><div dir="ltr">On Thu, 2 Jun 2016, 6:42 p.m. Jan Ziak (⚛), <<a href="mailto:0xe2.0x9a.0x9b@gmail.com">0xe2.0x9a.0x9b@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">LTO compilation can sometimes fail with GCC 4.9 and GCC 5.3 because<br>
src/mapi uses unusual mixing of C code and assembly code. The issue<br>
may be present in case of GCC 6.1 as well.<br>
<br>
This is a Mesa bug rather than a compiler bug (although in an ideal<br>
world the compilation with -flto should fail if and only if normal<br>
compilation fails).<br>
<br>
The error message:<br>
<br>
entry_x86-64_tls.h:61: undefined reference to `x86_64_entry_start'<br>
<br>
Without the patch:<br>
- using "-flto -O2 -DDEBUG" fails with GCC 4.9 and 5.3<br>
- using "-flto -O3 -DDEBUG" succeeds with GCC 4.9 and 5.3<br>
- using "-flto -O2 -DNDEBUG" succeeds with GCC 4.9 and 5.3<br>
<br>
The patch assumes that the assembler understands ".hidden" directive.<br>
<br>
Signed-off-by: Jan Ziak (⚛) <<a href="mailto:0xe2.0x9a.0x9b@gmail.com" target="_blank">0xe2.0x9a.0x9b@gmail.com</a>><br>
---<br>
 src/mapi/entry_x86-64_tls.h |  5 +++--<br>
 src/mapi/entry_x86_tls.h    | 12 +++++++++---<br>
 2 files changed, 12 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/src/mapi/entry_x86-64_tls.h b/src/mapi/entry_x86-64_tls.h<br>
index 38faccc..acabecc 100644<br>
--- a/src/mapi/entry_x86-64_tls.h<br>
+++ b/src/mapi/entry_x86-64_tls.h<br>
@@ -28,6 +28,8 @@<br>
<br>
 __asm__(".text\n"<br>
         ".balign 32\n"<br>
+        ".globl x86_64_entry_start\n"<br>
+        ".hidden x86_64_entry_start\n"<br>
         "x86_64_entry_start:");<br>
<br>
 #define STUB_ASM_ENTRY(func)                             \<br>
@@ -54,8 +56,7 @@ entry_patch_public(void)<br>
 {<br>
 }<br>
<br>
-static char<br>
-x86_64_entry_start[];<br>
+extern char x86_64_entry_start[];<br>
<br>
 mapi_func<br>
 entry_get_public(int slot)<br>
diff --git a/src/mapi/entry_x86_tls.h b/src/mapi/entry_x86_tls.h<br>
index 46d2ece..6078b9a 100644<br>
--- a/src/mapi/entry_x86_tls.h<br>
+++ b/src/mapi/entry_x86_tls.h<br>
@@ -29,7 +29,9 @@<br>
<br>
 __asm__(".text");<br>
<br>
-__asm__("x86_current_tls:\n\t"<br>
+__asm__( ".globl x86_current_tls\n"<br>
+       ".hidden x86_current_tls\n"<br>
+       "x86_current_tls:\n\t"<br>
        "call 1f\n"<br>
         "1:\n\t"<br>
         "popl %eax\n\t"<br>
@@ -42,6 +44,8 @@ __asm__(".section wtext, \"awx\", @progbits");<br>
 #endif /* GLX_X86_READONLY_TEXT */<br>
<br>
 __asm__(".balign 16\n"<br>
+        ".globl x86_entry_start\n"<br>
+        ".hidden x86_entry_start\n"<br>
         "x86_entry_start:");<br>
<br>
 #define STUB_ASM_ENTRY(func)     \<br>
@@ -60,6 +64,8 @@ __asm__(".balign 16\n"<br>
<br>
 #ifndef GLX_X86_READONLY_TEXT<br>
 __asm__(".balign 16\n"<br>
+        ".globl x86_entry_end\n"<br>
+        ".hidden x86_entry_end\n"<br>
         "x86_entry_end:");<br>
 __asm__(".text");<br>
 #endif /* GLX_X86_READONLY_TEXT */<br>
@@ -71,8 +77,8 @@ __asm__(".text");<br>
 extern unsigned long<br>
 x86_current_tls();<br>
<br>
-static char x86_entry_start[];<br>
-static char x86_entry_end[];<br>
+extern char x86_entry_start[];<br>
+extern char x86_entry_end[];<br>
<br>
 void<br>
 entry_patch_public(void)<br>
--<br>
2.8.3<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div>