mirror of
https://github.com/golang/go
synced 2024-11-25 03:27:58 -07:00
fix 386 malloc tests,
detect 386 darwin breakpoint line. R=r DELTA=22 (4 added, 0 deleted, 18 changed) OCL=29929 CL=29944
This commit is contained in:
parent
4f30ec7fcb
commit
b014be75d2
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -39,13 +39,13 @@ func prime() {
|
||||
b := malloc.Alloc(1<<uint(i));
|
||||
malloc.Free(b);
|
||||
}
|
||||
for i := uint64(0); i < 256; i++ {
|
||||
for i := uintptr(0); i < 256; i++ {
|
||||
b := malloc.Alloc(i<<12);
|
||||
malloc.Free(b);
|
||||
}
|
||||
}
|
||||
|
||||
func memset(b *byte, c byte, n uint64) {
|
||||
func memset(b *byte, c byte, n uintptr) {
|
||||
np := uintptr(n);
|
||||
for i := uintptr(0); i < np; i++ {
|
||||
*(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(b))+i)) = c;
|
||||
@ -55,7 +55,7 @@ func memset(b *byte, c byte, n uint64) {
|
||||
func main() {
|
||||
flag.Parse();
|
||||
// prime();
|
||||
var blocks [1] struct { base *byte; siz uint64; };
|
||||
var blocks [1] struct { base *byte; siz uintptr; };
|
||||
for i := 0; i < 1<<12; i++ {
|
||||
if i%(1<<10) == 0 && *chatty {
|
||||
println(i);
|
||||
@ -65,19 +65,19 @@ func main() {
|
||||
// println("Free", blocks[b].siz, blocks[b].base);
|
||||
malloc.Free(blocks[b].base);
|
||||
blocks[b].base = nil;
|
||||
allocated -= blocks[b].siz;
|
||||
allocated -= uint64(blocks[b].siz);
|
||||
continue
|
||||
}
|
||||
siz := uint64(rand.Int() >> (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();
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user