+2016-06-05 Aaron Conole <aconole@redhat.com>
+ Nathan Sidwell <nathan@acm.org>
+
+ PR libgcc/71400
+ * libgcov-driver-system.c (__gcov_error_file): Disable if IN_GCOV_TOOL.
+ (get_gcov_error_file): Check __gcov_error_file before trying to
+ initialize it.
+ (gcov_error): Always use get_gcov_error_file.
+
2016-06-02 Aaron Conole <aconole@redhat.com>
* libgcov-driver-system.c (__gcov_error_file): New.
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+#if !IN_GCOV_TOOL
/* 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;
+#endif
/* 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)
+get_gcov_error_file (void)
{
-#if !IN_GCOV_TOOL
+#if IN_GCOV_TOOL
return stderr;
#else
- char *gcov_error_filename = getenv ("GCOV_ERROR_FILE");
-
- if (gcov_error_filename)
+ if (!__gcov_error_file)
{
- FILE *openfile = fopen (gcov_error_filename, "a");
- if (openfile)
- __gcov_error_file = openfile;
+ const char *gcov_error_filename = getenv ("GCOV_ERROR_FILE");
+
+ if (gcov_error_filename)
+ __gcov_error_file = fopen (gcov_error_filename, "a");
+ if (!__gcov_error_file)
+ __gcov_error_file = stderr;
}
- if (!__gcov_error_file)
- __gcov_error_file = stderr;
return __gcov_error_file;
#endif
}
int ret;
va_list argp;
- if (!__gcov_error_file)
- __gcov_error_file = get_gcov_error_file ();
-
va_start (argp, fmt);
- ret = vfprintf (__gcov_error_file, fmt, argp);
+ ret = vfprintf (get_gcov_error_file (), fmt, argp);
va_end (argp);
return ret;
}