re PR middle-end/19985 (executables created with -fprofile-arcs -ftest-coverage segfault in gcov_exit ())
PR 19985 * gcov-io.h: Declare gcov external functions hidden. From-SVN: r99109
This commit is contained in:
parent
000b62dcb8
commit
cbbf940328
|
@ -1,3 +1,8 @@
|
|||
2005-05-02 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
PR 19985
|
||||
* gcov-io.h: Declare gcov external functions hidden.
|
||||
|
||||
2005-05-02 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* tree-ssa-uncprop.c (equiv_hash_elt, remove_equivalence,
|
||||
|
|
|
@ -225,11 +225,15 @@ typedef HOST_WIDEST_INT gcov_type;
|
|||
|
||||
#endif /* !IN_LIBGCOV */
|
||||
|
||||
/* In gcov we want function linkage to be static. In libgcov we need
|
||||
these functions to be extern, so prefix them with __gcov. In the
|
||||
compiler we want it extern, so that they can be accessed from
|
||||
elsewhere. */
|
||||
/* In gcov we want function linkage to be static. In the compiler we want
|
||||
it extern, so that they can be accessed from elsewhere. In libgcov we
|
||||
need these functions to be extern, so prefix them with __gcov. In
|
||||
libgcov they must also be hidden so that the instance in the executable
|
||||
is not also used in a DSO. */
|
||||
#if IN_LIBGCOV
|
||||
|
||||
#include "auto-host.h" /* for HAVE_GAS_HIDDEN */
|
||||
|
||||
#define gcov_var __gcov_var
|
||||
#define gcov_open __gcov_open
|
||||
#define gcov_close __gcov_close
|
||||
|
@ -249,6 +253,16 @@ typedef HOST_WIDEST_INT gcov_type;
|
|||
#pragma GCC poison gcov_write_string gcov_write_tag gcov_write_length
|
||||
#pragma GCC poison gcov_read_string gcov_sync gcov_time gcov_magic
|
||||
|
||||
#ifdef HAVE_GAS_HIDDEN
|
||||
#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden")))
|
||||
#else
|
||||
#define ATTRIBUTE_HIDDEN
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define ATTRIBUTE_HIDDEN
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef GCOV_LINKAGE
|
||||
|
@ -428,20 +442,20 @@ struct gcov_info
|
|||
};
|
||||
|
||||
/* Register a new object file module. */
|
||||
extern void __gcov_init (struct gcov_info *);
|
||||
extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* Called before fork, to avoid double counting. */
|
||||
extern void __gcov_flush (void);
|
||||
extern void __gcov_flush (void) ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* The merge function that just sums the counters. */
|
||||
extern void __gcov_merge_add (gcov_type *, unsigned);
|
||||
extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* The merge function to choose the most common value. */
|
||||
extern void __gcov_merge_single (gcov_type *, unsigned);
|
||||
extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* The merge function to choose the most common difference between
|
||||
consecutive values. */
|
||||
extern void __gcov_merge_delta (gcov_type *, unsigned);
|
||||
extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* The profiler functions. */
|
||||
extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned);
|
||||
|
@ -451,12 +465,13 @@ extern void __gcov_one_value_profiler (gcov_type *, gcov_type);
|
|||
#ifndef inhibit_libc
|
||||
/* The wrappers around some library functions.. */
|
||||
extern pid_t __gcov_fork (void);
|
||||
extern int __gcov_execl (const char *, const char *, ...);
|
||||
extern int __gcov_execlp (const char *, const char *, ...);
|
||||
extern int __gcov_execle (const char *, const char *, ...);
|
||||
extern int __gcov_execv (const char *, char *const []);
|
||||
extern int __gcov_execvp (const char *, char *const []);
|
||||
extern int __gcov_execve (const char *, char *const [], char *const []);
|
||||
extern int __gcov_execl (const char *, const char *, ...) ATTRIBUTE_HIDDEN;
|
||||
extern int __gcov_execlp (const char *, const char *, ...) ATTRIBUTE_HIDDEN;
|
||||
extern int __gcov_execle (const char *, const char *, ...) ATTRIBUTE_HIDDEN;
|
||||
extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN;
|
||||
extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN;
|
||||
extern int __gcov_execve (const char *, char *const [], char *const [])
|
||||
ATTRIBUTE_HIDDEN;
|
||||
#endif
|
||||
|
||||
#endif /* IN_LIBGCOV */
|
||||
|
@ -488,7 +503,7 @@ GCOV_LINKAGE struct gcov_var
|
|||
size_t alloc;
|
||||
gcov_unsigned_t *buffer;
|
||||
#endif
|
||||
} gcov_var;
|
||||
} gcov_var ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* Functions for reading and writing gcov files. In libgcov you can
|
||||
open the file for reading then writing. Elsewhere you can open the
|
||||
|
@ -500,29 +515,31 @@ GCOV_LINKAGE struct gcov_var
|
|||
functions for writing. Your file may become corrupted if you break
|
||||
these invariants. */
|
||||
#if IN_LIBGCOV
|
||||
GCOV_LINKAGE int gcov_open (const char */*name*/);
|
||||
GCOV_LINKAGE int gcov_open (const char */*name*/) ATTRIBUTE_HIDDEN;
|
||||
#else
|
||||
GCOV_LINKAGE int gcov_open (const char */*name*/, int /*direction*/);
|
||||
GCOV_LINKAGE int gcov_magic (gcov_unsigned_t, gcov_unsigned_t);
|
||||
#endif
|
||||
GCOV_LINKAGE int gcov_close (void);
|
||||
GCOV_LINKAGE int gcov_close (void) ATTRIBUTE_HIDDEN;
|
||||
|
||||
/* Available everywhere. */
|
||||
static gcov_position_t gcov_position (void);
|
||||
static int gcov_is_error (void);
|
||||
|
||||
GCOV_LINKAGE gcov_unsigned_t gcov_read_unsigned (void);
|
||||
GCOV_LINKAGE gcov_type gcov_read_counter (void);
|
||||
GCOV_LINKAGE void gcov_read_summary (struct gcov_summary *);
|
||||
GCOV_LINKAGE gcov_unsigned_t gcov_read_unsigned (void) ATTRIBUTE_HIDDEN;
|
||||
GCOV_LINKAGE gcov_type gcov_read_counter (void) ATTRIBUTE_HIDDEN;
|
||||
GCOV_LINKAGE void gcov_read_summary (struct gcov_summary *) ATTRIBUTE_HIDDEN;
|
||||
|
||||
#if IN_LIBGCOV
|
||||
/* Available only in libgcov */
|
||||
GCOV_LINKAGE void gcov_write_counter (gcov_type);
|
||||
GCOV_LINKAGE void gcov_write_tag_length (gcov_unsigned_t, gcov_unsigned_t);
|
||||
GCOV_LINKAGE void gcov_write_counter (gcov_type) ATTRIBUTE_HIDDEN;
|
||||
GCOV_LINKAGE void gcov_write_tag_length (gcov_unsigned_t, gcov_unsigned_t)
|
||||
ATTRIBUTE_HIDDEN;
|
||||
GCOV_LINKAGE void gcov_write_summary (gcov_unsigned_t /*tag*/,
|
||||
const struct gcov_summary *);
|
||||
const struct gcov_summary *)
|
||||
ATTRIBUTE_HIDDEN;
|
||||
static void gcov_rewrite (void);
|
||||
GCOV_LINKAGE void gcov_seek (gcov_position_t /*position*/);
|
||||
GCOV_LINKAGE void gcov_seek (gcov_position_t /*position*/) ATTRIBUTE_HIDDEN;
|
||||
#else
|
||||
/* Available outside libgcov */
|
||||
GCOV_LINKAGE const char *gcov_read_string (void);
|
||||
|
@ -532,7 +549,7 @@ GCOV_LINKAGE void gcov_sync (gcov_position_t /*base*/,
|
|||
|
||||
#if !IN_GCOV
|
||||
/* Available outside gcov */
|
||||
GCOV_LINKAGE void gcov_write_unsigned (gcov_unsigned_t);
|
||||
GCOV_LINKAGE void gcov_write_unsigned (gcov_unsigned_t) ATTRIBUTE_HIDDEN;
|
||||
#endif
|
||||
|
||||
#if !IN_GCOV && !IN_LIBGCOV
|
||||
|
|
Loading…
Reference in New Issue