/* Gcov.c: prepend line execution counts and branch probabilities to a
source file.
- Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by James E. Wilson of Cygnus Support.
Mangled by Bob Manson of Cygnus Support.
Mangled further by Nathan Sidwell <nathan@codesourcery.com>
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. */
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
/* ??? Print a list of the ten blocks with the highest execution counts,
and list the line numbers corresponding to those blocks. Also, perhaps
static char *da_file_name;
+/* Data file is missing. */
+
+static int no_data_file;
+
/* Output branch probabilities. */
static int flag_branches = 0;
}
static void
-fnotice (FILE *file, const char *msgid, ...)
+fnotice (FILE *file, const char *cmsgid, ...)
{
va_list ap;
- va_start (ap, msgid);
- vfprintf (file, _(msgid), ap);
+ va_start (ap, cmsgid);
+ vfprintf (file, _(cmsgid), ap);
va_end (ap);
}
\f
print_version (void)
{
fnotice (stdout, "gcov (GCC) %s\n", version_string);
- fprintf (stdout, "Copyright %s 2004 Free Software Foundation, Inc.\n",
+ fprintf (stdout, "Copyright %s 2006 Free Software Foundation, Inc.\n",
_("(C)"));
fnotice (stdout,
_("This is free software; see the source for copying conditions.\n"
for (fn = functions; fn; fn = fn->next)
solve_flow_graph (fn);
for (src = sources; src; src = src->next)
- src->lines = xcalloc (src->num_lines, sizeof (line_t));
+ src->lines = XCNEWVEC (line_t, src->num_lines);
for (fn = functions; fn; fn = fn->next)
{
coverage_t coverage;
struct stat status;
length += strlen (object_directory) + 2;
- name = xmalloc (length);
+ name = XNEWVEC (char, length);
name[0] = 0;
base = !stat (object_directory, &status) && S_ISDIR (status.st_mode);
}
else
{
- name = xmalloc (length + 1);
+ name = XNEWVEC (char, length + 1);
name[0] = 0;
base = 1;
}
length = strlen (name);
- bbg_file_name = xmalloc (length + strlen (GCOV_NOTE_SUFFIX) + 1);
+ bbg_file_name = XNEWVEC (char, length + strlen (GCOV_NOTE_SUFFIX) + 1);
strcpy (bbg_file_name, name);
strcpy (bbg_file_name + length, GCOV_NOTE_SUFFIX);
- da_file_name = xmalloc (length + strlen (GCOV_DATA_SUFFIX) + 1);
+ da_file_name = XNEWVEC (char, length + strlen (GCOV_DATA_SUFFIX) + 1);
strcpy (da_file_name, name);
strcpy (da_file_name + length, GCOV_DATA_SUFFIX);
+ free (name);
return;
}
if (!strcmp (file_name, src->name))
return src;
- src = xcalloc (1, sizeof (source_t));
+ src = XCNEW (source_t);
src->name = xstrdup (file_name);
src->coverage.name = src->name;
src->index = sources ? sources->index + 1 : 1;
src = find_source (gcov_read_string ());
lineno = gcov_read_unsigned ();
- fn = xcalloc (1, sizeof (function_t));
+ fn = XCNEW (function_t);
fn->name = function_name;
fn->ident = ident;
fn->checksum = checksum;
unsigned ix, num_blocks = GCOV_TAG_BLOCKS_NUM (length);
fn->num_blocks = num_blocks;
- fn->blocks = xcalloc (fn->num_blocks, sizeof (block_t));
+ fn->blocks = XCNEWVEC (block_t, fn->num_blocks);
for (ix = 0; ix != num_blocks; ix++)
fn->blocks[ix].flags = gcov_read_unsigned ();
}
if (dest >= fn->num_blocks)
goto corrupt;
- arc = xcalloc (1, sizeof (arc_t));
+ arc = XCNEW (arc_t);
arc->dst = &fn->blocks[dest];
arc->src = &fn->blocks[src];
else if (fn && tag == GCOV_TAG_LINES)
{
unsigned blockno = gcov_read_unsigned ();
- unsigned *line_nos = xcalloc (length - 1, sizeof (unsigned));
+ unsigned *line_nos = XCNEWVEC (unsigned, length - 1);
if (blockno >= fn->num_blocks || fn->blocks[blockno].u.line.encoding)
goto corrupt;
if (!gcov_open (da_file_name, 1))
{
- fnotice (stderr, "%s:cannot open data file\n", da_file_name);
- return 1;
+ fnotice (stderr, "%s:cannot open data file, assuming not executed\n",
+ da_file_name);
+ no_data_file = 1;
+ return 0;
}
if (!gcov_magic (gcov_read_unsigned (), GCOV_DATA_MAGIC))
{
goto mismatch;
if (!fn->counts)
- fn->counts = xcalloc (fn->num_counts, sizeof (gcov_type));
+ fn->counts = XCNEWVEC (gcov_type, fn->num_counts);
for (ix = 0; ix != fn->num_counts; ix++)
fn->counts[ix] += gcov_read_counter ();
make_gcov_file_name (const char *input_name, const char *src_name)
{
char *cptr;
- char *name = xmalloc (strlen (src_name) + strlen (input_name) + 10);
+ char *name = XNEWVEC (char, strlen (src_name) + strlen (input_name) + 10);
name[0] = 0;
if (flag_long_names && strcmp (src_name, input_name))
fprintf (gcov_file, "%9s:%5d:Source:%s\n", "-", 0, src->name);
fprintf (gcov_file, "%9s:%5d:Graph:%s\n", "-", 0, bbg_file_name);
- fprintf (gcov_file, "%9s:%5d:Data:%s\n", "-", 0, da_file_name);
+ fprintf (gcov_file, "%9s:%5d:Data:%s\n", "-", 0,
+ no_data_file ? "-" : da_file_name);
fprintf (gcov_file, "%9s:%5d:Runs:%u\n", "-", 0,
object_summary.ctrs[GCOV_COUNTER_ARCS].runs);
fprintf (gcov_file, "%9s:%5d:Programs:%u\n", "-", 0, program_count);