gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gprof / hist.c
index 25364b215e823fe633a7823f0d7a895db547a3ee..55dc2007c4a39be086d7e2b579b50c70ca90cd7a 100644 (file)
@@ -1,7 +1,6 @@
 /* hist.c  -  Histogram related operations.
 
-   Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2009
-   Free Software Foundation, Inc.
+   Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
@@ -81,14 +80,14 @@ SItab[] =
 
 /* Reads just the header part of histogram record into
    *RECORD from IFP.  FILENAME is the name of IFP and
-   is provided for formatting error messages only.  
+   is provided for formatting error messages only.
 
    If FIRST is non-zero, sets global variables HZ, HIST_DIMENSION,
    HIST_DIMENSION_ABBREV, HIST_SCALE.  If FIRST is zero, checks
    that the new histogram is compatible with already-set values
    of those variables and emits an error if that's not so.  */
 static void
-read_histogram_header (histogram *record, 
+read_histogram_header (histogram *record,
                       FILE *ifp, const char *filename,
                       int first)
 {
@@ -110,7 +109,7 @@ read_histogram_header (histogram *record,
       done (1);
     }
 
-  n_hist_scale = (double)((record->highpc - record->lowpc) / sizeof (UNIT)) 
+  n_hist_scale = (double)((record->highpc - record->lowpc) / sizeof (UNIT))
     / record->num_bins;
 
   if (first)
@@ -125,13 +124,13 @@ read_histogram_header (histogram *record,
       hz = profrate;
       memcpy (hist_dimension, n_hist_dimension, 15);
       hist_dimension_abbrev = n_hist_dimension_abbrev;
-      hist_scale = n_hist_scale;      
+      hist_scale = n_hist_scale;
     }
   else
     {
       if (strncmp (n_hist_dimension, hist_dimension, 15) != 0)
        {
-         fprintf (stderr, 
+         fprintf (stderr,
                   _("%s: dimension unit changed between histogram records\n"
                     "%s: from '%s'\n"
                     "%s: to '%s'\n"),
@@ -141,12 +140,12 @@ read_histogram_header (histogram *record,
 
       if (n_hist_dimension_abbrev != hist_dimension_abbrev)
        {
-         fprintf (stderr, 
+         fprintf (stderr,
                   _("%s: dimension abbreviation changed between histogram records\n"
                     "%s: from '%c'\n"
                     "%s: to '%c'\n"),
                   whoami, whoami, hist_dimension_abbrev, whoami, n_hist_dimension_abbrev);
-         done (1);       
+         done (1);
        }
 
       /* The only reason we require the same scale for histograms is that
@@ -155,10 +154,10 @@ read_histogram_header (histogram *record,
         things for different functions.  */
       if (fabs (hist_scale - n_hist_scale) > 0.000001)
        {
-         fprintf (stderr, 
+         fprintf (stderr,
                   _("%s: different scales in histogram records"),
                   whoami);
-         done (1);      
+         done (1);
        }
     }
 }
@@ -192,10 +191,10 @@ hist_read_rec (FILE * ifp, const char *filename)
       hist_clip_symbol_address (&lowpc, &highpc);
       if (lowpc != highpc)
        {
-         fprintf (stderr, 
+         fprintf (stderr,
                   _("%s: overlapping histogram records\n"),
                   whoami);
-         done (1);      
+         done (1);
        }
 
       /* This is new record.  Add it to global array and allocate space for
@@ -204,10 +203,10 @@ hist_read_rec (FILE * ifp, const char *filename)
           xrealloc (histograms, sizeof (histogram) * (num_histograms + 1));
       memcpy (histograms + num_histograms,
              &n_record, sizeof (histogram));
-      record = &histograms[num_histograms];      
+      record = &histograms[num_histograms];
       ++num_histograms;
 
-      record->sample = (int *) xmalloc (record->num_bins 
+      record->sample = (int *) xmalloc (record->num_bins
                                        * sizeof (record->sample[0]));
       memset (record->sample, 0, record->num_bins * sizeof (record->sample[0]));
     }
@@ -218,9 +217,9 @@ hist_read_rec (FILE * ifp, const char *filename)
 
   DBG (SAMPLEDEBUG,
        printf ("[hist_read_rec] n_lowpc 0x%lx n_highpc 0x%lx ncnt %u\n",
-              (unsigned long) record->lowpc, (unsigned long) record->highpc, 
+              (unsigned long) record->lowpc, (unsigned long) record->highpc,
                record->num_bins));
-           
+
   for (i = 0; i < record->num_bins; ++i)
     {
       UNIT count;
@@ -234,8 +233,8 @@ hist_read_rec (FILE * ifp, const char *filename)
       record->sample[i] += bfd_get_16 (core_bfd, (bfd_byte *) & count[0]);
       DBG (SAMPLEDEBUG,
           printf ("[hist_read_rec] 0x%lx: %u\n",
-                  (unsigned long) (record->lowpc 
-                                    + i * (record->highpc - record->lowpc) 
+                  (unsigned long) (record->lowpc
+                                    + i * (record->highpc - record->lowpc)
                                     / record->num_bins),
                   record->sample[i]));
     }
@@ -256,7 +255,7 @@ hist_write_hist (FILE * ofp, const char *filename)
       histogram *record = &histograms[r];
 
       /* Write header.  */
-      
+
       if (gmon_io_write_8 (ofp, GMON_TAG_TIME_HIST)
          || gmon_io_write_vma (ofp, record->lowpc)
          || gmon_io_write_vma (ofp, record->highpc)
@@ -268,11 +267,11 @@ hist_write_hist (FILE * ofp, const char *filename)
          perror (filename);
          done (1);
        }
-      
+
       for (i = 0; i < record->num_bins; ++i)
        {
          bfd_put_16 (core_bfd, (bfd_vma) record->sample[i], (bfd_byte *) &count[0]);
-         
+
          if (fwrite (&count[0], sizeof (count), 1, ofp) != 1)
            {
              perror (filename);
@@ -290,7 +289,7 @@ hist_write_hist (FILE * ofp, const char *filename)
    next bin.  */
 
 static void
-scale_and_align_entries ()
+scale_and_align_entries (void)
 {
   Sym *sym;
   bfd_vma bin_of_entry;
@@ -365,13 +364,13 @@ hist_assign_samples_1 (histogram *r)
   bfd_vma sym_low_pc, sym_high_pc;
   bfd_vma overlap, addr;
   unsigned int bin_count;
-  unsigned int i, j;
+  unsigned int i, j, k;
   double count_time, credit;
 
   bfd_vma lowpc = r->lowpc / sizeof (UNIT);
 
   /* Iterate over all sample bins.  */
-  for (i = 0, j = 1; i < r->num_bins; ++i)
+  for (i = 0, k = 1; i < r->num_bins; ++i)
     {
       bin_count = r->sample[i];
       if (! bin_count)
@@ -389,8 +388,11 @@ hist_assign_samples_1 (histogram *r)
                    bin_count));
       total_time += count_time;
 
-      /* Credit all symbols that are covered by bin I.  */
-      for (j = j - 1; j < symtab.len; ++j)
+      /* Credit all symbols that are covered by bin I.
+
+         PR gprof/13325: Make sure that K does not get decremented
+        and J will never be less than 0.  */
+      for (j = k - 1; j < symtab.len; k = ++j)
        {
          sym_low_pc = symtab.base[j].hist.scaled_addr;
          sym_high_pc = symtab.base[j + 1].hist.scaled_addr;
@@ -443,7 +445,7 @@ hist_assign_samples_1 (histogram *r)
 
 /* Calls 'hist_assign_sampes_1' for all histogram records read so far. */
 void
-hist_assign_samples ()
+hist_assign_samples (void)
 {
   unsigned i;
 
@@ -451,7 +453,7 @@ hist_assign_samples ()
 
   for (i = 0; i < num_histograms; ++i)
     hist_assign_samples_1 (&histograms[i]);
-  
+
 }
 
 /* Print header for flag histogram profile.  */
@@ -560,7 +562,7 @@ cmp_time (const PTR lp, const PTR rp)
 /* Print the flat histogram profile.  */
 
 void
-hist_print ()
+hist_print (void)
 {
   Sym **time_sorted_syms, *top_dog, *sym;
   unsigned int sym_index;
@@ -635,7 +637,7 @@ hist_print ()
            {
              double scaled_value = SItab[log_scale].scale * top_time;
 
-             if (scaled_value >= 1.0 && scaled_value < 1000.0) 
+             if (scaled_value >= 1.0 && scaled_value < 1000.0)
                break;
            }
        }
@@ -673,7 +675,7 @@ hist_check_address (unsigned address)
     if (histograms[i].lowpc <= address && address < histograms[i].highpc)
       return 1;
 
-  return 0;        
+  return 0;
 }
 
 #if ! defined(min)
@@ -748,5 +750,5 @@ find_histogram_for_pc (bfd_vma pc)
       if (histograms[i].lowpc <= pc && pc < histograms[i].highpc)
        return &histograms[i];
     }
-  return 0;  
+  return 0;
 }
This page took 0.027025 seconds and 4 git commands to generate.