X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Ftarget%2Ftarget.c;h=1ea1a61668c9d059299e6225778138ba92b2f8c8;hb=d4d62ea8a80502f85f1ca92b231da56ef3b84baf;hp=11b12e5e84d4c20eb4e97dd1900571e09bdc5350;hpb=a4bacdcb84f0d0cbd19a8db3833f65445c47904c;p=openocd.git diff --git a/src/target/target.c b/src/target/target.c index 11b12e5e84..1ea1a61668 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -3387,7 +3387,11 @@ static void writeGmon(uint32_t *samples, uint32_t sampleNum, const char *filenam max = samples[i]; } - int addressSpace = (max - min + 1); + /* max should be (largest sample + 1) + * Refer to binutils/gprof/hist.c (find_histogram_for_pc) */ + max++; + + int addressSpace = max - min; assert(addressSpace >= 2); static const uint32_t maxBuckets = 16 * 1024; /* maximum buckets. */ @@ -3403,8 +3407,8 @@ static void writeGmon(uint32_t *samples, uint32_t sampleNum, const char *filenam for (i = 0; i < sampleNum; i++) { uint32_t address = samples[i]; long long a = address - min; - long long b = numBuckets - 1; - long long c = addressSpace - 1; + long long b = numBuckets; + long long c = addressSpace; int index_t = (a * b) / c; /* danger!!!! int32 overflows */ buckets[index_t]++; }