diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-03-02 16:38:43 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-03-02 16:38:43 +0000 |
commit | cbb6491d76c7aa81cdf5d3b3a81386129c5e2fce (patch) | |
tree | efa0c55763b34cbc633bc494c2743d1b5d9aaff3 /libgo/runtime/malloc.goc | |
parent | ff2f581b00ac6759f6366c16ef902c935163aa13 (diff) | |
download | gcc-cbb6491d76c7aa81cdf5d3b3a81386129c5e2fce.tar.gz |
libgo: Update to weekly.2012-02-14 release.
From-SVN: r184798
Diffstat (limited to 'libgo/runtime/malloc.goc')
-rw-r--r-- | libgo/runtime/malloc.goc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/libgo/runtime/malloc.goc b/libgo/runtime/malloc.goc index 9ad9eda8350..8b48c866346 100644 --- a/libgo/runtime/malloc.goc +++ b/libgo/runtime/malloc.goc @@ -279,6 +279,15 @@ runtime_mallocinit(void) runtime_sizeof_C_MStats = sizeof(MStats); + p = nil; + arena_size = 0; + bitmap_size = 0; + + // for 64-bit build + USED(p); + USED(arena_size); + USED(bitmap_size); + runtime_InitSizes(); // Set up the allocation arena, a contiguous area of memory where @@ -307,12 +316,13 @@ runtime_mallocinit(void) // Actually we reserve 17 GB (because the bitmap ends up being 1 GB) // but it hardly matters: fc is not valid UTF-8 either, and we have to // allocate 15 GB before we get that far. + // + // If this fails we fall back to the 32 bit memory mechanism arena_size = (uintptr)(16LL<<30); bitmap_size = arena_size / (sizeof(void*)*8/4); p = runtime_SysReserve((void*)(0x00f8ULL<<32), bitmap_size + arena_size); - if(p == nil) - runtime_throw("runtime: cannot reserve arena virtual address space"); - } else { + } + if (p == nil) { // On a 32-bit machine, we can't typically get away // with a giant virtual address space reservation. // Instead we map the memory information bitmap @@ -379,8 +389,8 @@ runtime_MHeap_SysAlloc(MHeap *h, uintptr n) return p; } - // On 64-bit, our reservation is all we have. - if(sizeof(void*) == 8) + // If using 64-bit, our reservation is all we have. + if(sizeof(void*) == 8 && (uintptr)h->bitmap >= 0xffffffffU) return nil; // On 32-bit, once the reservation is gone we can |