Browse Source

Plan 9 from Bell Labs 2006-03-10

David du Colombier 18 years ago
parent
commit
a39af1a008

+ 13 - 12
dist/replica/_plan9.db

@@ -220,7 +220,7 @@
 386/bin/du - 775 sys sys 1135570806 73708
 386/bin/echo - 775 sys sys 1135570806 57349
 386/bin/ed - 775 sys sys 1135570807 93021
-386/bin/eqn - 775 sys sys 1136656335 243034
+386/bin/eqn - 775 sys sys 1141927235 244405
 386/bin/execnet - 775 sys sys 1138500564 178046
 386/bin/exportfs - 775 sys sys 1135570807 162237
 386/bin/ext2srv - 775 sys sys 1135570808 179710
@@ -319,7 +319,7 @@
 386/bin/kprof - 775 sys sys 1138500643 105075
 386/bin/ktrace - 775 sys sys 1138500657 122747
 386/bin/lens - 775 sys sys 1135570830 150725
-386/bin/lex - 775 sys sys 1136224362 99020
+386/bin/lex - 775 sys sys 1141927236 99035
 386/bin/lnfs - 775 sys sys 1135570831 99434
 386/bin/look - 775 sys sys 1135570831 65531
 386/bin/ls - 775 sys sys 1139853471 82480
@@ -507,7 +507,7 @@
 386/bin/wc - 775 sys sys 1130384372 41174
 386/bin/webcookies - 775 sys sys 1135570853 167402
 386/bin/webfs - 775 sys sys 1134389883 360008
-386/bin/webfsget - 775 sys sys 1130384374 39161
+386/bin/webfsget - 775 sys sys 1141927236 39180
 386/bin/wikifs - 775 sys sys 1134505646 203414
 386/bin/winwatch - 775 sys sys 1135570853 154876
 386/bin/x.echo - 775 sys sys 1135619568 57349
@@ -5442,6 +5442,7 @@ rc/bin/ipso - 775 sys sys 1079377794 2838
 rc/bin/iwhois - 775 sys sys 1100534870 1372
 rc/bin/juke - 775 sys sys 1105565140 1131
 rc/bin/kill - 775 sys sys 1018387014 132
+rc/bin/kmem - 775 sys sys 1141940177 468
 rc/bin/label - 775 sys sys 945617207 34
 rc/bin/lc - 775 sys sys 945617207 24
 rc/bin/leak - 775 sys sys 1139744263 1052
@@ -5747,7 +5748,7 @@ sys/games - 20000000775 sys sys 952648872 0
 sys/games/lib - 20000000775 sys sys 952648879 0
 sys/games/lib/4scores - 10000000664 sys sys 1118680448 0
 sys/games/lib/5scores - 10000000664 sys sys 1118680453 0
-sys/games/lib/fortunes - 664 sys sys 1141660932 257780
+sys/games/lib/fortunes - 664 sys sys 1141922030 257851
 sys/games/lib/mahjongg - 20000000775 sys sys 1095792278 0
 sys/games/lib/mahjongg/backgrounds - 20000000775 sys sys 1095792293 0
 sys/games/lib/mahjongg/backgrounds/default.bit - 664 sys sys 1095792293 346803
@@ -6040,7 +6041,7 @@ sys/lib/acid/alpha - 664 sys sys 944955985 4849
 sys/lib/acid/arm - 664 sys sys 984696197 1842
 sys/lib/acid/coverage - 664 sys sys 944955985 1746
 sys/lib/acid/kernel - 664 sys sys 1134390252 6399
-sys/lib/acid/leak - 664 sys sys 1131289472 2363
+sys/lib/acid/leak - 664 sys sys 1141940182 3022
 sys/lib/acid/mips - 664 sys sys 944955985 5472
 sys/lib/acid/network - 664 sys sys 1020313817 2499
 sys/lib/acid/pool - 664 sys sys 1063858105 4898
