On behalf of Aaron Conole <aconole@redhat.com>
On behalf of Aaron Conole <aconole@redhat.com> * libgcov-driver-system.c (__gcov_error_file): New. (get_gcov_error_file): New. (gcov_error): Use and set __gcov_error_file. (gcov_error_exit): New. * libgcov-driver.c (gcov_exit): Call gcov_error_exit. From-SVN: r237033
This commit is contained in:
parent
930ebd0e2a
commit
8aa5bdd61e
@ -1,3 +1,11 @@
|
||||
2016-06-02 Aaron Conole <aconole@redhat.com>
|
||||
|
||||
* libgcov-driver-system.c (__gcov_error_file): New.
|
||||
(get_gcov_error_file): New.
|
||||
(gcov_error): Use and set __gcov_error_file.
|
||||
(gcov_error_exit): New.
|
||||
* libgcov-driver.c (gcov_exit): Call gcov_error_exit.
|
||||
|
||||
2016-05-26 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* config/nvptx/free.asm: Delete.
|
||||
|
@ -23,19 +23,64 @@ a copy of the GCC Runtime Library Exception along with this program;
|
||||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* A utility function for outputing errors. */
|
||||
/* Configured via the GCOV_ERROR_FILE environment variable;
|
||||
it will either be stderr, or a file of the user's choosing.
|
||||
Non-static to prevent multiple gcov-aware shared objects from
|
||||
instantiating their own copies. */
|
||||
FILE *__gcov_error_file = NULL;
|
||||
|
||||
/* A utility function to populate the __gcov_error_file pointer.
|
||||
This should NOT be called outside of the gcov system driver code. */
|
||||
|
||||
static FILE *
|
||||
get_gcov_error_file(void)
|
||||
{
|
||||
#if !IN_GCOV_TOOL
|
||||
return stderr;
|
||||
#else
|
||||
char *gcov_error_filename = getenv ("GCOV_ERROR_FILE");
|
||||
|
||||
if (gcov_error_filename)
|
||||
{
|
||||
FILE *openfile = fopen (gcov_error_filename, "a");
|
||||
if (openfile)
|
||||
__gcov_error_file = openfile;
|
||||
}
|
||||
if (!__gcov_error_file)
|
||||
__gcov_error_file = stderr;
|
||||
return __gcov_error_file;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* A utility function for outputting errors. */
|
||||
|
||||
static int __attribute__((format(printf, 1, 2)))
|
||||
gcov_error (const char *fmt, ...)
|
||||
{
|
||||
int ret;
|
||||
va_list argp;
|
||||
|
||||
if (!__gcov_error_file)
|
||||
__gcov_error_file = get_gcov_error_file ();
|
||||
|
||||
va_start (argp, fmt);
|
||||
ret = vfprintf (stderr, fmt, argp);
|
||||
ret = vfprintf (__gcov_error_file, fmt, argp);
|
||||
va_end (argp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if !IN_GCOV_TOOL
|
||||
static void
|
||||
gcov_error_exit (void)
|
||||
{
|
||||
if (__gcov_error_file && __gcov_error_file != stderr)
|
||||
{
|
||||
fclose (__gcov_error_file);
|
||||
__gcov_error_file = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Make sure path component of the given FILENAME exists, create
|
||||
missing directories. FILENAME must be writable.
|
||||
Returns zero on success, or -1 if an error occurred. */
|
||||
|
@ -43,9 +43,13 @@ void __gcov_init (struct gcov_info *p __attribute__ ((unused))) {}
|
||||
|
||||
#ifdef L_gcov
|
||||
|
||||
/* A utility function for outputing errors. */
|
||||
/* A utility function for outputting errors. */
|
||||
static int gcov_error (const char *, ...);
|
||||
|
||||
#if !IN_GCOV_TOOL
|
||||
static void gcov_error_exit (void);
|
||||
#endif
|
||||
|
||||
#include "gcov-io.c"
|
||||
|
||||
struct gcov_fn_buffer
|
||||
@ -878,6 +882,8 @@ gcov_exit (void)
|
||||
__gcov_root.prev->next = __gcov_root.next;
|
||||
else
|
||||
__gcov_master.root = __gcov_root.next;
|
||||
|
||||
gcov_error_exit ();
|
||||
}
|
||||
|
||||
/* Add a new object file onto the bb chain. Invoked automatically
|
||||
|
Loading…
Reference in New Issue
Block a user