diff options
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 8 | ||||
-rw-r--r-- | libgcc/libgcov-interface.c | 12 | ||||
-rw-r--r-- | libgcc/libgcov.h | 4 |
3 files changed, 21 insertions, 3 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index c9f4e12..014febb 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2014-09-02 Nathan sidwell <nathan@acm.org> + + * 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 <yselkowi@redhat.com> * config/i386/cygming-crtend.c (register_frame_ctor): Move atexit diff --git a/libgcc/libgcov-interface.c b/libgcc/libgcov-interface.c index f73666c..76d3f97 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 dfef181..98a15d1 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); |