64-bit-ify (adhoc varargs are evil).
authorDavid Given <dg@cowlark.com>
Sun, 22 Mar 2015 23:07:59 +0000 (00:07 +0100)
committerDavid Given <dg@cowlark.com>
Sun, 22 Mar 2015 23:07:59 +0000 (00:07 +0100)
mach/proto/as/comm0.h
mach/proto/as/comm1.h
mach/proto/as/comm7.c

index 11f1231..4996350 100644 (file)
@@ -265,3 +265,4 @@ typedef     struct sect_t   sect_t;
 #endif
 
 extern FILE *fopen();   /* some systems don't have this in stdio.h */
+
index 7e46204..6a40a2e 100644 (file)
@@ -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"
index d0a147b..3c7871f 100644 (file)
@@ -11,6 +11,7 @@
 #include       "comm0.h"
 #include       "comm1.h"
 #include       "y.tab.h"
+#include <stdarg.h>
 
 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()