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:
Aaron Conole 2016-06-02 12:22:01 +00:00 committed by Nathan Sidwell
parent 930ebd0e2a
commit 8aa5bdd61e
3 changed files with 62 additions and 3 deletions

View File

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

View File

@ -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. */

View File

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