Replace __attribute__((visibility("protected")))
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 6 Mar 2015 12:55:56 +0000 (04:55 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 7 Mar 2015 01:05:42 +0000 (17:05 -0800)
With copy relocation, address of protected data defined in the shared
library may be external.  Compiler shouldn't asssume protected data will
be local.  But due to

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248

__attribute__((visibility("protected"))) doesn't work correctly, we need
to use asm (".protected xxx") instead.

* elf/ifuncdep2.c (global): Replace
__attribute__((visibility("protected"))) with
asm (".protected global").
* elf/ifuncmod1.c (global): Likewise.
* elf/ifuncmod5.c (global): Likewise.

ChangeLog
elf/ifuncdep2.c
elf/ifuncmod1.c
elf/ifuncmod5.c

index eaccb2c..7f2e14b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-03-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf/ifuncdep2.c (global): Replace
+       __attribute__((visibility("protected"))) with
+       asm (".protected global").
+       * elf/ifuncmod1.c (global): Likewise.
+       * elf/ifuncmod5.c (global): Likewise.
+
 2015-03-06  Joseph Myers  <joseph@codesourcery.com>
 
        * soft-fp/soft-fp.h [!_LIBC && __KERNEL__]: Include
index 99d1926..6e66d31 100644 (file)
@@ -2,7 +2,13 @@
 
 #include "ifunc-sel.h"
 
-int global __attribute__ ((visibility ("protected"))) = -1;
+int global = -1;
+/* Can't use __attribute__((visibility("protected"))) until the GCC bug:
+
+   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248
+
+   is fixed.  */
+asm (".protected global");
 
 static int
 one (void)
index 2b8195c..0b61380 100644 (file)
@@ -6,7 +6,13 @@
  */
 #include "ifunc-sel.h"
 
-int global __attribute__ ((visibility ("protected"))) = -1;
+int global = -1;
+/* Can't use __attribute__((visibility("protected"))) until the GCC bug:
+
+   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248
+
+   is fixed.  */
+asm (".protected global");
 
 static int
 one (void)
index 9a08e8c..0e65a63 100644 (file)
@@ -1,7 +1,13 @@
 /* Test STT_GNU_IFUNC symbols without direct function call.  */
 #include "ifunc-sel.h"
 
-int global __attribute__ ((visibility ("protected"))) = -1;
+int global = -1;
+/* Can't use __attribute__((visibility("protected"))) until the GCC bug:
+
+   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248
+
+   is fixed.  */
+asm (".protected global");
 
 static int
 one (void)