@@ -7287,7 +7288,7 @@ sys/man/1/echo - 664 sys sys 1079969656 430
 sys/man/1/ed - 664 sys sys 961259286 13916
 sys/man/1/emacs - 664 sys sys 944959673 199
 sys/man/1/eqn - 664 sys sys 1134592617 5655
-sys/man/1/expect - 664 sys sys 1134557311 3014
+sys/man/1/expect - 664 sys sys 1141913757 3018
 sys/man/1/faces - 664 sys sys 1113743326 2395
 sys/man/1/factor - 664 sys sys 1135084026 1015
 sys/man/1/file - 664 sys sys 1015024739 1578
@@ -7312,7 +7313,7 @@ sys/man/1/jpg - 664 sys sys 1113743325 4842
 sys/man/1/kbmap - 664 sys sys 1079969760 845
 sys/man/1/kill - 664 sys sys 1018369246 1193
 sys/man/1/ktrace - 664 sys sys 957920006 1330
-sys/man/1/leak - 664 sys sys 1017423522 2871
+sys/man/1/leak - 664 sys sys 1141940187 3307
 sys/man/1/lens - 664 sys sys 1130425868 1272
 sys/man/1/lex - 664 sys sys 1113743328 1520
 sys/man/1/look - 664 sys sys 1113743326 1357
@@ -8062,7 +8063,7 @@ sys/src/9/port/alloc.c - 664 sys sys 1138459977 5704
 sys/src/9/port/allocb.c - 664 sys sys 1123676437 3340
 sys/src/9/port/auth.c - 664 sys sys 1123647282 2392
 sys/src/9/port/cache.c - 664 sys sys 1126586168 9241
-sys/src/9/port/chan.c - 664 sys sys 1138458251 34790
+sys/src/9/port/chan.c - 664 sys sys 1141940068 34831
 sys/src/9/port/cis.c - 664 sys sys 1099761153 9248
 sys/src/9/port/debugalloc.c - 664 sys sys 1014931171 10402
 sys/src/9/port/dev.c - 664 sys sys 1131289870 8219
@@ -8134,7 +8135,7 @@ sys/src/9/port/rebootcmd.c - 664 sys sys 1015278340 1561
 sys/src/9/port/sd.h - 664 sys sys 1134411408 2494
 sys/src/9/port/segment.c - 664 sys sys 1138749368 13939
 sys/src/9/port/swap.c - 664 sys sys 1138028310 7019
-sys/src/9/port/sysfile.c - 664 sys sys 1134042952 22178
+sys/src/9/port/sysfile.c - 664 sys sys 1141940070 22192
 sys/src/9/port/sysproc.c - 664 sys sys 1137622456 15153
 sys/src/9/port/systab.h - 664 sys sys 1062721698 3044
 sys/src/9/port/taslock.c - 664 sys sys 1131290039 3928
@@ -10065,7 +10066,7 @@ sys/src/cmd/eqn/input.c - 664 sys sys 944960989 5402
 sys/src/cmd/eqn/integral.c - 664 sys sys 944960989 774
 sys/src/cmd/eqn/lex.c - 664 sys sys 944960989 5090
 sys/src/cmd/eqn/lookup.c - 664 sys sys 944960990 4228
-sys/src/cmd/eqn/main.c - 664 sys sys 944960989 7115
+sys/src/cmd/eqn/main.c - 664 sys sys 1141913958 7121
 sys/src/cmd/eqn/mark.c - 664 sys sys 944960989 292
 sys/src/cmd/eqn/matrix.c - 664 sys sys 944960989 1746
 sys/src/cmd/eqn/mkfile - 664 sys sys 944960989 530
@@ -13957,7 +13958,7 @@ sys/src/cmd/upas/fs/readdir.c - 664 sys sys 944961331 203
 sys/src/cmd/upas/fs/strtotm.c - 664 sys sys 1041137528 1904
 sys/src/cmd/upas/fs/tester.c - 664 sys sys 985037420 1418
 sys/src/cmd/upas/marshal - 20000000775 sys sys 1015009721 0
