diff options
author | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-07 19:37:12 +0000 |
---|---|---|
committer | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-07 19:37:12 +0000 |
commit | 9219dd0a97690c85202ee9f576b49b58b9659bcf (patch) | |
tree | 544c50187f4dba610ef1e5aca2d2179d3211968b /gcc/gcov-dump.c | |
parent | 38d1018aa87ac7321c0bb9cad97e6fb2d42f2225 (diff) | |
download | gcc-9219dd0a97690c85202ee9f576b49b58b9659bcf.tar.gz |
Change gcov file interface to single file at a time.
* gcov-io.h: Replace IN_LIBGCC1 with IN_LIBGCOV. Use IN_GCOV.
Convert to C89 prototypes.
(gcov_file, gcov_length, gcov_position, gcov_buffer, gcov_alloc,
gcov_error, gcov_modified): New static variables.
(gcov_open, gcov_close, gcov_read_bytes, gcov_write_bytes): New
functions.
(gcov_write_unsigned, gcov_write_counter, gcov_write_string,
gcov_read_unsigned, gcov_read_counter, gcov_read_string): Adjust.
(gcov_read_summary, gcov_write_summary): Adjust.
(gcov_save_position, gcov_reserve_length, gcov_write_length):
Adjust.
(gcov_resync, gcov_skip, gcov_skip_string): Adjust.
(da_file_open, da_file_close, da_file_eof, da_file_error): Remove.
(da_file_position, da_file_seek, da_file_write, da_file_read):
Remove.
(gcov_error, gcov_eof, gcov_ok, gcov_time): New functions.
* gcov.c (gcov_type): Don't typedef here.
(IN_GCOV): #define
(read_graph_file, read_count_file): Adjust.
* gcov-dump.c (gcov_type): Don't typedef here.
(IN_GCOV): #define.
(tag_function, tag_blocks, tag_arcs, tag_lines, tag_arc_counts):
Remove FILE parameter, adjust.
(struct tag_format): Adjust proc member.
(dump_file): Adjust.
* libgcov.c (IN_LIBGCOV): #define.
(gcov_exit): Adjust.
* loop-init.c: Don't #include gcov-io.h
* profile.c (struct counts_entry): New structure to hold counter
values.
(struct section_reference, struct da_index_entry): Remove.
(bbg_file, da_file): Remove.
(htab_counts_index_hash, htab_counts_index_eq,
htab_counts_index_del): Replace with ...
(htab_counts_entry_hash, htab_counts_entry_eq,
htab_counts_entry_del): ... these.
(cleanup_counts_index, index_counts_file): Remove.
(read_counts_file): New function.
(get_exec_counts): Adjust.
(compute_branch_probabilities): Don't free the exec counts here.
(branch_prob): Adjust.
(init_branch_prob): Adjust.
(end_branch_prob): Adjust.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65338 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gcov-dump.c')
-rw-r--r-- | gcc/gcov-dump.c | 101 |
1 files changed, 51 insertions, 50 deletions
diff --git a/gcc/gcov-dump.c b/gcc/gcov-dump.c index acea56d9d64..5ca64a4f6cf 100644 --- a/gcc/gcov-dump.c +++ b/gcc/gcov-dump.c @@ -23,26 +23,26 @@ Boston, MA 02111-1307, USA. */ #include "tm.h" #include "version.h" #include <getopt.h> -typedef HOST_WIDEST_INT gcov_type; +#define IN_GCOV (-1) #include "gcov-io.h" static void dump_file PARAMS ((const char *)); static void print_prefix PARAMS ((const char *, unsigned)); static void print_usage PARAMS ((void)); static void print_version PARAMS ((void)); -static int tag_function PARAMS ((const char *, FILE *, unsigned, unsigned)); -static int tag_blocks PARAMS ((const char *, FILE *, unsigned, unsigned)); -static int tag_arcs PARAMS ((const char *, FILE *, unsigned, unsigned)); -static int tag_lines PARAMS ((const char *, FILE *, unsigned, unsigned)); -static int tag_arc_counts PARAMS ((const char *, FILE *, unsigned, unsigned)); -static int tag_summary PARAMS ((const char *, FILE *, unsigned, unsigned)); +static int tag_function PARAMS ((const char *, unsigned, unsigned)); +static int tag_blocks PARAMS ((const char *, unsigned, unsigned)); +static int tag_arcs PARAMS ((const char *, unsigned, unsigned)); +static int tag_lines PARAMS ((const char *, unsigned, unsigned)); +static int tag_arc_counts PARAMS ((const char *, unsigned, unsigned)); +static int tag_summary PARAMS ((const char *, unsigned, unsigned)); extern int main PARAMS ((int, char **)); typedef struct tag_format { unsigned tag; char const *name; - int (*proc) (const char *, FILE *, unsigned, unsigned); + int (*proc) (const char *, unsigned, unsigned); } tag_format_t; static int flag_dump_contents = 0; @@ -138,24 +138,22 @@ static void dump_file (filename) const char *filename; { - FILE *file = fopen (filename, "rb"); unsigned tags[4]; unsigned depth = 0; unsigned magic, version; unsigned tag, length; - if (!file) + if (!gcov_open (filename, 1)) { fprintf (stderr, "%s:cannot open\n", filename); return; } - if (gcov_read_unsigned (file, &magic) - || gcov_read_unsigned (file, &version)) + if (gcov_read_unsigned (&magic) || gcov_read_unsigned (&version)) { read_error:; - printf ("%s:read error at %ld\n", filename, ftell (file)); - fclose (file); + printf ("%s:read error at %lu\n", filename, gcov_save_position ()); + gcov_close (); return; } @@ -174,7 +172,7 @@ dump_file (filename) else { printf ("%s:not a gcov file\n", filename); - fclose (file); + gcov_close (); return; } for (ix = 4; ix--; expected >>= 8, version >>= 8, magic >>= 8) @@ -189,14 +187,13 @@ dump_file (filename) printf ("%s:warning:current version is `%.4s'\n", filename, e); } - while (!gcov_read_unsigned (file, &tag) - && !gcov_read_unsigned (file, &length)) + while (!gcov_read_unsigned (&tag) && !gcov_read_unsigned (&length)) { tag_format_t const *format; unsigned tag_depth; long base, end; - base = gcov_save_position (file); + base = gcov_save_position (); if (!tag) tag_depth = depth; @@ -234,11 +231,11 @@ dump_file (filename) print_prefix (filename, tag_depth); printf ("%08x:%4u:%s", tag, length, format->name); if (format->proc) - if ((*format->proc) (filename, file, tag, length)) + if ((*format->proc) (filename, tag, length)) goto read_error; printf ("\n"); - end = gcov_save_position (file); - gcov_resync (file, base, length); + end = gcov_save_position (); + gcov_resync (base, length); if (format->proc && end != base + (long)length) { if (end > base + (long)length) @@ -249,35 +246,44 @@ dump_file (filename) filename, length - (end - base)); } } - if (!feof (file)) + if (!gcov_eof ()) goto read_error; - fclose (file); + gcov_close (); } static int -tag_function (filename, file, tag, length) +tag_function (filename, tag, length) const char *filename ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; unsigned tag ATTRIBUTE_UNUSED; unsigned length ATTRIBUTE_UNUSED; { char *name = NULL; unsigned checksum; + char *src = NULL; + unsigned lineno = 0; + unsigned long pos = gcov_save_position (); + + if (gcov_read_string (&name) + || gcov_read_unsigned (&checksum)) + return 1; - if (gcov_read_string (file, &name, NULL) - || gcov_read_unsigned (file, &checksum)) + if (gcov_save_position () - pos != length + && (gcov_read_string (&src) + || gcov_read_unsigned (&lineno))) return 1; printf (" `%s' checksum=0x%08x", name, checksum); + if (src) + printf (" %s:%u", src, lineno); free (name); + free (src); return 0; } static int -tag_blocks (filename, file, tag, length) +tag_blocks (filename, tag, length) const char *filename ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; unsigned tag ATTRIBUTE_UNUSED; unsigned length ATTRIBUTE_UNUSED; { @@ -292,7 +298,7 @@ tag_blocks (filename, file, tag, length) for (ix = 0; ix != n_blocks; ix++) { unsigned flags; - if (gcov_read_unsigned (file, &flags)) + if (gcov_read_unsigned (&flags)) return 1; if (!(ix & 7)) printf ("\n%s:\t\t%u", filename, ix); @@ -301,15 +307,14 @@ tag_blocks (filename, file, tag, length) } else - gcov_skip (file, n_blocks * 4); + gcov_skip (n_blocks * 4); return 0; } static int -tag_arcs (filename, file, tag, length) +tag_arcs (filename, tag, length) const char *filename ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; unsigned tag ATTRIBUTE_UNUSED; unsigned length ATTRIBUTE_UNUSED; { @@ -321,15 +326,14 @@ tag_arcs (filename, file, tag, length) unsigned ix; unsigned blockno; - if (gcov_read_unsigned (file, &blockno)) + if (gcov_read_unsigned (&blockno)) return 1; for (ix = 0; ix != n_arcs; ix++) { unsigned dst, flags; - if (gcov_read_unsigned (file, &dst) - || gcov_read_unsigned (file, &flags)) + if (gcov_read_unsigned (&dst) || gcov_read_unsigned (&flags)) return 1; if (!(ix & 3)) printf ("\n%s:\t\t%u:", filename, blockno); @@ -337,15 +341,14 @@ tag_arcs (filename, file, tag, length) } } else - gcov_skip (file, 4 + n_arcs * 8); + gcov_skip (4 + n_arcs * 8); return 0; } static int -tag_lines (filename, file, tag, length) +tag_lines (filename, tag, length) const char *filename ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; unsigned tag ATTRIBUTE_UNUSED; unsigned length ATTRIBUTE_UNUSED; { @@ -355,21 +358,21 @@ tag_lines (filename, file, tag, length) unsigned blockno; char const *sep = NULL; - if (gcov_read_unsigned (file, &blockno)) + if (gcov_read_unsigned (&blockno)) return 1; while (1) { unsigned lineno; - if (gcov_read_unsigned (file, &lineno)) + if (gcov_read_unsigned (&lineno)) { free (source); return 1; } if (!lineno) { - if (gcov_read_string (file, &source, NULL)) + if (gcov_read_string (&source)) return 1; if (!source) break; @@ -394,15 +397,14 @@ tag_lines (filename, file, tag, length) } } else - gcov_skip (file, length); + gcov_skip (length); return 0; } static int -tag_arc_counts (filename, file, tag, length) +tag_arc_counts (filename, tag, length) const char *filename ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; unsigned tag ATTRIBUTE_UNUSED; unsigned length ATTRIBUTE_UNUSED; { @@ -417,7 +419,7 @@ tag_arc_counts (filename, file, tag, length) { gcov_type count; - if (gcov_read_counter (file, &count)) + if (gcov_read_counter (&count)) return 1; if (!(ix & 7)) printf ("\n%s:\t\t%u", filename, ix); @@ -426,21 +428,20 @@ tag_arc_counts (filename, file, tag, length) } } else - gcov_skip (file, n_counts * 8); + gcov_skip (n_counts * 8); return 0; } static int -tag_summary (filename, file, tag, length) +tag_summary (filename, tag, length) const char *filename ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; unsigned tag ATTRIBUTE_UNUSED; unsigned length ATTRIBUTE_UNUSED; { struct gcov_summary summary; - if (gcov_read_summary (file, &summary)) + if (gcov_read_summary (&summary)) return 1; printf (" checksum=0x%08x", summary.checksum); |