Patchwork section anchors and weak hidden symbols

login
register
mail settings
Submitter Nathan Sidwell
Date May 14, 2013, 6:11 a.m.
Message ID <5191D598.6080305@acm.org>
Download mbox | patch
Permalink /patch/243612/
State New
Headers show

Comments

Nathan Sidwell - May 14, 2013, 6:11 a.m.
On 05/13/13 14:09, Jan Hubicka wrote:
>> Index: varasm.c
>> ===================================================================

> I think DECL_COMDAT is not what you really want to return true for.  So perhaps
> you really want (TREE_PUBLIC (decl) && decl_binds_to_current_def_p)?

Like this?  This too fixes the problem, tested on powerpc-linux target.

nathan
2013-05-14  Nathan Sidwell  <nathan@codesourcery.com>

	gcc/
	* varasm.c (default_use_anchors_for_symbol_p): Use decl_replaceable_p.

	gcc/testsuite/
	* gcc.dg/visibility-21.c: New.
Jan Hubicka - May 14, 2013, 8:57 a.m.
> On 05/13/13 14:09, Jan Hubicka wrote:
> >>Index: varasm.c
> >>===================================================================
> 
> >I think DECL_COMDAT is not what you really want to return true for.  So perhaps
> >you really want (TREE_PUBLIC (decl) && decl_binds_to_current_def_p)?
> 
> Like this?  This too fixes the problem, tested on powerpc-linux target.

Yes, it looks good to me :)

Honza

Patch

Index: varasm.c
===================================================================
--- varasm.c	(revision 198771)
+++ varasm.c	(working copy)
@@ -6580,9 +6580,9 @@  default_use_anchors_for_symbol_p (const_
   decl = SYMBOL_REF_DECL (symbol);
   if (decl && DECL_P (decl))
     {
-      /* Don't use section anchors for decls that might be defined by
-	 other modules.  */
-      if (!targetm.binds_local_p (decl))
+      /* Don't use section anchors for decls that might be defined or
+	 usurped by other modules.  */
+      if (TREE_PUBLIC (decl) && !decl_binds_to_current_def_p (decl))
 	return false;
 
       /* Don't use section anchors for decls that will be placed in a
Index: testsuite/gcc.dg/visibility-21.c
===================================================================
--- testsuite/gcc.dg/visibility-21.c	(revision 0)
+++ testsuite/gcc.dg/visibility-21.c	(revision 0)
@@ -0,0 +1,13 @@ 
+/* Test visibility attribute on function definition. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fsection-anchors" } */
+/* { dg-require-visibility "" } */
+/* { dg-require-weak "" } */
+/* { dg-final { scan-assembler-not "ANCHOR" } } */
+
+int __attribute__((weak, visibility("hidden"))) weak_hidden[3];
+
+int *f_weak_hidden ()
+{
+  return weak_hidden;
+}