diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-29 07:16:20 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-29 07:16:20 +0000 |
commit | ca7174cf5ce7f23e06aa453e2d632ed5e4eac867 (patch) | |
tree | c1d5ea86ec3d33227420e2b63ebf7dcfebe431f5 | |
parent | e0b77418ce90c353563d88ff5fab32f68cdc0bef (diff) | |
download | gcc-ca7174cf5ce7f23e06aa453e2d632ed5e4eac867.zip gcc-ca7174cf5ce7f23e06aa453e2d632ed5e4eac867.tar.gz gcc-ca7174cf5ce7f23e06aa453e2d632ed5e4eac867.tar.bz2 |
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
-rw-r--r-- | libgo/runtime/mem.c | 28 | ||||
-rw-r--r-- | libgo/runtime/runtime.h | 3 |
2 files changed, 30 insertions, 1 deletions
diff --git a/libgo/runtime/mem.c b/libgo/runtime/mem.c index 29cf495..4d6c742 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 e43177f..95216e4 100644 --- a/libgo/runtime/runtime.h +++ b/libgo/runtime/runtime.h @@ -12,6 +12,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> #include <pthread.h> #include <semaphore.h> |