This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PR target/65780: [5/6 Regression] Uninitialized common handling in executables


On Fri, Apr 17, 2015 at 9:12 AM, Jeff Law <law@redhat.com> wrote:
> On 04/16/2015 12:57 PM, H.J. Lu wrote:
>>
>> Uninitialized common symbol behavior in executables is target and linker
>> dependent.  default_binds_local_p_3 is made public and updated to take an
>> argument to indicate if common symbol may be local.  If common symbol
>> may be local, default_binds_local_p_3 will treat non-external variable
>> as defined locally.  default_binds_local_p_2 is changed to treat common
>> symbol as local for non-PIE binaries.
>>
>> 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.  If a target treats common symbol as local only
>> for non-PIE binaries, it can define TARGET_BINDS_LOCAL_P as
>> default_binds_local_p_2.
>>
>> Tested on Linux/x86-64 using -m32 with binutils master and 2.24.  OK for
>> trunk and 5 branch?
>>
>>
>> H.J.
>> ---
>> gcc/
>>
>>         PR target/65780
>>         * output.h (default_binds_local_p_3): New.
>>         * varasm.c (default_binds_local_p_3): Make it public.  Take an
>>         argument to indicate if common symbol may be local.  If common
>>         symbol may be local, treat non-external variable as defined
>>         locally.
>>         (default_binds_local_p_2): Pass !flag_pic to
>> default_binds_local_p_3.
>>         (default_binds_local_p_1): Pass false to default_binds_local_p_3.
>>         * config/i386/i386.c (ix86_binds_local_p): New.
>>         (TARGET_BINDS_LOCAL_P): Replace default_binds_local_p_2 with
>>         ix86_binds_local_p.
>>
>> gcc/testsuite/
>>
>>         PR target/65780
>>         * gcc.dg/pr65780-1.c: New test.
>>         * gcc.dg/pr65780-2.c: Likewise.
>>         * gcc.target/i386/pr32219-9.c: Likewise.
>>         * gcc.target/i386/pr32219-1.c (xxx): Make it initialized common
>>         symbol.
>>         * gcc.target/i386/pr64317.c (c): Initialize.
>
> I approved the slightly different version of this attached to pr 65780,
> c#35.
>

This patch is needed for MacOS and Windows.  OK for trunk
and 5 branch?

-- 
H.J.
	* config/i386/i386.c (ix86_binds_local_p): Define only if
	TARGET_MACHO and TARGET_DLLIMPORT_DECL_ATTRIBUTES are false.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index da69186..d870ab8 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -51737,6 +51737,7 @@ ix86_initialize_bounds (tree var, tree lb, tree ub, tree *stmts)
   return 2;
 }
 
+#if !TARGET_MACHO && !TARGET_DLLIMPORT_DECL_ATTRIBUTES
 /* 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.   */
@@ -51749,6 +51750,7 @@ ix86_binds_local_p (const_tree exp)
 				   || (TARGET_64BIT
 				       && HAVE_LD_PIE_COPYRELOC != 0)));
 }
+#endif
 
 /* Initialize the GCC target structure.  */
 #undef TARGET_RETURN_IN_MEMORY

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]