From: Ian Lance Taylor Date: Sat, 29 Jan 2011 07:16:20 +0000 (+0000) Subject: re PR go/47515 (Issues porting libgo to IRIX 6.5) X-Git-Tag: releases/gcc-4.6.0~883 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ca7174cf5ce7f23e06aa453e2d632ed5e4eac867;p=thirdparty%2Fgcc.git re PR go/47515 (Issues porting libgo to IRIX 6.5) PR go/47515 runtime: If no MAP_ANON, use /dev/zero. From-SVN: r169388 --- diff --git a/libgo/runtime/mem.c b/libgo/runtime/mem.c index 29cf49542716..4d6c7420907f 100644 --- a/libgo/runtime/mem.c +++ b/libgo/runtime/mem.c @@ -3,13 +3,39 @@ #include "runtime.h" #include "malloc.h" +#ifndef MAP_ANON +#ifdef MAP_ANONYMOUS +#define MAP_ANON MAP_ANONYMOUS +#else +#define USE_DEV_ZERO +#define MAP_ANON 0 +#endif +#endif + +#ifdef USE_DEV_ZERO +static int dev_zero = -1; +#endif + void* runtime_SysAlloc(uintptr n) { void *p; + int fd = -1; mstats.sys += n; - p = runtime_mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0); + +#ifdef USE_DEV_ZERO + if (dev_zero == -1) { + dev_zero = open("/dev/zero", O_RDONLY); + if (dev_zero < 0) { + printf("open /dev/zero: errno=%d\n", errno); + exit(2); + } + } + fd = dev_zero; +#endif + + p = runtime_mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, fd, 0); if (p == MAP_FAILED) { if(errno == EACCES) { printf("mmap: access denied\n"); diff --git a/libgo/runtime/runtime.h b/libgo/runtime/runtime.h index e43177fef59a..95216e4a5ca2 100644 --- a/libgo/runtime/runtime.h +++ b/libgo/runtime/runtime.h @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include #include #include