breakpoints/19546: Fix crash after updating breakpoints
[deliverable/binutils-gdb.git] / gprof / basic_blocks.c
index 8f560b4b2f606103d6381121399bf2801add6247..dac093af936e55c440e33571a734fb9dc99e4e3c 100644 (file)
@@ -2,13 +2,13 @@
    of basic-block info to/from gmon.out; computing and formatting of
    basic-block related statistics.
 
    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-2016 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
 
    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,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    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.  */
 \f
 \f
-#include <stdio.h>
+#include "gprof.h"
+#include "libiberty.h"
+#include "filenames.h"
 #include "basic_blocks.h"
 #include "corefile.h"
 #include "gmon_io.h"
 #include "gmon_out.h"
 #include "basic_blocks.h"
 #include "corefile.h"
 #include "gmon_io.h"
 #include "gmon_out.h"
-#include "gprof.h"
-#include "libiberty.h"
+#include "search_list.h"
 #include "source.h"
 #include "source.h"
+#include "symtab.h"
 #include "sym_ids.h"
 #include "sym_ids.h"
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
+
+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:  */
 
 /* 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;
 
 unsigned long bb_min_calls = 1;
 int bb_table_length = 10;
 
@@ -49,7 +53,7 @@ static long num_lines_executed;
    number, and address (in that order).  */
 
 static int
    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;
 {
   int r;
   const Sym *left = *(const Sym **) lp;
@@ -57,7 +61,7 @@ DEFUN (cmp_bb, (lp, rp), const void *lp AND const void *rp)
 
   if (left->file && right->file)
     {
 
   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;
 
       if (r)
        return r;
@@ -78,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
 /* 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;
 {
   const Sym *left = *(const Sym **) lp;
   const Sym *right = *(const Sym **) rp;
@@ -98,7 +102,7 @@ DEFUN (cmp_ncalls, (lp, rp), const void *lp AND const void *rp)
 
 /* Skip over variable length string.  */
 static void
 
 /* Skip over variable length string.  */
 static void
-DEFUN (fskip_string, (fp), FILE * fp)
+fskip_string (FILE *fp)
 {
   int ch;
 
 {
   int ch;
 
@@ -113,9 +117,9 @@ DEFUN (fskip_string, (fp), FILE * fp)
    of file IFP and is provided for formatting error-messages only.  */
 
 void
    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;
 
   bfd_vma addr, ncalls;
   Sym *sym;
 
@@ -183,7 +187,7 @@ DEFUN (bb_read_rec, (ifp, filename), FILE * ifp AND const char *filename)
        }
       else
        {
        }
       else
        {
-         static bool user_warned = FALSE;
+         static bfd_boolean user_warned = FALSE;
 
          if (!user_warned)
            {
 
          if (!user_warned)
            {
@@ -201,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
    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;
 
   Sym *sym;
   int i;
 
@@ -229,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])
       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);
            {
              perror (filename);
              done (1);
@@ -244,10 +248,10 @@ DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename)
        <filename>:<line-number>: (<function-name>:<bb-addr): <ncalls>  */
 
 void
        <filename>:<line-number>: (<function-name>:<bb-addr): <ncalls>  */
 
 void
-DEFUN_VOID (print_exec_counts)
+print_exec_counts ()
 {
   Sym **sorted_bbs, *sym;
 {
   Sym **sorted_bbs, *sym;
-  int i, j, len;
+  unsigned int i, j, len;
 
   if (first_output)
     first_output = FALSE;
 
   if (first_output)
     first_output = FALSE;
@@ -277,6 +281,8 @@ DEFUN_VOID (print_exec_counts)
 
   for (i = 0; i < len; ++i)
     {
 
   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.  */
       if (sym->ncalls > 0 || ! ignore_zeros)
        {
          /* FIXME: This only works if bfd_vma is unsigned long.  */
@@ -311,19 +317,18 @@ DEFUN_VOID (print_exec_counts)
    that starts the basic-block.  */
 
 static void
    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;
   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)
   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)
     {
 
   if (!b)
     {
@@ -337,7 +342,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
       char *p;
       unsigned long ncalls;
       int ncalls_set;
       char *p;
       unsigned long ncalls;
       int ncalls_set;
-      int len;
+      unsigned int len;
 
       ++num_executable_lines;
 
 
       ++num_executable_lines;
 
@@ -413,7 +418,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
 
       if (! ncalls_set)
        {
 
       if (! ncalls_set)
        {
-         int c;
+         unsigned int c;
 
          for (c = 0; c < width; c++)
            buf[c] = ' ';
 
          for (c = 0; c < width; c++)
            buf[c] = ' ';
@@ -440,7 +445,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
        }
       else
        {
        }
       else
        {
-         int c;
+         unsigned int c;
 
          strcpy (buf + width - len, tmpbuf);
          for (c = 0; c < width - len; ++c)
 
          strcpy (buf + width - len, tmpbuf);
          for (c = 0; c < width - len; ++c)
@@ -454,7 +459,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
    regarding that source file are printed.  */
 
 void
    regarding that source file are printed.  */
 
 void
-DEFUN_VOID (print_annotated_source)
+print_annotated_source ()
 {
   Sym *sym, *line_stats, *new_line;
   Source_File *sf;
 {
   Sym *sym, *line_stats, *new_line;
   Source_File *sf;
@@ -483,7 +488,7 @@ DEFUN_VOID (print_annotated_source)
     {
       if (sf->num_lines > 0)
        {
     {
       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]));
        }
     }
          memset (sf->line, 0, sf->num_lines * sizeof (sf->line[0]));
        }
     }
@@ -497,7 +502,7 @@ DEFUN_VOID (print_annotated_source)
                  && !sym_lookup (&syms[EXCL_ANNO], sym->addr))))
        {
          sym->file->ncalls += sym->ncalls;
                  && !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)
            {
 
          if (!line_stats)
            {
@@ -547,7 +552,7 @@ DEFUN_VOID (print_annotated_source)
 
          for (i = 0; i < table_len; ++i)
            {
 
          for (i = 0; i < table_len; ++i)
            {
-             sym = sf->line[i];
+             sym = (Sym *) sf->line[i];
 
              if (!sym || sym->ncalls == 0)
                  break;
 
              if (!sym || sym->ncalls == 0)
                  break;
This page took 0.026325 seconds and 4 git commands to generate.