diff options
author | Martin Liska <mliska@suse.cz> | 2021-02-16 16:28:06 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2021-03-04 16:21:52 +0100 |
commit | 6a8fc0c31a9ae759fe9bf59b5418abf2af938f91 (patch) | |
tree | d0f65e009207e8142f7e5882e2c9e059c3e1b6b8 /libgcc/libgcov.h | |
parent | c9816196328a4f4b927f08cf2f66cf255849da0b (diff) | |
download | gcc-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.h | 17 |
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; |