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:
Janis Johnson 2005-05-02 18:01:58 +00:00 committed by Janis Johnson
parent 000b62dcb8
commit cbbf940328
2 changed files with 48 additions and 26 deletions

View File

@ -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,

View File

@ -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