Thanks for the detailed explanation, I've added your patch to if that is alright with you https://bitbucket.org/paulzhol/golang-plan9- runtime-patches/
Pavel On Mon, Apr 4, 2011 at 1:30 AM, Anthony Martin <al...@pbrane.org> wrote: > Pavel Zholkover <paulz...@gmail.com> once said: >> I'm not sure I understand the reason 9vx will fail to reserve 768mb >> with brk() while my Plan 9 install on kvm+qemu with 128mb or ram works >> fine, as long as it is not written to. > > The reason is because 9vx gives user processes a virtual > address space of only 256mb. The brk works but the > first time we fault one of those pages past USTKTOP the > program suicides. > > The first fault happens at src/pkg/runtime/mcache.c:21 > in the runtime·MCache_Alloc function. > > To show you what I mean, here's a formatted stack trace: > > term% cat y.go > package main > > func main() { > println("Hello, world.") > } > > term% ./8.out > 8.out 174: suicide: sys: trap: page fault pc=0x000021df > > term% db 8.out 174 > 386 binary > page fault > /go/src/pkg/runtime/mcache.c:21 runtime.MCache_Alloc+39/ MOVL > 0(AX),AX > $c > runtime.MCache_Alloc(sizeclass=0x1, c=0x30424000, size=0x8, zeroed=0x1) > /go/src/pkg/runtime/mcache.c:13 called from runtime.mallocgc+db > /go/src/pkg/runtime/malloc.goc:62 > runtime.mallocgc(size=0x8, zeroed=0x1, flag=0x0, dogc=0x0) > /go/src/pkg/runtime/malloc.goc:40 called from runtime.malloc+41 > /go/src/pkg/runtime/malloc.goc:115 > runtime.malloc(size=0x1) > /go/src/pkg/runtime/malloc.goc:113 called from runtime.mallocinit+e9 > /go/src/pkg/runtime/malloc.goc:319 > runtime.mallocinit() > /go/src/pkg/runtime/malloc.goc:237 called from runtime.schedinit+39 > /go/src/pkg/runtime/proc.c:122 > runtime.schedinit() > /go/src/pkg/runtime/proc.c:113 called from _rt0_386+b3 > /go/src/pkg/runtime/386/asm.s:78 > _rt0_386() > /go/src/pkg/runtime/386/asm.s:12 called from 1 > > > Cheers, > Anthony > >