# HG changeset patch # User Francisco J Ballesteros # Date 1322215600 0 # Node ID 453784f0b18e8ba74551cc2e748e8dd152fba815 # Parent 90c834028512ffa093c21cf50b4cf61d5143dc17 kprof: it did not guess correctly the kernel start address, nor did take into account that it should compare addresses using symboladdress>>3 and not using profilingaddress<<3, because that might report the wrong function even if resolution suffices. It now uses libmach kernel start address instead of trying to guess it. the start address for 8 was wrong. R=nixiedev, quanstro CC=nix-dev http://codereview.appspot.com/5415051 diff -r 90c834028512 -r 453784f0b18e sys/src/cmd/kprof.c --- a/sys/src/cmd/kprof.c Sat Nov 19 10:36:00 2011 +0000 +++ b/sys/src/cmd/kprof.c Fri Nov 25 10:06:40 2011 +0000 @@ -94,19 +94,25 @@ 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)); diff -r 90c834028512 -r 453784f0b18e sys/src/libmach/8.c --- a/sys/src/libmach/8.c Sat Nov 19 10:36:00 2011 +0000 +++ b/sys/src/libmach/8.c Fri Nov 25 10:06:40 2011 +0000 @@ -68,7 +68,7 @@ "setSB", /* static base register name (bogus anyways) */ 0, /* static base register value */ 0x1000, /* page size */ - 0x80100000ULL, /* kernel base */ + 0xF0100000ULL, /* kernel base */ 0xF0000000ULL, /* kernel text mask */ 0x7FFFFFFFULL, /* user stack top */ 1, /* quantization of pc */