commit 12495aa767d04446770e1a3133306c7c7195ffba
parent 587907d1caa84b31990ca1a8e131e6fe9d7d62b0
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Fri, 4 Jan 2019 15:17:28 +0000
[as] Remove support for myro
As is going to generate only a binary dump of the output.
Diffstat:
6 files changed, 33 insertions(+), 217 deletions(-)
diff --git a/src/as/Makefile b/src/as/Makefile
@@ -10,7 +10,6 @@ OBJS = main.o \
ins.o \
parser.o \
expr.o \
- myro.o \
TARGET = $(LIBEXEC)/as-amd64 \
$(LIBEXEC)/as-i386 \
diff --git a/src/as/as.h b/src/as/as.h
@@ -188,15 +188,6 @@ extern Node *moperand(void);
/* ins.c */
extern char *tobytes(TUINT v, int n, int inc);
-/* format.c */
-extern void writeout(char *name);
-extern void reloc(Symbol *sym,
- unsigned flags,
- unsigned size,
- unsigned nbits,
- unsigned shift);
-
-
/*
* Definition of global variables
*/
diff --git a/src/as/deps.mk b/src/as/deps.mk
@@ -6,9 +6,6 @@ ins.o: as.h
main.o: $(INCDIR)/scc/scc/arg.h
main.o: $(INCDIR)/scc/scc/scc.h
main.o: as.h
-myro.o: $(INCDIR)/scc/scc/myro.h
-myro.o: $(INCDIR)/scc/scc/scc.h
-myro.o: as.h
parser.o: $(INCDIR)/scc/scc/cstd.h
parser.o: $(INCDIR)/scc/scc/scc.h
parser.o: as.h
diff --git a/src/as/ins.c b/src/as/ins.c
@@ -16,6 +16,15 @@ enum {
TYPE,
};
+static void
+reloc(Symbol *sym,
+ unsigned flags,
+ unsigned size,
+ unsigned nbits,
+ unsigned shift)
+{
+}
+
char *
tobytes(TUINT v, int nbytes, int inc)
{
diff --git a/src/as/main.c b/src/as/main.c
@@ -1,5 +1,6 @@
static char sccsid[] = "@(#) ./as/main.c";
+#include <errno.h>
#include <ctype.h>
#include <setjmp.h>
#include <stdio.h>
@@ -14,6 +15,29 @@ char *argv0;
char *outfile, *infile;
int endpass;
+static void
+writeout(char *fname)
+{
+ Section *sp;
+ FILE *fp;
+
+ if ((fp = fopen(fname, "wb")) == NULL)
+ goto error;
+
+ for (sp = seclist; sp; sp = sp->next) {
+ if (!sp->mem)
+ continue;
+ fwrite(sp->mem, sp->max - sp->base, 1, fp);
+ }
+
+ if (fclose(fp))
+ goto error;
+ return;
+
+error:
+ fprintf(stderr, "as: %s: %s\n", fname, strerror(errno));
+ exit(EXIT_FAILURE);
+}
static void
cleanup(void)
diff --git a/src/as/myro.c b/src/as/myro.c
@@ -1,204 +0,0 @@
-static char sccsid[] = "@(#) ./as/myro.c";
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <scc/scc.h>
-#include <scc/myro.h>
-#include "as.h"
-
-#define FORMAT "z80-scc"
-
-static Reloc *relocs;
-static size_t relcap, relsiz;
-
-static size_t
-writestrings(FILE *fp)
-{
- int type;
- size_t off = 0;
- size_t len;
- Symbol *sym;
- Section *sp;
- String *str;
-
- fwrite(FORMAT, sizeof(FORMAT), 1, fp);
- off = sizeof(FORMAT);
-
- for (sym = symlist; sym; sym = sym->next) {
- if (sym->flags & FREG)
- continue;
- str = &sym->name;
- len = strlen(str->buf) + 1;
- fwrite(str->buf, len, 1, fp);
- str->offset = off;
- off += len;
- }
-
- return off;
-}
-
-static unsigned
-getsecflags(Section *sp)
-{
- unsigned flags = 0;
-
- if (sp->flags & SREAD)
- flags |= MYROSEC_READ;
- if (sp->flags & SWRITE)
- flags |= MYROSEC_WRITE;
- if (sp->flags & SFILE)
- flags |= MYROSEC_FILE;
- if (sp->flags & SEXEC)
- flags |= MYROSEC_EXEC;
- if (sp->flags & SLOAD)
- flags |= MYROSEC_LOAD;
- if (sp->flags & SABS)
- flags |= MYROSEC_ABS;
- return flags;
-}
-
-static size_t
-writesections(FILE *fp)
-{
- Section *sp;
- size_t off = 0;
- struct myrosect sect;
- unsigned id = 0;;
-
- for (sp = seclist; sp; sp = sp->next) {
- if (id == MYROMAXSEC)
- die("too many sections for a myro file");
- sp->id = id++;
- sect.name = sp->sym->name.offset;
- sect.flags = getsecflags(sp);
- sect.fill = sp->fill;
- sect.aligment = sp->aligment;
- sect.offset = off;
- sect.len = sp->max - sp->base;
- off += wrmyrosec(fp, §);
- }
-
- return off;
-}
-
-static unsigned
-getsymflags(Symbol *sym)
-{
- unsigned flags = 0;
-
- if (sym->flags & FCOMMON)
- flags |= MYROSYM_COMMON;
- if (sym->flags & FEXTERN)
- flags |= MYROSYM_EXTERN;
- if (!(sym->flags & FDEF))
- flags |= MYROSYM_UNDEF;
- return flags;
-}
-
-static size_t
-writesymbols(FILE *fp)
-{
- Symbol *sym;
- size_t off = 0;
- struct myrosym symbol;
-
- for (sym = symlist; sym; sym = sym->next) {
- if (sym->flags & (FREG|FSECT))
- continue;
- symbol.name = sym->name.offset;
- symbol.type = -1;
- symbol.section = sym->section->id;
- symbol.flags = getsymflags(sym);
- symbol.offset = sym->value;
- symbol.len = sym->size;
- off += wrmyrosym(fp, &symbol);
- }
-
- return off;
-}
-
-static size_t
-writerelocs(FILE *fp)
-{
- Reloc *bp, *lim;
- size_t off = 0;
- struct myrorel reloc;
-
- lim = &relocs[relsiz];
- for (bp = relocs; bp < lim; ++bp) {
- reloc.id = 0;
- reloc.flags = bp->flags;
- reloc.size = bp->size;
- reloc.nbits = bp->nbits;
- reloc.shift = bp->shift;
- reloc.offset = bp->offset;
- off += wrmyrorel(fp, &reloc);
- }
- return off;
-}
-
-static void
-writedata(FILE *fp)
-{
- Section *sp;
-
- for (sp = seclist; sp; sp = sp->next) {
- if (!sp->mem)
- continue;
- fwrite(sp->mem, sp->max - sp->base, 1, fp);
- }
-}
-
-void
-writeout(char *name)
-{
- FILE *fp;
- struct myrohdr hdr = { .magic = MYROMAGIC };
-
- if ((fp = fopen(name, "wb")) == NULL)
- die("error opening output file '%s'\n", name);
-
- wrmyrohdr(fp, &hdr);
- hdr.strsize = writestrings(fp);
- hdr.secsize = writesections(fp);
- hdr.symsize = writesymbols(fp);
- hdr.relsize = writerelocs(fp);
- writedata(fp);
-
- fseek(fp, 0, SEEK_SET);
- wrmyrohdr(fp, &hdr);
-
- if (fclose(fp))
- die("error writing the output file");
-}
-
-void
-reloc(Symbol *sym,
- unsigned flags, unsigned size, unsigned nbits, unsigned shift)
-{
- size_t tmp;
- Reloc *p;
-
- if (pass == 1)
- return;
-
- if (relcap == relsiz) {
- tmp = ((relcap + 1) * 3) / 2;
- if ((p = realloc(relocs, tmp * sizeof(Reloc))) == NULL) {
- tmp = relcap + 1;
- p = xrealloc(relocs, tmp * sizeof(Reloc));
- }
- relcap = tmp;
- relocs = p;
- }
-
- p = &relocs[relsiz++];
- p->sym = sym;
- p->flags = flags;
- p->size = size;
- p->nbits = nbits;
- p->shift = shift;
- p->offset = cursec->pc - cursec->base;
-}