summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/cc/compat36
-rw-r--r--sys/src/cmd/cc/compat.h3
2 files changed, 20 insertions, 19 deletions
diff --git a/sys/src/cmd/cc/compat b/sys/src/cmd/cc/compat
index df59f0c98..7a9eafa0f 100644
--- a/sys/src/cmd/cc/compat
+++ b/sys/src/cmd/cc/compat
@@ -4,12 +4,6 @@ myaccess(char *f)
return access(f, AEXIST);
}
-void*
-mysbrk(ulong size)
-{
- return sbrk(size);
-}
-
int
mycreat(char *n, int p)
{
@@ -77,27 +71,35 @@ myfork(void)
return fork();
}
+
/*
* real allocs
*/
+
+extern char end[];
+
+char* hunk = end;
+long nhunk;
+uintptr thunk;
+
void
gethunk(void)
{
- char *h;
- ulong nh;
+ long nh;
- nh = NHUNK;
- if(thunk >= 10L*NHUNK)
- nh = 10L*NHUNK;
- h = (char*)mysbrk(nh);
- if(h == (char*)-1)
- sysfatal("out of memory");
- if(nhunk == 0)
- hunk = h;
+ if(thunk < NHUNK)
+ nh = NHUNK;
+ else if(thunk < 1000*NHUNK)
+ nh = thunk;
else
- nh += (h - hunk) - nhunk;
+ nh = 1000*NHUNK;
+
+ if(nhunk < 0)
+ nhunk = 0;
nhunk += nh;
thunk += nh;
+ if(brk(hunk+nhunk) < 0)
+ sysfatal("out of memory");
}
void*
diff --git a/sys/src/cmd/cc/compat.h b/sys/src/cmd/cc/compat.h
index 9f056e36a..d7f3112b5 100644
--- a/sys/src/cmd/cc/compat.h
+++ b/sys/src/cmd/cc/compat.h
@@ -23,12 +23,11 @@ EXTERN int myexec(char*, char*[]);
EXTERN int mydup(int, int);
EXTERN int myfork(void);
EXTERN int mypipe(int*);
-EXTERN void* mysbrk(ulong);
EXTERN void gethunk(void);
EXTERN char* hunk;
-EXTERN uintptr nhunk;
+EXTERN long nhunk;
EXTERN uintptr thunk;
EXTERN void* alloc(long n);