From 6cb7ba7ed5e515a7ae4a286c25f8adf13b01349a Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 13 Feb 2012 06:06:13 +0100 Subject: libmach: use correct kernel base, kprof: use kernel base from libmach (from applied/kprof patch) --- sys/src/cmd/kprof.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'sys/src/cmd/kprof.c') 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)); -- cgit v1.2.3