This is an automated email from Gerrit.

Hsiangkai Wang (hsiang...@gmail.com) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/1607

-- gerrit

commit 483c163ce9627c82c6cc425dc7a879e1607bb16c
Author: Hsiangkai Wang <hsiang...@gmail.com>
Date:   Fri Aug 30 13:35:08 2013 +0800

    target: Correct profiling calculation
    
    1. high_pc should be (maximum sample + 1) (Refer to gprof source code)
    2. bucket index should be
    
         sample offset
        --------------- x (number of bucket)
         sample range
    
    For example, if minimum sample is 0 and maximum sample is 5
    and the number of bucket is 3.
    
    a = sampled_address - 0
    b = 3
    c = 6
    (a, b, c refer to source code variables)
    
    sampled_address = 0, => a = 0, => bucket_index = 0
    sampled_address = 1, => a = 1, => bucket_index = 0
    sampled_address = 2, => a = 2, => bucket_index = 1
    sampled_address = 3, => a = 3, => bucket_index = 1
    sampled_address = 4, => a = 4, => bucket_index = 2
    sampled_address = 5, => a = 5, => bucket_index = 2
    
    Change-Id: Ia9fa0e4d9c7183e3e9d7ceaf73e63729f07aa2ce
    Signed-off-by: Hsiangkai Wang <hsiang...@gmail.com>

diff --git a/src/target/target.c b/src/target/target.c
index 72339a1..94520f0 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -3440,7 +3440,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. */
@@ -3456,8 +3460,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]++;
        }

-- 

------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to