Add default_binds_local_p_2 and use it for x86
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 27 Mar 2015 18:11:00 +0000 (18:11 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 27 Mar 2015 18:11:00 +0000 (11:11 -0700)
commita5eef8e9b024741b8d661c628643a9850616b813
tree6f1f7fb2c72bb99e77499fa0b962b812dcc32188
parentf21a589997d17031e4d5169e7ef24f10d59c9530
Add default_binds_local_p_2 and use it for x86

Protected data symbol means that it can't be pre-emptied.  It doesn't mean
its address won't be external.  This is true for pointer to protected
function.  With copy relocation, address of protected data defined in the
shared library may also be external.  We only know that for sure at
run-time.  TARGET_BINDS_LOCAL_P should return false on protected data
symbol.

gcc/

PR target/65248
* output.h (default_binds_local_p_2): New.
* varasm.c (default_binds_local_p_2): Renamed to ...
(default_binds_local_p_3): This.  Don't return true on protected
data symbol if protected data may be external.
(default_binds_local_p): Use default_binds_local_p_3.
(default_binds_local_p_1): Likewise.
(default_binds_local_p_2): New.
* config/i386/i386.c (TARGET_BINDS_LOCAL_P): Set to
default_binds_local_p_2 if TARGET_MACHO is undefined.

gcc/testsuite/

PR target/65248
* gcc.target/i386/pr65248-1.c: New file.
* gcc.target/i386/pr65248-2.c: Likewise.
* gcc.target/i386/pr65248-3.c: Likewise.
* gcc.target/i386/pr65248-4.c: Likewise.

From-SVN: r221742
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/output.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr65248-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr65248-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr65248-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr65248-4.c [new file with mode: 0644]
gcc/varasm.c