Remove cleanups from tracefile.c
[deliverable/binutils-gdb.git] / gprof / gmon_io.c
index 1abf427bafc8eb7f1de05c34d85978877c65141a..fb12fde681c0d9fcc5de6f9df238f6be437ddd5a 100644 (file)
@@ -1,13 +1,12 @@
 /* gmon_io.c - Input and output from/to gmon.out files.
 
 /* gmon_io.c - Input and output from/to gmon.out files.
 
-   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1999-2018 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,
@@ -21,6 +20,7 @@
    02110-1301, USA.  */
 \f
 #include "gprof.h"
    02110-1301, USA.  */
 \f
 #include "gprof.h"
+#include "binary-io.h"
 #include "search_list.h"
 #include "source.h"
 #include "symtab.h"
 #include "search_list.h"
 #include "source.h"
 #include "symtab.h"
@@ -61,7 +61,7 @@ int gmon_input = 0;
 int gmon_file_version = 0;     /* 0 == old (non-versioned) file format.  */
 
 static enum gmon_ptr_size
 int gmon_file_version = 0;     /* 0 == old (non-versioned) file format.  */
 
 static enum gmon_ptr_size
-gmon_get_ptr_size ()
+gmon_get_ptr_size (void)
 {
   int size;
 
 {
   int size;
 
@@ -87,7 +87,7 @@ gmon_get_ptr_size ()
 }
 
 static enum gmon_ptr_signedness
 }
 
 static enum gmon_ptr_signedness
-gmon_get_ptr_signedness ()
+gmon_get_ptr_signedness (void)
 {
   int sext;
 
 {
   int sext;
 
@@ -300,9 +300,7 @@ gmon_out_read (const char *filename)
   if (strcmp (filename, "-") == 0)
     {
       ifp = stdin;
   if (strcmp (filename, "-") == 0)
     {
       ifp = stdin;
-#ifdef SET_BINARY
       SET_BINARY (fileno (stdin));
       SET_BINARY (fileno (stdin));
-#endif
     }
   else
     {
     }
   else
     {
@@ -493,12 +491,15 @@ gmon_out_read (const char *filename)
 
       if (!histograms)
        {
 
       if (!histograms)
        {
-         histograms = xmalloc (sizeof (struct histogram));
+         num_histograms = 1;
+         histograms = (struct histogram *) xmalloc (sizeof (struct histogram));
          histograms->lowpc = tmp.low_pc;
          histograms->highpc = tmp.high_pc;
          histograms->num_bins = hist_num_bins;
          histograms->lowpc = tmp.low_pc;
          histograms->highpc = tmp.high_pc;
          histograms->num_bins = hist_num_bins;
-         histograms->sample = xmalloc (hist_num_bins * sizeof (int));
-         memset (histograms->sample, 0, 
+         hist_scale = (double)((tmp.high_pc - tmp.low_pc) / sizeof (UNIT))
+           / hist_num_bins;
+         histograms->sample = (int *) xmalloc (hist_num_bins * sizeof (int));
+         memset (histograms->sample, 0,
                  hist_num_bins * sizeof (int));
        }
 
                  hist_num_bins * sizeof (int));
        }
 
@@ -531,7 +532,7 @@ gmon_out_read (const char *filename)
              done (1);
            }
 
              done (1);
            }
 
-         histograms->sample[i] 
+         histograms->sample[i]
            += bfd_get_16 (core_bfd, (bfd_byte *) raw_bin_count);
        }
 
            += bfd_get_16 (core_bfd, (bfd_byte *) raw_bin_count);
        }
 
@@ -549,8 +550,6 @@ gmon_out_read (const char *filename)
          cg_tally (from_pc, self_pc, count);
        }
 
          cg_tally (from_pc, self_pc, count);
        }
 
-      fclose (ifp);
-
       if (hz == HZ_WRONG)
        {
          /* How many ticks per second?  If we can't tell, report
       if (hz == HZ_WRONG)
        {
          /* How many ticks per second?  If we can't tell, report
@@ -571,6 +570,9 @@ gmon_out_read (const char *filename)
       done (1);
     }
 
       done (1);
     }
 
+  if (ifp != stdin)
+    fclose (ifp);
+
   if (output_style & STYLE_GMON_INFO)
     {
       printf (_("File `%s' (version %d) contains:\n"),
   if (output_style & STYLE_GMON_INFO)
     {
       printf (_("File `%s' (version %d) contains:\n"),
@@ -669,7 +671,7 @@ gmon_out_write (const char *filename)
            case ptr_64bit:
              hdrsize = GMON_HDRSIZE_OLDBSD_64;
              /* FIXME: Checking host compiler defines here means that we can't
            case ptr_64bit:
              hdrsize = GMON_HDRSIZE_OLDBSD_64;
              /* FIXME: Checking host compiler defines here means that we can't
-                use a cross gprof alpha OSF.  */ 
+                use a cross gprof alpha OSF.  */
 #if defined(__alpha__) && defined (__osf__)
              padsize = 4;
 #endif
 #if defined(__alpha__) && defined (__osf__)
              padsize = 4;
 #endif
@@ -681,7 +683,7 @@ gmon_out_write (const char *filename)
         old BSD and 4.4BSD formats.  */
       if (gmon_io_write_vma (ofp, histograms->lowpc)
           || gmon_io_write_vma (ofp, histograms->highpc)
         old BSD and 4.4BSD formats.  */
       if (gmon_io_write_vma (ofp, histograms->lowpc)
           || gmon_io_write_vma (ofp, histograms->highpc)
-          || gmon_io_write_32 (ofp, histograms->num_bins 
+          || gmon_io_write_32 (ofp, histograms->num_bins
                               * sizeof (UNIT) + hdrsize))
        {
          perror (filename);
                               * sizeof (UNIT) + hdrsize))
        {
          perror (filename);
This page took 0.024383 seconds and 4 git commands to generate.