-sys/src/cmd/upas/marshal/marshal.c - 664 sys sys 1135352267 32852
+sys/src/cmd/upas/marshal/marshal.c - 664 sys sys 1141913896 32859
 sys/src/cmd/upas/marshal/mkfile - 664 sys sys 1047490298 235
 sys/src/cmd/upas/misc - 20000000775 sys sys 944961318 0
 sys/src/cmd/upas/misc/gone.fishing - 664 sys sys 944961318 313
@@ -14256,7 +14257,7 @@ sys/src/cmd/webfs/plumb.c - 664 sys sys 1015090008 2761
 sys/src/cmd/webfs/url.c - 664 sys sys 1128664462 24144
 sys/src/cmd/webfs/util.c - 664 sys sys 1015015823 1211
 sys/src/cmd/webfs/webget.c - 664 sys sys 1124711795 1589
-sys/src/cmd/webfsget.c - 664 sys sys 1068413017 1595
+sys/src/cmd/webfsget.c - 664 sys sys 1141913846 1597
 sys/src/cmd/wikifs - 20000000775 sys sys 1018211094 0
 sys/src/cmd/wikifs/fs.c - 664 sys sys 1134354783 14440
 sys/src/cmd/wikifs/io.c - 664 sys sys 1134498935 11573

+ 13 - 12
dist/replica/plan9.db

@@ -220,7 +220,7 @@
 386/bin/du - 775 sys sys 1135570806 73708
 386/bin/echo - 775 sys sys 1135570806 57349
 386/bin/ed - 775 sys sys 1135570807 93021
-386/bin/eqn - 775 sys sys 1136656335 243034
+386/bin/eqn - 775 sys sys 1141927235 244405
 386/bin/execnet - 775 sys sys 1138500564 178046
 386/bin/exportfs - 775 sys sys 1135570807 162237
 386/bin/ext2srv - 775 sys sys 1135570808 179710
@@ -319,7 +319,7 @@
 386/bin/kprof - 775 sys sys 1138500643 105075
 386/bin/ktrace - 775 sys sys 1138500657 122747
 386/bin/lens - 775 sys sys 1135570830 150725
-386/bin/lex - 775 sys sys 1136224362 99020
+386/bin/lex - 775 sys sys 1141927236 99035
 386/bin/lnfs - 775 sys sys 1135570831 99434
 386/bin/look - 775 sys sys 1135570831 65531
 386/bin/ls - 775 sys sys 1139853471 82480
@@ -507,7 +507,7 @@
 386/bin/wc - 775 sys sys 1130384372 41174
 386/bin/webcookies - 775 sys sys 1135570853 167402
 386/bin/webfs - 775 sys sys 1134389883 360008
-386/bin/webfsget - 775 sys sys 1130384374 39161
+386/bin/webfsget - 775 sys sys 1141927236 39180
 386/bin/wikifs - 775 sys sys 1134505646 203414
 386/bin/winwatch - 775 sys sys 1135570853 154876
 386/bin/x.echo - 775 sys sys 1135619568 57349
@@ -5442,6 +5442,7 @@ rc/bin/ipso - 775 sys sys 1079377794 2838
 rc/bin/iwhois - 775 sys sys 1100534870 1372
 rc/bin/juke - 775 sys sys 1105565140 1131
 rc/bin/kill - 775 sys sys 1018387014 132
+rc/bin/kmem - 775 sys sys 1141940177 468
 rc/bin/label - 775 sys sys 945617207 34
 rc/bin/lc - 775 sys sys 945617207 24
 rc/bin/leak - 775 sys sys 1139744263 1052
@@ -5747,7 +5748,7 @@ sys/games - 20000000775 sys sys 952648872 0
 sys/games/lib - 20000000775 sys sys 952648879 0
 sys/games/lib/4scores - 10000000664 sys sys 1118680448 0
 sys/games/lib/5scores - 10000000664 sys sys 1118680453 0
