/* 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.
/* 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)
{
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)
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"),
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
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);
}
}
}
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
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]));
}
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;
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]));
}
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)
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);
next bin. */
static void
-scale_and_align_entries ()
+scale_and_align_entries (void)
{
Sym *sym;
bfd_vma bin_of_entry;
bin_count));
total_time += count_time;
- /* Credit all symbols that are covered by bin I. */
- /* PR gprof/13325: Make sure that J does not go below I. */
+ /* 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;
/* Calls 'hist_assign_sampes_1' for all histogram records read so far. */
void
-hist_assign_samples ()
+hist_assign_samples (void)
{
unsigned i;
for (i = 0; i < num_histograms; ++i)
hist_assign_samples_1 (&histograms[i]);
-
+
}
/* Print header for flag histogram profile. */
/* Print the flat histogram profile. */
void
-hist_print ()
+hist_print (void)
{
Sym **time_sorted_syms, *top_dog, *sym;
unsigned int sym_index;
{
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;
}
}
if (histograms[i].lowpc <= address && address < histograms[i].highpc)
return 1;
- return 0;
+ return 0;
}
#if ! defined(min)
if (histograms[i].lowpc <= pc && pc < histograms[i].highpc)
return &histograms[i];
}
- return 0;
+ return 0;
}