diff mbox

Drop workaround for old binutils linker plugin bug

Message ID 20150114051350.GD13412@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka Jan. 14, 2015, 5:13 a.m. UTC
Hi,
this workaround actually triggers bug in quite recent golds, so it seems
to be good motivation to finally drop it.  The bug is long fixed.

Bootstrapped/regtested x86_64-linux, will commit it shortly.

Honza

	* tree-profile.c (init_ic_make_global_vars): Drop workaround
	for bintuils bug 14342.
	(init_ic_make_global_vars): Likewise.
	(gimple_init_edge_profiler): Likewise.
	(gimple_gen_ic_func_profiler): Likewise.
diff mbox

Patch

Index: tree-profile.c
===================================================================
--- tree-profile.c	(revision 219571)
+++ tree-profile.c	(working copy)
@@ -105,30 +105,15 @@  init_ic_make_global_vars (void)
 
   ptr_void = build_pointer_type (void_type_node);
 
-  /* Workaround for binutils bug 14342.  Once it is fixed, remove lto path.  */
-  if (flag_lto)
-    {
-      ic_void_ptr_var
-	= build_decl (UNKNOWN_LOCATION, VAR_DECL,
-		      get_identifier ("__gcov_indirect_call_callee_ltopriv"),
-		      ptr_void);
-      TREE_PUBLIC (ic_void_ptr_var) = 1;
-      DECL_COMMON (ic_void_ptr_var) = 1;
-      DECL_VISIBILITY (ic_void_ptr_var) = VISIBILITY_HIDDEN;
-      DECL_VISIBILITY_SPECIFIED (ic_void_ptr_var) = true;
-    }
-  else
-    {
-      ic_void_ptr_var
-	= build_decl (UNKNOWN_LOCATION, VAR_DECL,
-		      get_identifier (
-			      (PARAM_VALUE (PARAM_INDIR_CALL_TOPN_PROFILE) ?
-			       "__gcov_indirect_call_topn_callee" :
-			       "__gcov_indirect_call_callee")),
-		      ptr_void);
-      TREE_PUBLIC (ic_void_ptr_var) = 1;
-      DECL_EXTERNAL (ic_void_ptr_var) = 1;
-    }
+  ic_void_ptr_var
+    = build_decl (UNKNOWN_LOCATION, VAR_DECL,
+		  get_identifier (
+			  (PARAM_VALUE (PARAM_INDIR_CALL_TOPN_PROFILE) ?
+			   "__gcov_indirect_call_topn_callee" :
+			   "__gcov_indirect_call_callee")),
+		  ptr_void);
+  TREE_PUBLIC (ic_void_ptr_var) = 1;
+  DECL_EXTERNAL (ic_void_ptr_var) = 1;
   TREE_STATIC (ic_void_ptr_var) = 1;
   DECL_ARTIFICIAL (ic_void_ptr_var) = 1;
   DECL_INITIAL (ic_void_ptr_var) = NULL;
@@ -138,30 +123,16 @@  init_ic_make_global_vars (void)
   varpool_node::finalize_decl (ic_void_ptr_var);
 
   gcov_type_ptr = build_pointer_type (get_gcov_type ());
-  /* Workaround for binutils bug 14342.  Once it is fixed, remove lto path.  */
-  if (flag_lto)
-    {
-      ic_gcov_type_ptr_var
-	= build_decl (UNKNOWN_LOCATION, VAR_DECL,
-		      get_identifier ("__gcov_indirect_call_counters_ltopriv"),
-		      gcov_type_ptr);
-      TREE_PUBLIC (ic_gcov_type_ptr_var) = 1;
-      DECL_COMMON (ic_gcov_type_ptr_var) = 1;
-      DECL_VISIBILITY (ic_gcov_type_ptr_var) = VISIBILITY_HIDDEN;
-      DECL_VISIBILITY_SPECIFIED (ic_gcov_type_ptr_var) = true;
-    }
-  else
-    {
-      ic_gcov_type_ptr_var
-	= build_decl (UNKNOWN_LOCATION, VAR_DECL,
-		      get_identifier (
-			      (PARAM_VALUE (PARAM_INDIR_CALL_TOPN_PROFILE) ?
-			       "__gcov_indirect_call_topn_counters" :
-		               "__gcov_indirect_call_counters")),
-		      gcov_type_ptr);
-      TREE_PUBLIC (ic_gcov_type_ptr_var) = 1;
-      DECL_EXTERNAL (ic_gcov_type_ptr_var) = 1;
-    }
+
+  ic_gcov_type_ptr_var
+    = build_decl (UNKNOWN_LOCATION, VAR_DECL,
+		  get_identifier (
+			  (PARAM_VALUE (PARAM_INDIR_CALL_TOPN_PROFILE) ?
+			   "__gcov_indirect_call_topn_counters" :
+			   "__gcov_indirect_call_counters")),
+		  gcov_type_ptr);
+  TREE_PUBLIC (ic_gcov_type_ptr_var) = 1;
+  DECL_EXTERNAL (ic_gcov_type_ptr_var) = 1;
   TREE_STATIC (ic_gcov_type_ptr_var) = 1;
   DECL_ARTIFICIAL (ic_gcov_type_ptr_var) = 1;
   DECL_INITIAL (ic_gcov_type_ptr_var) = NULL;
