shithub: riscv

Download patch

ref: 264dc8f3581afc00bc63ee0cec4c3f762f6bade9
parent: 379f1bc54058acd8ff59e2e9e659e52ddb789bf7
author: Jacob Moody <moody@posixcafe.org>
date: Wed Apr 24 15:22:00 EDT 2024

ja, jl: get them compiling here

--- a/sys/include/a.out.h
+++ b/sys/include/a.out.h
@@ -28,9 +28,11 @@
 #define	L_MAGIC		_MAGIC(0, 23)		/* dec alpha (retired) */
 #define	P_MAGIC		_MAGIC(0, 24)		/* mips 3000 LE */
 #define	U_MAGIC		_MAGIC(0, 25)		/* sparc64 */
+#define	Y_MAGIC		_MAGIC(0, 29)		/* riscv */
 #define	S_MAGIC		_MAGIC(HDR_MAGIC, 26)	/* amd64 */
 #define	T_MAGIC		_MAGIC(HDR_MAGIC, 27)	/* powerpc64 */
 #define	R_MAGIC		_MAGIC(HDR_MAGIC, 28)	/* arm64 */
+#define	B_MAGIC		_MAGIC(HDR_MAGIC, 30)	/* riscv64 */
 
 #define	MIN_MAGIC	8
 #define	MAX_MAGIC	28			/* <= 90 */
--- a/sys/src/cmd/ja/a.h
+++ b/sys/src/cmd/ja/a.h
@@ -2,6 +2,7 @@
 #include <libc.h>
 #include <bio.h>
 #include "../jc/j.out.h"
+#include "../cc/compat.h"
 
 #ifndef	EXTERN
 #define	EXTERN	extern
@@ -95,7 +96,6 @@
 EXTERN	Hist*	ehist;
 EXTERN	int	newflag;
 EXTERN	Hist*	hist;
-EXTERN	char*	hunk;
 EXTERN	char*	include[NINCLUDE];
 EXTERN	Io*	iofree;
 EXTERN	Io*	ionext;
@@ -102,7 +102,6 @@
 EXTERN	Io*	iostack;
 EXTERN	long	lineno;
 EXTERN	int	nerrors;
-EXTERN	long	nhunk;
 EXTERN	int	ninclude;
 EXTERN	int	nosched;
 EXTERN	Gen	nullgen;
@@ -115,7 +114,6 @@
 EXTERN	char	symb[NSYMB];
 EXTERN	int	thechar;
 EXTERN	char*	thestring;
-EXTERN	long	thunk;
 EXTERN	Biobuf	obuf;
 
 void*	alloc(long);
@@ -144,7 +142,7 @@
 void	domacro(void);
 void	macund(void);
 void	macdef(void);
-void	macexpand(Sym*, char*);
+int	macexpand(Sym*, char*, int);
 void	macinc(void);
 void	macprag(void);
 void	maclin(void);
@@ -154,29 +152,7 @@
 void	prfile(long);
 void	outhist(void);
 void	linehist(char*, int);
-void	gethunk(void);
 void	yyerror(char*, ...);
 int	yyparse(void);
 void	setinclude(char*);
 int	assemble(char*);
-
-/*
- *	system-dependent stuff from ../cc/compat.c
- */
-
-enum				/* keep in synch with ../cc/cc.h */
-{
-	Plan9	= 1<<0,
-	Unix	= 1<<1,
-	Windows	= 1<<2
-};
-int	mywait(int*);
-int	mycreat(char*, int);
-int	systemtype(int);
-int	pathchar(void);
-char*	mygetwd(char*, int);
-int	myexec(char*, char*[]);
-int	mydup(int, int);
-int	myfork(void);
-int	mypipe(int*);
-void*	mysbrk(ulong);
--- a/sys/src/cmd/ja/lex.c
+++ b/sys/src/cmd/ja/lex.c
@@ -389,7 +389,6 @@
 	iostack = I;
 	iofree = I;
 	peekc = IGN;