-sys/games/lib/fortunes - 664 sys sys 1141660932 257780
+sys/games/lib/fortunes - 664 sys sys 1141922030 257851
 sys/games/lib/mahjongg - 20000000775 sys sys 1095792278 0
 sys/games/lib/mahjongg/backgrounds - 20000000775 sys sys 1095792293 0
 sys/games/lib/mahjongg/backgrounds/default.bit - 664 sys sys 1095792293 346803
@@ -6040,7 +6041,7 @@ sys/lib/acid/alpha - 664 sys sys 944955985 4849
 sys/lib/acid/arm - 664 sys sys 984696197 1842
 sys/lib/acid/coverage - 664 sys sys 944955985 1746
 sys/lib/acid/kernel - 664 sys sys 1134390252 6399
-sys/lib/acid/leak - 664 sys sys 1131289472 2363
+sys/lib/acid/leak - 664 sys sys 1141940182 3022
 sys/lib/acid/mips - 664 sys sys 944955985 5472
 sys/lib/acid/network - 664 sys sys 1020313817 2499
 sys/lib/acid/pool - 664 sys sys 1063858105 4898
@@ -7287,7 +7288,7 @@ sys/man/1/echo - 664 sys sys 1079969656 430
 sys/man/1/ed - 664 sys sys 961259286 13916
 sys/man/1/emacs - 664 sys sys 944959673 199
 sys/man/1/eqn - 664 sys sys 1134592617 5655
-sys/man/1/expect - 664 sys sys 1134557311 3014
+sys/man/1/expect - 664 sys sys 1141913757 3018
 sys/man/1/faces - 664 sys sys 1113743326 2395
 sys/man/1/factor - 664 sys sys 1135084026 1015
 sys/man/1/file - 664 sys sys 1015024739 1578
@@ -7312,7 +7313,7 @@ sys/man/1/jpg - 664 sys sys 1113743325 4842
 sys/man/1/kbmap - 664 sys sys 1079969760 845
 sys/man/1/kill - 664 sys sys 1018369246 1193
 sys/man/1/ktrace - 664 sys sys 957920006 1330
-sys/man/1/leak - 664 sys sys 1017423522 2871
+sys/man/1/leak - 664 sys sys 1141940187 3307
 sys/man/1/lens - 664 sys sys 1130425868 1272
 sys/man/1/lex - 664 sys sys 1113743328 1520
 sys/man/1/look - 664 sys sys 1113743326 1357
@@ -8062,7 +8063,7 @@ sys/src/9/port/alloc.c - 664 sys sys 1138459977 5704
 sys/src/9/port/allocb.c - 664 sys sys 1123676437 3340
 sys/src/9/port/auth.c - 664 sys sys 1123647282 2392
 sys/src/9/port/cache.c - 664 sys sys 1126586168 9241
-sys/src/9/port/chan.c - 664 sys sys 1138458251 34790
+sys/src/9/port/chan.c - 664 sys sys 1141940068 34831
 sys/src/9/port/cis.c - 664 sys sys 1099761153 9248
 sys/src/9/port/debugalloc.c - 664 sys sys 1014931171 10402
 sys/src/9/port/dev.c - 664 sys sys 1131289870 8219
@@ -8134,7 +8135,7 @@ sys/src/9/port/rebootcmd.c - 664 sys sys 1015278340 1561
 sys/src/9/port/sd.h - 664 sys sys 1134411408 2494
 sys/src/9/port/segment.c - 664 sys sys 1138749368 13939
 sys/src/9/port/swap.c - 664 sys sys 1138028310 7019
-sys/src/9/port/sysfile.c - 664 sys sys 1134042952 22178
+sys/src/9/port/sysfile.c - 664 sys sys 1141940070 22192
 sys/src/9/port/sysproc.c - 664 sys sys 1137622456 15153
 sys/src/9/port/systab.h - 664 sys sys 1062721698 3044
 sys/src/9/port/taslock.c - 664 sys sys 1131290039 3928
