From c5018d70880641643090602b7d9118e7b40bf3cc Mon Sep 17 00:00:00 2001 From: David Given Date: Mon, 23 Mar 2015 00:07:59 +0100 Subject: [PATCH] 64-bit-ify (adhoc varargs are evil). --- mach/proto/as/comm0.h | 1 + mach/proto/as/comm1.h | 4 +++ mach/proto/as/comm7.c | 61 ++++++++++++++++++++++++++----------------- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/mach/proto/as/comm0.h b/mach/proto/as/comm0.h index 11f1231a9..4996350ac 100644 --- a/mach/proto/as/comm0.h +++ b/mach/proto/as/comm0.h @@ -265,3 +265,4 @@ typedef struct sect_t sect_t; #endif extern FILE *fopen(); /* some systems don't have this in stdio.h */ + diff --git a/mach/proto/as/comm1.h b/mach/proto/as/comm1.h index 7e4620471..6a40a2e90 100644 --- a/mach/proto/as/comm1.h +++ b/mach/proto/as/comm1.h @@ -116,6 +116,10 @@ extern valu_t load(); extern FILE *ffcreat(); extern FILE *fftemp(); +extern void fatal(const char* s, ...); +extern void serror(const char* s, ...); +extern void warning(const char* s, ...); + /* ========== Machine dependent C declarations ========== */ #include "mach1.c" diff --git a/mach/proto/as/comm7.c b/mach/proto/as/comm7.c index d0a147bdb..3c7871fbe 100644 --- a/mach/proto/as/comm7.c +++ b/mach/proto/as/comm7.c @@ -11,6 +11,7 @@ #include "comm0.h" #include "comm1.h" #include "y.tab.h" +#include valu_t load(ip) @@ -27,7 +28,7 @@ register item_t *ip; if ((ip->i_type & S_TYP) == S_UND || (ip->i_type & S_COM)) { if (pass == PASS_3) { if (relonami != 0) - serror("relocation error"); + serror("relocation error (relonami=%d, type=%08x)", relonami, ip->i_type); relonami = ip->i_valu+1; } return(0); @@ -380,13 +381,28 @@ wr_fatal() fatal("write error"); } +void diag(const char* tail, const char* s, va_list ap) +{ + fflush(stdout); + if (modulename) + fprintf(stderr, "\"%s\", line %ld: ", modulename, lineno); + else + fprintf(stderr, "%s: ", progname); + vfprintf(stderr, s, ap); + fprintf(stderr, "%s", tail); +} + /* VARARGS1 */ -fatal(s, a1, a2, a3, a4) -char *s; +void fatal(const char* s, ...) { + va_list ap; + va_start(ap, s); + nerrors++; - diag(" (fatal)\n", s, a1, a2, a3, a4); + diag(" (fatal)\n", s, ap); stop(); + + va_end(ap); } #if DEBUG == 2 @@ -400,37 +416,34 @@ char *file; #if DEBUG == 1 assert1() { - diag(" (fatal)\n", "assertion failed"); + fatal("assertion failed"); abort(); } #endif -/* VARARGS1 */ -serror(s, a1, a2, a3, a4) -char *s; +void serror(const char* s, ...) { + va_list ap; + va_start(ap, s); + nerrors++; - diag("\n", s, a1, a2, a3, a4); -} + diag("\n", s, ap); + stop(); -/* VARARGS1 */ -warning(s, a1, a2, a3, a4) -char *s; -{ - diag(" (warning)\n", s, a1, a2, a3, a4); + va_end(ap); } /* VARARGS1 */ -diag(tail, s, a1, a2, a3, a4) -char *tail, *s; +void warning(const char* s, ...) { - fflush(stdout); - if (modulename) - fprintf(stderr, "\"%s\", line %ld: ", modulename, lineno); - else - fprintf(stderr, "%s: ", progname); - fprintf(stderr, s, a1, a2, a3, a4); - fprintf(stderr, tail); + va_list ap; + va_start(ap, s); + + nerrors++; + diag(" (warning)\n", s, ap); + stop(); + + va_end(ap); } nofit() -- 2.34.1