diff --git a/src/lib/malloc/malloc.go b/src/lib/malloc/malloc.go index 8e4397a0b14..fec53f08fd0 100644 --- a/src/lib/malloc/malloc.go +++ b/src/lib/malloc/malloc.go @@ -17,7 +17,7 @@ type Stats struct { EnableGC bool; } -func Alloc(uint64) *byte +func Alloc(uintptr) *byte func Free(*byte) func GetStats() *Stats func Lookup(*byte) (*byte, uintptr) diff --git a/src/runtime/mgc0.c b/src/runtime/mgc0.c index 71f5fc98078..d58d6ce44d1 100644 --- a/src/runtime/mgc0.c +++ b/src/runtime/mgc0.c @@ -212,7 +212,7 @@ gc(int32 force) else gcpercent = atoi(p); } - if(gcpercent < 0 || sizeof(void*) == 4) // TODO(rsc): broken on 32-bit right now + if(gcpercent < 0) return; semacquire(&gcsema); diff --git a/test/mallocrand.go b/test/mallocrand.go index b933f6be450..59da01d44c5 100644 --- a/test/mallocrand.go +++ b/test/mallocrand.go @@ -39,13 +39,13 @@ func prime() { b := malloc.Alloc(1<> (11 + rand.Uint32() % 20)); + siz := uintptr(rand.Int() >> (11 + rand.Uint32() % 20)); base := malloc.Alloc(siz); - // ptr := uint64(syscall.BytePtr(base))+uint64(siz/2); + // ptr := uintptr(syscall.BytePtr(base))+uintptr(siz/2); // obj, size, ref, ok := allocator.find(ptr); // if obj != base || *ref != 0 || !ok { // panicln("find", siz, obj, ref, ok); // } blocks[b].base = base; blocks[b].siz = siz; - allocated += siz; + allocated += uint64(siz); // println("Alloc", siz, base); memset(base, 0xbb, siz); bigger(); diff --git a/test/mallocrep.go b/test/mallocrep.go index 6aa8fdf8cbd..6306e59ebc0 100644 --- a/test/mallocrep.go +++ b/test/mallocrep.go @@ -36,11 +36,14 @@ func main() { if i == 0 && *chatty { println("First alloc:", j); } - b := malloc.Alloc(uint64(j)); + if a := malloc.GetStats().Alloc; a != 0 { + panicln("no allocations but stats report", a, "bytes allocated"); + } + b := malloc.Alloc(uintptr(j)); during := malloc.GetStats().Alloc; malloc.Free(b); if a := malloc.GetStats().Alloc; a != 0 { - panicln("malloc wrong count", a, "after", j, "during", during); + panic("allocated ", j, ": wrong stats: during=", during, " after=", a, " (want 0)"); } bigger(); } diff --git a/test/mallocrep1.go b/test/mallocrep1.go index 5d17dc2c6d1..e78a9ce9ca5 100644 --- a/test/mallocrep1.go +++ b/test/mallocrep1.go @@ -44,7 +44,7 @@ func AllocAndFree(size, count int) { } n1 := stats.Alloc; for i := 0; i < count; i++ { - b[i] = malloc.Alloc(uint64(size)); + b[i] = malloc.Alloc(uintptr(size)); base, n := malloc.Lookup(b[i]); if base != b[i] || !OkAmount(uintptr(size), n) { panicln("lookup failed: got", base, n, "for", b[i]); @@ -63,14 +63,14 @@ func AllocAndFree(size, count int) { if *reverse { i = count - 1 - j; } - alloc := stats.Alloc; + alloc := uintptr(stats.Alloc); base, n := malloc.Lookup(b[i]); if base != b[i] || !OkAmount(uintptr(size), n) { panicln("lookup failed: got", base, n, "for", b[i]); } malloc.Free(b[i]); - if stats.Alloc != alloc - uint64(n) { - panicln("free alloc got", stats.Alloc, "expected", alloc - uint64(n), "after free of", n); + if stats.Alloc != uint64(alloc - n) { + panicln("free alloc got", stats.Alloc, "expected", alloc - n, "after free of", n); } if malloc.GetStats().Sys > 1e9 { panicln("too much memory allocated"); @@ -100,12 +100,12 @@ func main() { } for j := 1; j <= 1<<22; j<<=1 { n := len(b); - max := uint64(1<<28); + max := uintptr(1<<28); if !*longtest { max = 1<<22; } - if uint64(j)*uint64(n) > max { - n = int(max / uint64(j)); + if uintptr(j)*uintptr(n) > max { + n = int(max / uintptr(j)); } if n < 10 { n = 10; diff --git a/test/run b/test/run index 5724449acbb..63dca3b42aa 100755 --- a/test/run +++ b/test/run @@ -67,6 +67,7 @@ done | # clean up some stack noise s/ PC=0x[0-9a-f]*/ PC=xxx/ s/^pc: 0x[0-9a-f]*/pc: xxx/ /^Trace\/breakpoint trap/d + /^Trace\/BPT trap/d /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/ /^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d' > run.out