aboutsummaryrefslogtreecommitdiff
path: root/libgcc/libgcov.h
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2021-02-16 16:28:06 +0100
committerMartin Liska <mliska@suse.cz>2021-03-04 16:21:52 +0100
commit6a8fc0c31a9ae759fe9bf59b5418abf2af938f91 (patch)
treed0f65e009207e8142f7e5882e2c9e059c3e1b6b8 /libgcc/libgcov.h
parentc9816196328a4f4b927f08cf2f66cf255849da0b (diff)
downloadgcc-6a8fc0c31a9ae759fe9bf59b5418abf2af938f91.zip
gcc-6a8fc0c31a9ae759fe9bf59b5418abf2af938f91.tar.gz
gcc-6a8fc0c31a9ae759fe9bf59b5418abf2af938f91.tar.bz2
profiling: fix streaming of TOPN counters
libgcc/ChangeLog: PR gcov-profile/99105 * libgcov-driver.c (write_top_counters): Rename to ... (write_topn_counters): ... this. (write_one_data): Pre-allocate buffer for number of items in the corresponding linked lists. * libgcov.h (malloc_mmap): New function. (allocate_gcov_kvp): Use it. gcc/testsuite/ChangeLog: PR gcov-profile/99105 * gcc.dg/tree-prof/indir-call-prof-malloc.c: Use profile correction as the wrapped malloc is called one more time from libgcov. * gcc.dg/tree-prof/pr97461.c: Likewise.
Diffstat (limited to 'libgcc/libgcov.h')
-rw-r--r--libgcc/libgcov.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/libgcc/libgcov.h b/libgcc/libgcov.h
index acdb7cd..2780cc0 100644
--- a/libgcc/libgcov.h
+++ b/libgcc/libgcov.h
@@ -409,6 +409,19 @@ gcov_counter_add (gcov_type *counter, gcov_type value,
*counter += value;
}
+#if HAVE_SYS_MMAN_H
+
+/* Allocate LENGTH with mmap function. */
+
+static inline void *
+malloc_mmap (size_t length)
+{
+ return mmap (NULL, length, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+}
+
+#endif
+
/* Allocate gcov_kvp from statically pre-allocated pool,
or use heap otherwise. */
@@ -424,9 +437,7 @@ allocate_gcov_kvp (void)
if (__gcov_kvp_dynamic_pool == NULL
|| __gcov_kvp_dynamic_pool_index >= __gcov_kvp_dynamic_pool_size)
{
- void *ptr = mmap (NULL, MMAP_CHUNK_SIZE,
- PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ void *ptr = malloc_mmap (MMAP_CHUNK_SIZE);
if (ptr != MAP_FAILED)
{
__gcov_kvp_dynamic_pool = ptr;