/* Dump a gcov file, for debugging use.
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
Contributed by Nathan Sidwell <nathan@codesourcery.com>
Gcov is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
Gcov is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with Gcov; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+along with Gcov; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
#include "config.h"
#include "system.h"
{
int opt;
+ /* Unlock the stdio streams. */
+ unlock_std_streams ();
+
while ((opt = getopt_long (argc, argv, "hlpv", options, NULL)) != -1)
{
switch (opt)
static void
print_version (void)
{
- char v[4];
- unsigned version = GCOV_VERSION;
- unsigned ix;
-
- for (ix = 4; ix--; version >>= 8)
- v[ix] = version;
- printf ("gcov %.4s (GCC %s)\n", v, version_string);
- printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n");
- printf ("This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n");
+ printf ("gcov-dump %s%s\n", pkgversion_string, version_string);
+ printf ("Copyright (C) 2010 Free Software Foundation, Inc.\n");
+ printf ("This is free software; see the source for copying conditions.\n"
+ "There is NO warranty; not even for MERCHANTABILITY or \n"
+ "FITNESS FOR A PARTICULAR PURPOSE.\n\n");
}
static void
unsigned version;
const char *type = NULL;
int endianness = 0;
-
+ char m[4], v[4];
+
if ((endianness = gcov_magic (magic, GCOV_DATA_MAGIC)))
type = "data";
else if ((endianness = gcov_magic (magic, GCOV_NOTE_MAGIC)))
return;
}
version = gcov_read_unsigned ();
-
+ GCOV_UNSIGNED2STRING (v, version);
+ GCOV_UNSIGNED2STRING (m, magic);
+
printf ("%s:%s:magic `%.4s':version `%.4s'%s\n", filename, type,
- (const char *)&magic, (const char *)&version,
- endianness < 0 ? " (swapped endianness)" : "");
+ m, v, endianness < 0 ? " (swapped endianness)" : "");
if (version != GCOV_VERSION)
{
- unsigned expected = GCOV_VERSION;
-
- printf ("%s:warning:current version is `%.4s'\n", filename,
- (const char *)expected);
+ char e[4];
+
+ GCOV_UNSIGNED2STRING (e, GCOV_VERSION);
+ printf ("%s:warning:current version is `%.4s'\n", filename, e);
}
}
printf ("%s:stamp %lu\n", filename, (unsigned long)stamp);
}
-
+
while (1)
{
gcov_position_t base, position = gcov_position ();
break;
}
}
- if (!gcov_is_eof ())
- printf ("%s:early end of file\n", filename);
gcov_close ();
}
tag_blocks (const char *filename ATTRIBUTE_UNUSED,
unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED)
{
- unsigned n_blocks = length / 4;
+ unsigned n_blocks = GCOV_TAG_BLOCKS_NUM (length);
printf (" %u blocks", n_blocks);
tag_arcs (const char *filename ATTRIBUTE_UNUSED,
unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED)
{
- unsigned n_arcs = (length - 4) / 8;
+ unsigned n_arcs = GCOV_TAG_ARCS_NUM (length);
printf (" %u arcs", n_arcs);
if (flag_dump_contents)
unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED)
{
static const char *const counter_names[] = GCOV_COUNTER_NAMES;
- unsigned n_counts = length / 8;
+ unsigned n_counts = GCOV_TAG_COUNTER_NUM (length);
printf (" %s %u counts",
counter_names[GCOV_COUNTER_FOR_TAG (tag)], n_counts);
gcov_read_summary (&summary);
printf (" checksum=0x%08x", summary.checksum);
- for (ix = 0; ix != GCOV_COUNTERS; ix++)
+ for (ix = 0; ix != GCOV_COUNTERS_SUMMABLE; ix++)
{
printf ("\n");
print_prefix (filename, 0, 0);