@@ -230,33 +201,18 @@  gimple_init_edge_profiler (void)
 
       init_ic_make_global_vars ();
 
-      /* Workaround for binutils bug 14342.  Once it is fixed, remove lto path.  */
-      if (flag_lto)
-        {
-	  /* void (*) (gcov_type, void *)  */
-	  ic_profiler_fn_type
-		   = build_function_type_list (void_type_node,
-					      gcov_type_ptr, gcov_type_node,
-					      ptr_void, ptr_void,
-					      NULL_TREE);
-	  tree_indirect_call_profiler_fn
-		  = build_fn_decl ("__gcov_indirect_call_profiler",
-					 ic_profiler_fn_type);
-        }
-      else
-        {
-	  /* void (*) (gcov_type, void *)  */
-	  ic_profiler_fn_type
-		   = build_function_type_list (void_type_node,
-					      gcov_type_node,
-					      ptr_void,
-					      NULL_TREE);
-	  tree_indirect_call_profiler_fn
-		  = build_fn_decl ( (PARAM_VALUE (PARAM_INDIR_CALL_TOPN_PROFILE) ?
-				     "__gcov_indirect_call_topn_profiler":
-				     "__gcov_indirect_call_profiler_v2"),
-				   ic_profiler_fn_type);
-        }
+      /* void (*) (gcov_type, void *)  */
+      ic_profiler_fn_type
+	       = build_function_type_list (void_type_node,
+					  gcov_type_node,
+					  ptr_void,
+					  NULL_TREE);
+      tree_indirect_call_profiler_fn
+	      = build_fn_decl ( (PARAM_VALUE (PARAM_INDIR_CALL_TOPN_PROFILE) ?
+				 "__gcov_indirect_call_topn_profiler":
+				 "__gcov_indirect_call_profiler_v2"),
+			       ic_profiler_fn_type);
+
       TREE_NOTHROW (tree_indirect_call_profiler_fn) = 1;
       DECL_ATTRIBUTES (tree_indirect_call_profiler_fn)
 	= tree_cons (get_identifier ("leaf"), NULL,
@@ -477,7 +433,8 @@  gimple_gen_ic_func_profiler (void)
     stmt1: __gcov_indirect_call_profiler_v2 (profile_id,
 					     &current_function_decl)
    */
-  gsi = gsi_after_labels (split_edge (single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun))));
+  gsi = gsi_after_labels (split_edge (single_succ_edge
+					 (ENTRY_BLOCK_PTR_FOR_FN (cfun))));
 
   cur_func = force_gimple_operand_gsi (&gsi,
 				       build_addr (current_function_decl,
@@ -485,26 +442,10 @@  gimple_gen_ic_func_profiler (void)
 				       true, NULL_TREE,
 				       true, GSI_SAME_STMT);
   tree_uid = build_int_cst
-	      (gcov_type_node, cgraph_node::get (current_function_decl)->profile_id);
-  /* Workaround for binutils bug 14342.  Once it is fixed, remove lto path.  */
-  if (flag_lto)
-    {
-      tree counter_ptr, ptr_var;
-      counter_ptr = force_gimple_operand_gsi (&gsi, ic_gcov_type_ptr_var,
-					      true, NULL_TREE, true,
-					      GSI_SAME_STMT);
-      ptr_var = force_gimple_operand_gsi (&gsi, ic_void_ptr_var,
-					  true, NULL_TREE, true,
-					  GSI_SAME_STMT);
-
-      stmt1 = gimple_build_call (tree_indirect_call_profiler_fn, 4,
-				 counter_ptr, tree_uid, cur_func, ptr_var);
-    }
-  else
-    {
-      stmt1 = gimple_build_call (tree_indirect_call_profiler_fn, 2,
-				 tree_uid, cur_func);
-    }
+	      (gcov_type_node,
+	       cgraph_node::get (current_function_decl)->profile_id);
+  stmt1 = gimple_build_call (tree_indirect_call_profiler_fn, 2,
+			     tree_uid, cur_func);
   gsi_insert_before (&gsi, stmt1, GSI_SAME_STMT);
 
   /* Set __gcov_indirect_call_callee to 0,