diff options
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r-- | gcc/config/i386/i386.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1f20ff394c8..72e6bc27f62 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -51793,6 +51793,19 @@ ix86_initialize_bounds (tree var, tree lb, tree ub, tree *stmts) return 2; } +/* For i386, common symbol is local only for non-PIE binaries. For + x86-64, common symbol is local only for non-PIE binaries or linker + supports copy reloc in PIE binaries. */ + +static bool +ix86_binds_local_p (const_tree exp) +{ + return default_binds_local_p_3 (exp, flag_shlib != 0, true, true, + (!flag_pic + || (TARGET_64BIT + && HAVE_LD_PIE_COPYRELOC != 0))); +} + /* Initialize the GCC target structure. */ #undef TARGET_RETURN_IN_MEMORY #define TARGET_RETURN_IN_MEMORY ix86_return_in_memory @@ -51927,7 +51940,7 @@ ix86_initialize_bounds (tree var, tree lb, tree ub, tree *stmts) #define TARGET_BINDS_LOCAL_P darwin_binds_local_p #else #undef TARGET_BINDS_LOCAL_P -#define TARGET_BINDS_LOCAL_P default_binds_local_p_2 +#define TARGET_BINDS_LOCAL_P ix86_binds_local_p #endif #if TARGET_DLLIMPORT_DECL_ATTRIBUTES #undef TARGET_BINDS_LOCAL_P |