X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gprof%2Fbasic_blocks.c;h=3842924cd0acd5b090d0b79d183fa7502179aaa5;hb=db178f47dd4c9d2882da42a8915018d1fb90ea17;hp=65a662c2058d4a4e128563a1c75999ed6925d9ee;hpb=6d9c411afd0301f0262ff63d6dc59dac38f58e63;p=deliverable%2Fbinutils-gdb.git diff --git a/gprof/basic_blocks.c b/gprof/basic_blocks.c index 65a662c205..3842924cd0 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 Free Software Foundation, Inc. + Copyright (C) 1999-2019 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,8 +33,13 @@ #include "symtab.h" #include "sym_ids.h" +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: */ -bool bb_annotate_all_lines = FALSE; +bfd_boolean bb_annotate_all_lines = FALSE; unsigned long bb_min_calls = 1; int bb_table_length = 10; @@ -47,7 +53,7 @@ static long num_lines_executed; number, and address (in that order). */ static int -DEFUN (cmp_bb, (lp, rp), const void *lp AND const void *rp) +cmp_bb (const PTR lp, const PTR rp) { int r; const Sym *left = *(const Sym **) lp; @@ -55,7 +61,7 @@ DEFUN (cmp_bb, (lp, rp), const void *lp AND const void *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; @@ -76,7 +82,7 @@ DEFUN (cmp_bb, (lp, rp), const void *lp AND const void *rp) /* Helper for sorting. Order basic blocks in decreasing number of calls, ties are broken in increasing order of line numbers. */ static int -DEFUN (cmp_ncalls, (lp, rp), const void *lp AND const void *rp) +cmp_ncalls (const PTR lp, const PTR rp) { const Sym *left = *(const Sym **) lp; const Sym *right = *(const Sym **) rp; @@ -96,7 +102,7 @@ DEFUN (cmp_ncalls, (lp, rp), const void *lp AND const void *rp) /* Skip over variable length string. */ static void -DEFUN (fskip_string, (fp), FILE * fp) +fskip_string (FILE *fp) { int ch; @@ -111,9 +117,9 @@ DEFUN (fskip_string, (fp), FILE * fp) of file IFP and is provided for formatting error-messages only. */ void -DEFUN (bb_read_rec, (ifp, filename), FILE * ifp AND const char *filename) +bb_read_rec (FILE *ifp, const char *filename) { - int nblocks, b; + unsigned int nblocks, b; bfd_vma addr, ncalls; Sym *sym; @@ -181,7 +187,7 @@ DEFUN (bb_read_rec, (ifp, filename), FILE * ifp AND const char *filename) } else { - static bool user_warned = FALSE; + static bfd_boolean user_warned = FALSE; if (!user_warned) { @@ -199,9 +205,9 @@ DEFUN (bb_read_rec, (ifp, filename), FILE * ifp AND const char *filename) is the name of OFP and is provided for producing error-messages only. */ void -DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename) +bb_write_blocks (FILE *ofp, const char *filename) { - int nblocks = 0; + unsigned int nblocks = 0; Sym *sym; int i; @@ -227,7 +233,7 @@ DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename) for (i = 0; i < NBBS && sym->bb_addr[i]; i++) { if (gmon_io_write_vma (ofp, sym->bb_addr[i]) - || gmon_io_write_vma (ofp, sym->bb_calls[i])) + || gmon_io_write_vma (ofp, (bfd_vma) sym->bb_calls[i])) { perror (filename); done (1); @@ -242,10 +248,10 @@ DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename) :: (: */ void -DEFUN_VOID (print_exec_counts) +print_exec_counts (void) { Sym **sorted_bbs, *sym; - int i, j, len; + unsigned int i, j, len; if (first_output) first_output = FALSE; @@ -275,6 +281,8 @@ DEFUN_VOID (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. */ @@ -303,25 +311,24 @@ DEFUN_VOID (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 -DEFUN (annotate_with_count, (buf, width, line_num, arg), - char *buf AND int width AND int line_num AND void *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; - int i; + unsigned int i; static unsigned long last_count; unsigned long last_print = (unsigned long) -1; b = NULL; if (line_num <= sf->num_lines) - b = sf->line[line_num - 1]; + b = (Sym *) sf->line[line_num - 1]; if (!b) { @@ -335,7 +342,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg), char *p; unsigned long ncalls; int ncalls_set; - int len; + unsigned int len; ++num_executable_lines; @@ -411,7 +418,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg), if (! ncalls_set) { - int c; + unsigned int c; for (c = 0; c < width; c++) buf[c] = ' '; @@ -438,7 +445,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg), } else { - int c; + unsigned int c; strcpy (buf + width - len, tmpbuf); for (c = 0; c < width - len; ++c) @@ -452,7 +459,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg), regarding that source file are printed. */ void -DEFUN_VOID (print_annotated_source) +print_annotated_source (void) { Sym *sym, *line_stats, *new_line; Source_File *sf; @@ -481,7 +488,7 @@ DEFUN_VOID (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])); } } @@ -495,7 +502,7 @@ DEFUN_VOID (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) { @@ -545,7 +552,7 @@ DEFUN_VOID (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;