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]

Fix compute_reloc_for_constant


Hi,
while comparing LTO and non-LTO builds I noticed that with LTO we produce a lot
more vtables in datal.rel.ro rather than data.rel.ro.local
This is because of partitioning promoting more symbols global. For RTL we make
section decisions based on SYMBOL_REF_LOCAL_FLAG that is set based on
decl_binds_local_p.  For variables we use TREE_PUBLIC check that is overly
conservative.

Bootstrapped/regtested x86_64-linux, OK?
	* varasm.c (compute_reloc_for_constant): Use targetm.binds_local_p
	instead of TREE_PUBLIC to determine if reference will be local
	within given DSO or not.
Index: varasm.c
===================================================================
--- varasm.c	(revision 206684)
+++ varasm.c	(working copy)
@@ -4060,7 +4060,7 @@
 	  break;
 	}
 
-      if (TREE_PUBLIC (tem))
+      if (!targetm.binds_local_p (tem))
 	reloc |= 2;
       else
 	reloc |= 1;


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