From b20ee094dfddac8641eca9248998e89686f8ba38 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 3 Sep 2014 00:43:00 +0000 Subject: [PATCH] libgcov-interface.c (STRONG_ALIAS): New. * libgcov-interface.c (STRONG_ALIAS): New. (__gcov_flush): Call __gcov_reset_int. (__gcov_reset): Strong alias for ... (__gcov_reset_ing): ... this renamed hidden version. * libgcov.h (__gcov_reset_int): New declaration. From-SVN: r214840 --- libgcc/ChangeLog | 8 ++++++++ libgcc/libgcov-interface.c | 12 ++++++++++-- libgcc/libgcov.h | 4 +++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index c9f4e12dd49..014febb291a 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2014-09-02 Nathan sidwell + + * libgcov-interface.c (STRONG_ALIAS): New. + (__gcov_flush): Call __gcov_reset_int. + (__gcov_reset): Strong alias for ... + (__gcov_reset_ing): ... this renamed hidden version. + * libgcov.h (__gcov_reset_int): New declaration. + 2014-08-19 Yaakov Selkowitz * config/i386/cygming-crtend.c (register_frame_ctor): Move atexit diff --git a/libgcc/libgcov-interface.c b/libgcc/libgcov-interface.c index f73666c1367..76d3f9731d7 100644 --- a/libgcc/libgcov-interface.c +++ b/libgcc/libgcov-interface.c @@ -42,6 +42,12 @@ void __gcov_dump (void) {} #else + +/* Some functions we want to bind in this dynamic object, but have an + overridable global alias. */ +#define STRONG_ALIAS(src,dst) \ + extern __typeof (src) dst __attribute__((alias (#src))) + extern __gthread_mutex_t __gcov_flush_mx ATTRIBUTE_HIDDEN; extern __gthread_mutex_t __gcov_flush_mx ATTRIBUTE_HIDDEN; @@ -77,7 +83,7 @@ __gcov_flush (void) __gthread_mutex_lock (&__gcov_flush_mx); __gcov_dump_one (&__gcov_root); - __gcov_reset (); + __gcov_reset_int (); __gthread_mutex_unlock (&__gcov_flush_mx); } @@ -121,12 +127,14 @@ gcov_clear (const struct gcov_info *list) in order to collect profile in region of interest. */ void -__gcov_reset (void) +__gcov_reset_int (void) { gcov_clear (__gcov_root.list); __gcov_root.dumped = 0; } +STRONG_ALIAS (__gcov_reset_int, __gcov_reset); + #endif /* L_gcov_reset */ #ifdef L_gcov_dump diff --git a/libgcc/libgcov.h b/libgcc/libgcov.h index dfef181ce1a..98a15d134a7 100644 --- a/libgcc/libgcov.h +++ b/libgcc/libgcov.h @@ -225,8 +225,10 @@ extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN; /* Called before fork, to avoid double counting. */ extern void __gcov_flush (void) ATTRIBUTE_HIDDEN; -/* Function to reset all counters to 0. */ +/* Function to reset all counters to 0. Both externally visible (and + overridable) and internal version. */ extern void __gcov_reset (void); +extern void __gcov_reset_int (void) ATTRIBUTE_HIDDEN; /* Function to enable early write of profile information so far. */ extern void __gcov_dump (void); -- 2.30.2