-	nhunk = 0;
 	for(i=0; i<NHASH; i++)
 		hash[i] = S;
 	for(i=0; itab[i].name; i++) {
--- a/sys/src/cmd/jl/asm.c
+++ b/sys/src/cmd/jl/asm.c
@@ -135,7 +135,7 @@
 	case 1:
 		break;
 	case 2:
-		t = thechar == 'j'? (debug['X']? B_MAGIC: Y_MAGIC): Z_MAGIC;
+		t = thechar == 'j'? B_MAGIC: Y_MAGIC;
 		lput(t);
 		lput(textsize);			/* sizes */
 		lput(datsize);
@@ -147,11 +147,6 @@
 		if (t & HDR_MAGIC)
 			llput(entryvalue());	/* va of entry */
 		break;
-	case 5:
-		if(thechar == 'j')
-			elf64(243, ELFDATA2LSB, 0, nil); /* 243 is RISCV */
-		else
-			elf32(243, ELFDATA2LSB, 0, nil);
 	}
 	cflush();
 }
--- a/sys/src/cmd/jl/compat.c
+++ b/sys/src/cmd/jl/compat.c
@@ -1,67 +1,2 @@
 #include	"l.h"
-
-/*
- * fake malloc
- */
-void*
-malloc(uintptr n)
-{
-	void *p;
-
-	while(n & 7)
-		n++;
-	while(nhunk < n)
-		gethunk();
-	p = hunk;
-	nhunk -= n;
-	hunk += n;
-	return p;
-}
-
-void*
-mallocz(uintptr n, int clr)
-{
-	void *p;
-
-	while(n & 7)
-		n++;
-	while(nhunk < n)
-		gethunk();
-	p = hunk;
-	if (clr)
-		memset(p, 0, n);
-	nhunk -= n;
-	hunk += n;
-	return p;
-}
-
-void
-free(void *p)
-{
-	USED(p);
-}
-
-void*
-calloc(uintptr m, uintptr n)
-{
-	void *p;
-
-	n *= m;
-	p = malloc(n);
-	memset(p, 0, n);
-	return p;
-}
-
-void*
-realloc(void*, uintptr)
-{
-	fprint(2, "realloc called\n");
-	abort();
-	return 0;
-}
-
-void
-setmalloctag(void *v, uintptr pc)
-{
-	USED(v, pc);
-}
+#include	"../cc/compat"
--- a/sys/src/cmd/jl/l.h
+++ b/sys/src/cmd/jl/l.h
@@ -2,6 +2,7 @@
 #include	<libc.h>
 #include	<bio.h>
 #include	"../jc/j.out.h"
+#include	"../cc/compat.h"
 
 #ifndef	EXTERN
 #define	EXTERN	extern
@@ -228,7 +229,6 @@
 EXTERN	char*	libraryobj[50];
 EXTERN	int	libraryp;
 EXTERN	int	xrefresolv;
-EXTERN	char*	hunk;		/* compat.c's malloc */
 EXTERN	char	inuxi1[1];
 EXTERN	char	inuxi2[2];
 EXTERN	char	inuxi4[4];
@@ -237,7 +237,6 @@
 EXTERN	long	lcsize;
 EXTERN	char	literal[32];
 EXTERN	int	nerrors;
-EXTERN	long	nhunk;		/* compat.c's malloc */
 EXTERN	Prog	nopalign;
 EXTERN	long	instoffset;
 EXTERN	vlong	instoffx;
@@ -250,7 +249,6 @@
 EXTERN	long	symsize;
 EXTERN	Prog*	textp;
 EXTERN	long	textsize;
-EXTERN	long	thunk;		/* compat.c's malloc */
 EXTERN	int	version;
 EXTERN	char	xcmp[32][32];
 EXTERN	Prog	zprg;
@@ -310,7 +308,6 @@
 void	exchange(Prog*);
 int	find1(long, int);
 void	follow(void);
-void	gethunk(void);
 void	histtoauto(void);
 double	ieeedtod(Ieee*);
 long	ieeedtof(Ieee*);
