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.
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,

Reply via email to