mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2016-05-26 Nathan Sidwell <nathan@acm.org>
|
||||||
|
|
||||||
* config/nvptx/free.asm: Delete.
|
* 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
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<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)))
|
static int __attribute__((format(printf, 1, 2)))
|
||||||
gcov_error (const char *fmt, ...)
|
gcov_error (const char *fmt, ...)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
va_list argp;
|
va_list argp;
|
||||||
|
|
||||||
|
if (!__gcov_error_file)
|
||||||
|
__gcov_error_file = get_gcov_error_file ();
|
||||||
|
|
||||||
va_start (argp, fmt);
|
va_start (argp, fmt);
|
||||||
ret = vfprintf (stderr, fmt, argp);
|
ret = vfprintf (__gcov_error_file, fmt, argp);
|
||||||
va_end (argp);
|
va_end (argp);
|
||||||
return ret;
|
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
|
/* Make sure path component of the given FILENAME exists, create
|
||||||
missing directories. FILENAME must be writable.
|
missing directories. FILENAME must be writable.
|
||||||
Returns zero on success, or -1 if an error occurred. */
|
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
|
#ifdef L_gcov
|
||||||
|
|
||||||
/* A utility function for outputing errors. */
|
/* A utility function for outputting errors. */
|
||||||
static int gcov_error (const char *, ...);
|
static int gcov_error (const char *, ...);
|
||||||
|
|
||||||
|
#if !IN_GCOV_TOOL
|
||||||
|
static void gcov_error_exit (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "gcov-io.c"
|
#include "gcov-io.c"
|
||||||
|
|
||||||
struct gcov_fn_buffer
|
struct gcov_fn_buffer
|
||||||
|
|
@ -878,6 +882,8 @@ gcov_exit (void)
|
||||||
__gcov_root.prev->next = __gcov_root.next;
|
__gcov_root.prev->next = __gcov_root.next;
|
||||||
else
|
else
|
||||||
__gcov_master.root = __gcov_root.next;
|
__gcov_master.root = __gcov_root.next;
|
||||||
|
|
||||||
|
gcov_error_exit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a new object file onto the bb chain. Invoked automatically
|
/* Add a new object file onto the bb chain. Invoked automatically
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue