aboutsummaryrefslogtreecommitdiff
path: root/libgcc/libgcov.h
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-10-04 14:41:14 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-10-04 12:41:14 +0000
commit3edbcdbead288664d874dd3a2e0d8ada4c565af0 (patch)
treee312a412289bc88a481440b075cfa23d7989e321 /libgcc/libgcov.h
parent668f8d452697359a150bd651149c75109f66eb06 (diff)
downloadgcc-3edbcdbead288664d874dd3a2e0d8ada4c565af0.zip
gcc-3edbcdbead288664d874dd3a2e0d8ada4c565af0.tar.gz
gcc-3edbcdbead288664d874dd3a2e0d8ada4c565af0.tar.bz2
Fix divergence in indirect profiling (PR gcov-profile/84107).
2018-10-04 Martin Liska <mliska@suse.cz> PR gcov-profile/84107 * tree-profile.c (init_ic_make_global_vars): Remove ic_void_ptr_var and ic_gcov_type_ptr_var. Come up with new ic_tuple* variables. Emit __gcov_indirect_call{,_topn} variables. (gimple_gen_ic_profiler): Access the variable and emit gimple. (gimple_gen_ic_func_profiler): Access __gcov_indirect_call.callee field. (gimple_init_gcov_profiler): Use ptr_type_node. * value-prof.c (gimple_ic): Use ptr_type_node. 2018-10-04 Martin Liska <mliska@suse.cz> PR gcov-profile/84107 * libgcov-profiler.c (__gcov_indirect_call): Change type to indirect_call_tuple. (struct indirect_call_tuple): New struct. (__gcov_indirect_call_topn_profiler): Change type. (__gcov_indirect_call_profiler_v2): Use the new variables. * libgcov.h (struct indirect_call_tuple): New struct definition. From-SVN: r264840
Diffstat (limited to 'libgcc/libgcov.h')
-rw-r--r--libgcc/libgcov.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/libgcc/libgcov.h b/libgcc/libgcov.h
index 2142287..ee05a68 100644
--- a/libgcc/libgcov.h
+++ b/libgcc/libgcov.h
@@ -226,6 +226,15 @@ struct gcov_master
gcov_unsigned_t version;
struct gcov_root *root;
};
+
+struct indirect_call_tuple
+{
+ /* Callee function. */
+ void *callee;
+
+ /* Pointer to counters. */
+ gcov_type *counters;
+};
/* Exactly one of these will be active in the process. */
extern struct gcov_master __gcov_master;