@@ -10065,7 +10066,7 @@ sys/src/cmd/eqn/input.c - 664 sys sys 944960989 5402
 sys/src/cmd/eqn/integral.c - 664 sys sys 944960989 774
 sys/src/cmd/eqn/lex.c - 664 sys sys 944960989 5090
 sys/src/cmd/eqn/lookup.c - 664 sys sys 944960990 4228
-sys/src/cmd/eqn/main.c - 664 sys sys 944960989 7115
+sys/src/cmd/eqn/main.c - 664 sys sys 1141913958 7121
 sys/src/cmd/eqn/mark.c - 664 sys sys 944960989 292
 sys/src/cmd/eqn/matrix.c - 664 sys sys 944960989 1746
 sys/src/cmd/eqn/mkfile - 664 sys sys 944960989 530
@@ -13957,7 +13958,7 @@ sys/src/cmd/upas/fs/readdir.c - 664 sys sys 944961331 203
 sys/src/cmd/upas/fs/strtotm.c - 664 sys sys 1041137528 1904
 sys/src/cmd/upas/fs/tester.c - 664 sys sys 985037420 1418
 sys/src/cmd/upas/marshal - 20000000775 sys sys 1015009721 0
-sys/src/cmd/upas/marshal/marshal.c - 664 sys sys 1135352267 32852
+sys/src/cmd/upas/marshal/marshal.c - 664 sys sys 1141913896 32859
 sys/src/cmd/upas/marshal/mkfile - 664 sys sys 1047490298 235
 sys/src/cmd/upas/misc - 20000000775 sys sys 944961318 0
 sys/src/cmd/upas/misc/gone.fishing - 664 sys sys 944961318 313
@@ -14256,7 +14257,7 @@ sys/src/cmd/webfs/plumb.c - 664 sys sys 1015090008 2761
 sys/src/cmd/webfs/url.c - 664 sys sys 1128664462 24144
 sys/src/cmd/webfs/util.c - 664 sys sys 1015015823 1211
 sys/src/cmd/webfs/webget.c - 664 sys sys 1124711795 1589
-sys/src/cmd/webfsget.c - 664 sys sys 1068413017 1595
+sys/src/cmd/webfsget.c - 664 sys sys 1141913846 1597
 sys/src/cmd/wikifs - 20000000775 sys sys 1018211094 0
 sys/src/cmd/wikifs/fs.c - 664 sys sys 1134354783 14440
 sys/src/cmd/wikifs/io.c - 664 sys sys 1134498935 11573

+ 13 - 0
dist/replica/plan9.log

@@ -27957,3 +27957,16 @@
 1141794082 0 c sys/src/9/pc/devpccard.c - 664 sys sys 1141793347 40159
 1141794082 1 c sys/src/9/pc/pci.c - 664 sys sys 1141793347 26875
 1141794082 2 c sys/src/9/pc/sdata.c - 664 sys sys 1141793347 52244
+1141914715 0 c sys/man/1/expect - 664 sys sys 1141913757 3018
+1141914715 1 c sys/src/cmd/eqn/main.c - 664 sys sys 1141913958 7121
+1141914715 2 c sys/src/cmd/upas/marshal/marshal.c - 664 sys sys 1141913896 32859
+1141914715 3 c sys/src/cmd/webfsget.c - 664 sys sys 1141913846 1597
+1141923717 0 c sys/games/lib/fortunes - 664 sys sys 1141922030 257851
+1141927318 0 c 386/bin/eqn - 775 sys sys 1141927235 244405
+1141927318 1 c 386/bin/lex - 775 sys sys 1141927236 99035
+1141927318 2 c 386/bin/webfsget - 775 sys sys 1141927236 39180
+1141941728 0 a rc/bin/kmem - 775 sys sys 1141940177 468
+1141941728 1 c sys/lib/acid/leak - 664 sys sys 1141940182 3022
+1141941728 2 c sys/man/1/leak - 664 sys sys 1141940187 3307
+1141941728 3 c sys/src/9/port/chan.c - 664 sys sys 1141940068 34831
+1141941728 4 c sys/src/9/port/sysfile.c - 664 sys sys 1141940070 22192

