diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-13 06:06:13 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-13 06:06:13 +0100 |
commit | 6cb7ba7ed5e515a7ae4a286c25f8adf13b01349a (patch) | |
tree | 2ab4d12064b2ade1b546afacef7fbea756111c72 /sys/src/cmd/kprof.c | |
parent | c9f5d14ea6948355e760bb55b281640a3ebbca55 (diff) |
libmach: use correct kernel base, kprof: use kernel base from libmach (from applied/kprof patch)
Diffstat (limited to 'sys/src/cmd/kprof.c')
-rw-r--r-- | sys/src/cmd/kprof.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/src/cmd/kprof.c b/sys/src/cmd/kprof.c index e3cd5cb61..4dab86dc1 100644 --- a/sys/src/cmd/kprof.c +++ b/sys/src/cmd/kprof.c @@ -94,19 +94,25 @@ main(int argc, char *argv[]) exits(0); if (!textsym(&s, 0)) error(0, "no text symbols"); - tbase = s.value & ~(mach->pgsize-1); /* align down to page */ - print("KTZERO %.8llux\n", tbase); + + tbase = mach->kbase; + if(tbase != s.value & ~0xFFF) + print("warning: kbase %.8llux != tbase %.8llux\n", + tbase, s.value&~0xFFF); + print("KTZERO %.8llux PGSIZE %dKb\n", tbase, mach->pgsize/1024); /* * Accumulate counts for each function */ cp = 0; k = 0; - for (i = 0, j = (s.value-tbase)/PCRES+2; j < n; i++) { + for (i = 0, j = 2; j < n; i++) { name = s.name; /* save name */ if (!textsym(&s, i)) /* get next symbol */ break; + s.value -= tbase; + s.value /= PCRES; sum = 0; - while (j < n && j*PCRES < s.value-tbase) + while (j < n && j < s.value) sum += data[j++]; if (sum) { cp = realloc(cp, (k+1)*sizeof(struct COUNTER)); |