X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gprof%2Fbasic_blocks.c;h=e1a3b1a508b81d9cb4c71049bf1966360a872a9d;hb=02eba61aa6cad683e96cf13f483adc04982c0c2b;hp=74f29a0eb197f2802949c4abfc49a7c68f875915;hpb=1355568ab48a9dcfd079493f7deb5e1c5e88015b;p=deliverable%2Fbinutils-gdb.git diff --git a/gprof/basic_blocks.c b/gprof/basic_blocks.c index 74f29a0eb1..e1a3b1a508 100644 --- a/gprof/basic_blocks.c +++ b/gprof/basic_blocks.c @@ -2,13 +2,13 @@ of basic-block info to/from gmon.out; computing and formatting of basic-block related statistics. - Copyright 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of GNU Binutils. This program 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 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -18,11 +18,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ -#include "libiberty.h" #include "gprof.h" +#include "libiberty.h" +#include "filenames.h" #include "basic_blocks.h" #include "corefile.h" #include "gmon_io.h" @@ -32,13 +33,13 @@ #include "symtab.h" #include "sym_ids.h" -static int cmp_bb PARAMS ((const PTR, const PTR)); -static int cmp_ncalls PARAMS ((const PTR, const PTR)); -static void fskip_string PARAMS ((FILE *)); -static void annotate_with_count PARAMS ((char *, unsigned int, int, PTR)); +static int cmp_bb (const PTR, const PTR); +static int cmp_ncalls (const PTR, const PTR); +static void fskip_string (FILE *); +static void annotate_with_count (char *, unsigned int, int, PTR); /* Default option values: */ -boolean bb_annotate_all_lines = false; +bfd_boolean bb_annotate_all_lines = FALSE; unsigned long bb_min_calls = 1; int bb_table_length = 10; @@ -52,9 +53,7 @@ static long num_lines_executed; number, and address (in that order). */ static int -cmp_bb (lp, rp) - const PTR lp; - const PTR rp; +cmp_bb (const PTR lp, const PTR rp) { int r; const Sym *left = *(const Sym **) lp; @@ -62,7 +61,7 @@ cmp_bb (lp, rp) if (left->file && right->file) { - r = strcmp (left->file->name, right->file->name); + r = filename_cmp (left->file->name, right->file->name); if (r) return r; @@ -83,9 +82,7 @@ cmp_bb (lp, rp) /* Helper for sorting. Order basic blocks in decreasing number of calls, ties are broken in increasing order of line numbers. */ static int -cmp_ncalls (lp, rp) - const PTR lp; - const PTR rp; +cmp_ncalls (const PTR lp, const PTR rp) { const Sym *left = *(const Sym **) lp; const Sym *right = *(const Sym **) rp; @@ -105,8 +102,7 @@ cmp_ncalls (lp, rp) /* Skip over variable length string. */ static void -fskip_string (fp) - FILE *fp; +fskip_string (FILE *fp) { int ch; @@ -121,11 +117,9 @@ fskip_string (fp) of file IFP and is provided for formatting error-messages only. */ void -bb_read_rec (ifp, filename) - FILE *ifp; - const char *filename; +bb_read_rec (FILE *ifp, const char *filename) { - int nblocks, b; + unsigned int nblocks, b; bfd_vma addr, ncalls; Sym *sym; @@ -150,8 +144,8 @@ bb_read_rec (ifp, filename) care about anymore. */ if ((fread (&ncalls, sizeof (ncalls), 1, ifp) != 1) || (fread (&addr, sizeof (addr), 1, ifp) != 1) - || (fskip_string (ifp), false) - || (fskip_string (ifp), false) + || (fskip_string (ifp), FALSE) + || (fskip_string (ifp), FALSE) || (fread (&line_num, sizeof (line_num), 1, ifp) != 1)) { perror (filename); @@ -193,11 +187,11 @@ bb_read_rec (ifp, filename) } else { - static boolean user_warned = false; + static bfd_boolean user_warned = FALSE; if (!user_warned) { - user_warned = true; + user_warned = TRUE; fprintf (stderr, _("%s: warning: ignoring basic-block exec counts (use -l or --line)\n"), whoami); @@ -211,9 +205,7 @@ bb_read_rec (ifp, filename) is the name of OFP and is provided for producing error-messages only. */ void -bb_write_blocks (ofp, filename) - FILE *ofp; - const char *filename; +bb_write_blocks (FILE *ofp, const char *filename) { unsigned int nblocks = 0; Sym *sym; @@ -256,13 +248,13 @@ bb_write_blocks (ofp, filename) :: (: */ void -print_exec_counts () +print_exec_counts (void) { Sym **sorted_bbs, *sym; unsigned int i, j, len; if (first_output) - first_output = false; + first_output = FALSE; else printf ("\f\n"); @@ -289,6 +281,8 @@ print_exec_counts () for (i = 0; i < len; ++i) { + sym = sorted_bbs [i]; + if (sym->ncalls > 0 || ! ignore_zeros) { /* FIXME: This only works if bfd_vma is unsigned long. */ @@ -317,19 +311,15 @@ print_exec_counts () line of a file in sequential order. Global variable bb_annotate_all_lines enables execution count - compression (counts are supressed if identical to the last one) + compression (counts are suppressed if identical to the last one) and prints counts on all executed lines. Otherwise, print all basic-block execution counts exactly once on the line that starts the basic-block. */ static void -annotate_with_count (buf, width, line_num, arg) - char *buf; - unsigned int width; - int line_num; - PTR arg; +annotate_with_count (char *buf, unsigned int width, int line_num, PTR arg) { - Source_File *sf = arg; + Source_File *sf = (Source_File *) arg; Sym *b; unsigned int i; static unsigned long last_count; @@ -338,7 +328,7 @@ annotate_with_count (buf, width, line_num, arg) b = NULL; if (line_num <= sf->num_lines) - b = sf->line[line_num - 1]; + b = (Sym *) sf->line[line_num - 1]; if (!b) { @@ -469,7 +459,7 @@ annotate_with_count (buf, width, line_num, arg) regarding that source file are printed. */ void -print_annotated_source () +print_annotated_source (void) { Sym *sym, *line_stats, *new_line; Source_File *sf; @@ -498,7 +488,7 @@ print_annotated_source () { if (sf->num_lines > 0) { - sf->line = (void *) xmalloc (sf->num_lines * sizeof (sf->line[0])); + sf->line = (void **) xmalloc (sf->num_lines * sizeof (sf->line[0])); memset (sf->line, 0, sf->num_lines * sizeof (sf->line[0])); } } @@ -512,7 +502,7 @@ print_annotated_source () && !sym_lookup (&syms[EXCL_ANNO], sym->addr)))) { sym->file->ncalls += sym->ncalls; - line_stats = sym->file->line[sym->line_num - 1]; + line_stats = (Sym *) sym->file->line[sym->line_num - 1]; if (!line_stats) { @@ -562,7 +552,7 @@ print_annotated_source () for (i = 0; i < table_len; ++i) { - sym = sf->line[i]; + sym = (Sym *) sf->line[i]; if (!sym || sym->ncalls == 0) break;