+ 30 - 0
rc/bin/kmem

@@ -0,0 +1,30 @@
+#!/bin/rc
+
+if(! ~ $#* 0 1){
+	echo 'usage: kmem [kernel]' >[1=2]
+	exit usage
+}
+
+if(~ $#* 1)
+	binary=$1
+
+echo 'kinit(); blocksummary()' | acid -k -lkernel -lpool -lleak $pid $binary | awk '
+	$1 == "block" {
+		addr=$6
+		size=$3
+		alloc=$4
+		total[alloc] += size
+		count[alloc]++
+	}
+	$1 == "summary" { 
+		alloc=$2
+		cnt=$3
+		size=$4
+		total[alloc] += size
+		count[alloc] += cnt
+	}
+	END{
+		for(i in count)
+			printf("%6d %11d %s\n", count[i], total[i], i);
+	}
+' | sort -nr

+ 1 - 0
sys/games/lib/fortunes

@@ -4109,3 +4109,4 @@ Nothing is good enough for the fortune file! - Dan Cross
 Tried to read 71776119061217303 bytes. Read only 23
 /dev/shm/root has gone 49710 days without being checked, check forced.
 x11 code is just so bad. by which i mean bad of course, and not good.  - forsyth
+Peter Seebach is not POSIX compliant, but runs most UNIX applications.

+ 49 - 15
sys/lib/acid/leak

@@ -4,28 +4,30 @@
 include("/sys/src/libc/port/pool.acid");
 
 defn
-dumppool(p)
+dumppool(p, sum)
 {
 	complex Pool p;
 	a = p.arenalist;
 
-	while a != 0 && a < 0x60000000 do {
+	print("A: ", p.arenalist\X, "\n");
+	while a != 0 && a < 0xff000000 do {
 		complex Arena a;
-		dumparena(a);
+		dumparena(a, sum);
 		a = a.down;
 	}
 }
 
 defn
-dumparena(arena)
+dumparena(arena, sum)
 {
 	local atail, b, nb;
 
 	atail = A2TB(arena);
 	complex Bhdr arena;
 	b = a;
+	print("B: ", b\X, " ", atail\X, "\n");
 	while b < atail && b.magic != ARENATAIL_MAGIC do {
-		dumpblock(b);
+		dumpblock(b, sum);
 		nb = B2NB(b);
 		if nb == b then {
 			print("B2NB(", b\X, ") = b\n");
@@ -54,24 +56,47 @@ isptr(a)
 	return 0;
 }
 
+lastalloc = 0;
+lastcount = 0;
+lastsize = 0;
 defn
-dumpblock(addr)
+emitsum()
+{
+	if lastalloc then
+		print("summary ", lastalloc\a, " ", lastcount\D, " ", lastsize\D, "\n");
+	lastalloc = 0;
+	lastcount = 0;
+	lastsize = 0;
+}
+
+defn
+dumpblock(addr, sum)
 {
 	complex Bhdr addr;
 
-	if addr.magic == ALLOC_MAGIC || addr.magic == FREE_MAGIC then {
+	if addr.magic == ALLOC_MAGIC || (!sum && addr.magic == FREE_MAGIC) then {
 		local a, x, s;
 
 		a = addr;
 		complex Alloc a;
 
 		x = addr+8;
-		if addr.magic == ALLOC_MAGIC then
-			s = "block";
-		else
-			s = "free";
-		print(s, " ", addr\X, " ", a.size\X, " ");
-		print(*(addr+8)\X, " ", *(addr+12)\X, "\n");
+		if sum then {
+			if *(addr+8) != lastalloc then {
+				emitsum();
+				lastalloc = *(addr+8);
+			}
+			lastcount = lastcount+1;
+			lastsize = lastsize+a.size;
+		}else{
+			if addr.magic == ALLOC_MAGIC then
+				s = "block";
+			else
+				s = "free";
+			print(s, " ", addr\X, " ", a.size\X, " ");
+			print(*(addr+8)\X, " ", *(addr+12)\X, " ",
+				*(addr+8)\a, " ", *(addr+12)\a, "\n");
+		}
 	}
 }
 
@@ -134,7 +159,7 @@ defn
 leakdump(l)
 {
 	print("==LEAK BEGIN==\n");
-	dumppool(sbrkmem);
+	dumppool(*mainmem, 0);
 	dumpmem();
 	dumpregs();
 	while l != {} do {
@@ -149,6 +174,15 @@ defn
 blockdump()
 {
 	print("==BLOCK BEGIN==\n");
-	dumppool(sbrkmem);
+	dumppool(*mainmem, 0);
+	print("==BLOCK END==\n");
+}
+
+defn
+blocksummary()
+{
+	print("==BLOCK BEGIN==\n");
+	dumppool(*mainmem, 1);
+	emitsum();
 	print("==BLOCK END==\n");
 }

+ 1 - 1
sys/man/1/expect

@@ -101,7 +101,7 @@ or after an error.
 .B /rc/bin/ipconf/*
 example dialer scripts for ppp
 .SH SOURCE
-.B /sys/src/dial/*.c
+.B /sys/src/cmd/dial/*.c
 .SH SEE ALSO
 .IR ppp (8),
 .IR telco (4)

+ 35 - 7
sys/man/1/leak

@@ -19,6 +19,11 @@ leak \- examine family of processes for memory leaks
 .I width
 ]
 .I pid ...
+.PP
+.B kmem
+[
+.I kernel
+]
 .SH DESCRIPTION
 .I Leak
 examines the named processes, which
@@ -57,7 +62,9 @@ at that point in the program.
 .PP
 If the
 .B -b
-option is given, leak will print a Plan 9 image file
+option is given,
+.I leak
+will print a Plan 9 image file
 graphically summarizing the memory arenas.
 In the image, each pixel represents
 .I res
@@ -102,6 +109,12 @@ command-line used to inspect the
 processes, and is only necessary
 when inspecting processes started
 from stripped binaries.
+.PP
+.I Kmem
+prints a summary of all allocated blocks in the running kernel.
+Each line of the summary gives
+the count and total size of blocks allocated at an allocation point.
+The list is sorted by count in decreasing order.
 .SH EXAMPLES
 List lost blocks in 
 .IR 8.out .
@@ -113,19 +126,27 @@ running; if there were more, the output of
 would need editing before sending to the shell.
 .IP
 .EX
-g% leak -s 8.out
+% leak -s 8.out
 leak -s 229 230
-g% leak -s 8.out | rc
+% leak -s 8.out | rc
 src(0x0000bf1b); // 64
 src(0x000016f5); // 7
 src(0x0000a988); // 7
-g%
+%
 .EE
 .LP
 View the memory usage graphic for the window system.
 .IP
 .EX
-g% leak -b rio | rc | page
+% leak -b rio | rc | page
+.EE
+.PP
+List the top allocation points in the kernel,
+first by count and then by total size:
+.IP
+.EX
+% kmem | sed 10q
+% kmem | sort -nr +1 | sed 10q
 .EE
 .SH SOURCE
 .B /sys/lib/acid/leak
@@ -133,9 +154,16 @@ g% leak -b rio | rc | page
 .B /sys/src/cmd/aux/acidleak.c
 .br
 .B /rc/bin/leak
+.br
+.B /rc/bin/kmem
 .SH BUGS
-Leak depends on the internal structure of the
+.I Leak
+and
+.I kmem
+depend on the internal structure of the
 libc pool memory allocator (see 
 .IR pool (2)).
 Since the ANSI/POSIX environment uses a different
-allocator, leak will not work on APE programs.
+allocator,
+.I leak
+will not work on APE programs.

+ 2 - 1
sys/src/9/port/chan.c

@@ -1700,6 +1700,7 @@ validname0(char *aname, int slashok, int dup, ulong pc)
 		s[n] = 0;
 		aname = s;
 		name = s;
+		setmalloctag(s, pc);
 	}
 	
 	while(*name){
@@ -1729,7 +1730,7 @@ validname(char *aname, int slashok)
 char*
 validnamedup(char *aname, int slashok)
 {
-	return validname0(aname, slashok, 1, 0);
+	return validname0(aname, slashok, 1, getcallerpc(&aname));
 }
 
 void

+ 1 - 0
sys/src/9/port/sysfile.c

@@ -1037,6 +1037,7 @@ bindmount(int ismount, int fd, int afd, char* arg0, char* arg1, ulong flag, char
 		c0 = devtab[ret]->attach((char*)&bogus);
 
 		poperror();	/* spec */
+		free(spec);
 		poperror();	/* ac bc */
 		if(ac)
 			cclose(ac);

+ 3 - 3
sys/src/cmd/eqn/main.c

@@ -12,7 +12,7 @@ int	yyparse(void);
 void	settype(char *);
 int	getdata(void);
 int	getline(char *);
-void	inline(void);
+void	inlineeq(void);
 void	init(void);
 void	init_tbl(void);
 
@@ -123,7 +123,7 @@ getdata(void)
 			printf(".lf %d\n", curfile->lineno+1);
 		}
 		else if (type == lefteq)
-			inline();
+			inlineeq();
 		else if (in[0] == '.' && in[1] == 'l' && in[2] == 'f') {
 			if (sscanf(in+3, "%d %s", &ln, fname) == 2) {
 				free(curfile->fname);
@@ -154,7 +154,7 @@ getline(char *s)
 	return(c);
 }
 
-void inline(void)
+void inlineeq(void)
 {
 	int ds, n, sz1 = 0;
 

+ 6 - 6
sys/src/cmd/upas/marshal/marshal.c

@@ -10,7 +10,7 @@ struct Attach {
 	Attach	*next;
 	char	*path;
 	char	*type;
-	int	inline;
+	int	ainline;
 	Ctype	*ctype;
 };
 
@@ -382,7 +382,7 @@ main(int argc, char **argv)
 		Bprint(&out, "\tboundary=\"%s\"\n\n", boundary);
 		Bprint(&out, "This is a multi-part message in MIME format.\n");
 		Bprint(&out, "--%s\n", boundary);
-		Bprint(&out, "Content-Disposition: inline\n");
+		Bprint(&out, "Content-Disposition: ainline\n");
 	}
 
 	if(!nflag){
@@ -679,8 +679,8 @@ attachment(Attach *a, Biobuf *out)
 	if(strcmp(a->type, "text/plain") != 0)
 		Bprint(out, "Content-Type: %s\n", a->type);
 
-	if(a->inline){
-		Bprint(out, "Content-Disposition: inline\n");
+	if(a->ainline){
+		Bprint(out, "Content-Disposition: ainline\n");
 	} else {
 		p = strrchr(a->path, '/');
 		if(p == nil)
@@ -806,7 +806,7 @@ printinreplyto(Biobuf *out, char *dir)
 }
 
 Attach*
-mkattach(char *file, char *type, int inline)
+mkattach(char *file, char *type, int ainline)
 {
 	Ctype *c;
 	Attach *a;
@@ -824,7 +824,7 @@ mkattach(char *file, char *type, int inline)
 	a->path = file;
 	a->next = nil;
 	a->type = type;
-	a->inline = inline;
+	a->ainline = ainline;
 	a->ctype = nil;
 	if(type != nil){
 		for(c = ctype; ; c++)

+ 1 - 1
sys/src/cmd/webfsget.c

@@ -18,7 +18,7 @@ xfer(int from, int to)
 void
 usage(void)
 {
-	fprint(2, "usage: webget [-b baseurl] [-m mtpt] [-p postbody] url\n");
+	fprint(2, "usage: webfsget [-b baseurl] [-m mtpt] [-p postbody] url\n");
 	exits("usage");
 }