summaryrefslogtreecommitdiff
path: root/sys/src/cmd/kl
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-04-11 05:03:49 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2020-04-11 05:03:49 +0200
commit1b8a56941708e6fe884f4649f718fae7c543c045 (patch)
tree3d7be0a7e43b01aba6dd986bff06bcc3947a6d78 /sys/src/cmd/kl
parent9d46360c9d83fa95f42f1eebbad49ecd9281fb0d (diff)
cc, ?[acl]: fix gethunk() and move common memory allocator code to cc/compat
for gethunk() to work, all allocators have to use it, including allocations done by libc thru malloc(), so the fake allocation functions are mandatory for everyone. to avoid duplication the code is moved to cc/compat and prototypes provided in new cc/compat.h header.
Diffstat (limited to 'sys/src/cmd/kl')
-rw-r--r--sys/src/cmd/kl/compat.c56
-rw-r--r--sys/src/cmd/kl/l.h10
-rw-r--r--sys/src/cmd/kl/mkfile4
-rw-r--r--sys/src/cmd/kl/obj.c25
4 files changed, 7 insertions, 88 deletions
diff --git a/sys/src/cmd/kl/compat.c b/sys/src/cmd/kl/compat.c
index 1d9f89e43..54ac0283e 100644
--- a/sys/src/cmd/kl/compat.c
+++ b/sys/src/cmd/kl/compat.c
@@ -1,56 +1,2 @@
#include "l.h"
-
-/*
- * fake malloc
- */
-void*
-malloc(ulong n)
-{
- void *p;
-
- while(n & 7)
- n++;
- while(nhunk < n)
- gethunk();
- p = hunk;
- nhunk -= n;
- hunk += n;
- return p;
-}
-
-void
-free(void *p)
-{
- USED(p);
-}
-
-void*
-calloc(ulong m, ulong n)
-{
- void *p;
-
- n *= m;
- p = malloc(n);
- memset(p, 0, n);
- return p;
-}
-
-void*
-realloc(void *p, ulong n)
-{
- fprint(2, "realloc(0x%p %ld) called\n", p, n);
- abort();
- return 0;
-}
-
-void*
-mysbrk(ulong size)
-{
- return sbrk(size);
-}
-
-void
-setmalloctag(void *v, uintptr pc)
-{
- USED(v, pc);
-}
+#include "../cc/compat"
diff --git a/sys/src/cmd/kl/l.h b/sys/src/cmd/kl/l.h
index e296e4509..0ac5020db 100644
--- a/sys/src/cmd/kl/l.h
+++ b/sys/src/cmd/kl/l.h
@@ -2,10 +2,7 @@
#include <libc.h>
#include <bio.h>
#include "../kc/k.out.h"
-
-#ifndef EXTERN
-#define EXTERN extern
-#endif
+#include "../cc/compat.h"
typedef struct Adr Adr;
typedef struct Sym Sym;
@@ -224,7 +221,6 @@ EXTERN char* library[50];
EXTERN char* libraryobj[50];
EXTERN int libraryp;
EXTERN int xrefresolv;
-EXTERN char* hunk;
EXTERN char inuxi1[1];
EXTERN char inuxi2[2];
EXTERN char inuxi4[4];
@@ -232,7 +228,6 @@ EXTERN Prog* lastp;
EXTERN long lcsize;
EXTERN char literal[32];
EXTERN int nerrors;
-EXTERN long nhunk;
EXTERN char* noname;
EXTERN long instoffset;
EXTERN char* outfile;
@@ -241,7 +236,6 @@ EXTERN long symsize;
EXTERN long staticgen;
EXTERN Prog* textp;
EXTERN long textsize;
-EXTERN uintptr tothunk;
EXTERN char xcmp[C_NCLASS][C_NCLASS];
EXTERN int version;
EXTERN Prog zprg;
@@ -290,7 +284,6 @@ void errorexit(void);
void exchange(Prog*);
int find1(long, int);
void follow(void);
-void gethunk(void);
double ieeedtod(Ieee*);
long ieeedtof(Ieee*);
int isnop(Prog*);
@@ -301,7 +294,6 @@ void initmuldiv(void);
Sym* lookup(char*, int);
void lput(long);
void mkfwd(void);
-void* mysbrk(ulong);
void names(void);
void nocache(Prog*);
void noops(void);
diff --git a/sys/src/cmd/kl/mkfile b/sys/src/cmd/kl/mkfile
index b5befdd38..3c128f703 100644
--- a/sys/src/cmd/kl/mkfile
+++ b/sys/src/cmd/kl/mkfile
@@ -16,9 +16,13 @@ OFILES=\
HFILES=\
l.h\
../kc/k.out.h\
+ ../cc/compat.h\
BIN=/$objtype/bin
</sys/src/cmd/mkone
enam.$O: ../kc/enam.c
$CC $CFLAGS ../kc/enam.c
+
+compat.$O: ../cc/compat
+
diff --git a/sys/src/cmd/kl/obj.c b/sys/src/cmd/kl/obj.c
index b778cfd8d..dd324dfb3 100644
--- a/sys/src/cmd/kl/obj.c
+++ b/sys/src/cmd/kl/obj.c
@@ -194,7 +194,7 @@ main(int argc, char *argv[])
out:
if(debug['v']) {
Bprint(&bso, "%5.2f cpu time\n", cputime());
- Bprint(&bso, "%zud memory used\n", tothunk);
+ Bprint(&bso, "%zud memory used\n", thunk);
Bprint(&bso, "%d sizeof adr\n", sizeof(Adr));
Bprint(&bso, "%d sizeof prog\n", sizeof(Prog));
}
@@ -977,29 +977,6 @@ prg(void)
}
void
-gethunk(void)
-{
- char *h;
- long nh;
-
- nh = NHUNK;
- if(tothunk >= 5L*NHUNK) {
- nh = 5L*NHUNK;
- if(tothunk >= 25L*NHUNK)
- nh = 25L*NHUNK;
- }
- h = mysbrk(nh);
- if(h == (char *)-1) {
- diag("out of memory");
- errorexit();
- }
-
- hunk = h;
- nhunk = nh;
- tothunk += nh;
-}
-
-void
doprof1(void)
{
Sym *s;