diff mbox

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

Message ID CAMe9rOp4+H7mc+it-ppjGqx3qP6GZOMrfGGyR4cisbrQTAtReA@mail.gmail.com
State New
Headers show

Commit Message

H.J. Lu April 17, 2015, 9:38 p.m. UTC
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?

Comments

Jakub Jelinek April 17, 2015, 9:44 p.m. UTC | #1
On Fri, Apr 17, 2015 at 02:38:01PM -0700, H.J. Lu wrote:

> 
Please add
	PR target/65780
line to the ChangeLog entry.  Ok for trunk and 5 branch with that change,
thanks.

> 	* 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


	Jakub
diff mbox

Patch


	* 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