--- a/sys/src/cmd/jl/obj.c
+++ b/sys/src/cmd/jl/obj.c
@@ -240,7 +240,6 @@
 out:
 	if(debug['v']) {
 		Bprint(&bso, "%5.2f cpu time\n", cputime());
-		Bprint(&bso, "%ld memory used\n", thunk);
 		Bprint(&bso, "%lld sizeof adr\n", (vlong)sizeof(Adr));
 		Bprint(&bso, "%lld sizeof prog\n", (vlong)sizeof(Prog));
 	}
@@ -437,26 +436,12 @@
 		break;
 
 	case D_SCONST:
-		while(nhunk < NSNAME)
-			gethunk();
-		a->sval = (char*)hunk;
-		nhunk -= NSNAME;
-		hunk += NSNAME;
-
+		a->sval = mallocz(NSNAME, 1);
 		memmove(a->sval, p+4, NSNAME);
 		c += NSNAME;
 		break;
 
 	case D_VCONST:
-		while(nhunk < 12)
-			gethunk();
-		if((uintptr)hunk & 2){
-			nhunk -= 4;
-			hunk += 4;
-		}
-		a->vval = (vlong*)hunk;
-		nhunk -= 8;
-		hunk += 8;
 		*(long*)a->vval = p[4] | (p[5]<<8) |
 			(p[6]<<16) | (p[7]<<24);
 		*((long*)a->vval + 1) = p[8] | (p[9]<<8) |
@@ -465,11 +450,7 @@
 		break;
 
 	case D_FCONST:
-		while(nhunk < sizeof(Ieee))
-			gethunk();
-		a->ieee = (Ieee*)hunk;
-		nhunk -= NSNAME;
-		hunk += NSNAME;
+		a->ieee = mallocz(sizeof(Ieee), 1);
 
 		a->ieee->l = p[4] | (p[5]<<8) |
 			(p[6]<<16) | (p[7]<<24);
@@ -494,11 +475,7 @@
 			return c;
 		}
 
-	while(nhunk < sizeof(Auto))
-		gethunk();
-	u = (Auto*)hunk;
-	nhunk -= sizeof(Auto);
-	hunk += sizeof(Auto);
+	u = mallocz(sizeof(Auto), 1);
 
 	u->link = curauto;
 	curauto = u;
@@ -786,12 +763,7 @@
 		goto loop;
 	}
 
-	if(nhunk < sizeof(Prog))
-		gethunk();
-	p = (Prog*)hunk;
-	nhunk -= sizeof(Prog);
-	hunk += sizeof(Prog);
-
+	p = prg();
 	p->as = o;
 	p->reg = bloc[1];
 	p->line = bloc[2] | (bloc[3]<<8) | (bloc[4]<<16) | (bloc[5]<<24);
@@ -1168,11 +1140,7 @@
 		if(memcmp(s->name, symb, l) == 0)
 			return s;
 
-	while(nhunk < sizeof(Sym))
-		gethunk();
-	s = (Sym*)hunk;
-	nhunk -= sizeof(Sym);
-	hunk += sizeof(Sym);
+	s = mallocz(sizeof(Sym), 1);
 
 	s->name = malloc(l);
 	memmove(s->name, symb, l);
@@ -1191,36 +1159,9 @@
 {
 	Prog *p;
 
-	while(nhunk < sizeof(Prog))
-		gethunk();
-	p = (Prog*)hunk;
-	nhunk -= sizeof(Prog);
-	hunk += sizeof(Prog);
-
+	p = malloc(sizeof *p);
 	*p = zprg;
 	return p;
-}
-
-void
-gethunk(void)
-{
-	char *h;
-	long nh;
-
-	nh = NHUNK;
-	if(thunk >= 5L*NHUNK) {
-		nh = 5L*NHUNK;
-		if(thunk >= 25L*NHUNK)
-			nh = 25L*NHUNK;
-	}
-	h = mysbrk(nh);
-	if(h == (char*)-1) {
-		diag("out of memory");
-		errorexit();
-	}
-	hunk = h;
-	nhunk = nh;
-	thunk += nh;
 }
 
 void