|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)error.c 1.1 86/02/03 Copyr 1985 Sun Micro";
3: #endif
4:
5: /*
6: * Copyright (c) 1985 by Sun Microsystems, Inc.
7: */
8:
9:
10: #include "as.h"
11:
12: /*
13: * routines to write error messages and warnings.
14: */
15:
16:
17: char *e_messages[] = {
18: /* E_NOERROR */ "<unused>",
19: /* E_BADCHAR */ "Invalid character",
20: /* E_MULTSYM */ "Multiply defined symbol",
21: /* E_NOSPACE */ "Symbol storage exceeded",
22: /* E_OFFSET */ "Offset too large",
23: /* E_SYMLEN */ "Symbol too long",
24: /* E_SYMDEF */ "Undefined symbol",
25: /* E_CONSTANT */ "Invalid constant",
26: /* E_TERM */ "Invalid term",
27: /* E_OPERATOR */ "Invalid operator",
28: /* E_RELOCATE */ "Non-relocatable expression",
29: /* E_TYPE */ "Wrong type for instruction",
30: /* E_OPERAND */ "Invalid operand",
31: /* E_SYMBOL */ "Invalid symbol",
32: /* E_EQUALS */ "Invalid assignment",
33: /* E_NLABELS */ "Too many labels",
34: /* E_OPCODE */ "Invalid op-code",
35: /* E_STRING */ "Invalid string",
36: /* E_PHASE */ "Unacceptable relocatable expression",
37: /* E_NUMOPS */ "Wrong number of operands",
38: /* E_LINELONG */ "Line too long",
39: /* E_REG */ "Invalid register expression",
40: /* E_IADDR */ "Invalid machine address",
41: /* E_PAREN */ "Missing close-paren `)'",
42: /* E_ODDADDR */ "Odd address",
43: /* E_UNDEFINED_L */ "Undefined L-symbol",
44: /* E_REGLIST */ "Invalid register list",
45: 0
46: } ;
47:
48: int errors = 0; /* Number of errors in this pass */
49: extern char * asm_name; /* from init.c */
50:
51: /* Sys_Error is called when a System Error occurs, that is, something is wrong
52: with the assembler itself. Explanation is a string suitable for a printf
53: control string which explains the error, and Number is the value of the
54: offending parameter. This routine will not return.
55: */
56: /*VARARGS 1*/
57: sys_error(Explanation,Number)
58: char *Explanation;
59: {
60: fflush(stdout);
61: fprintf(stderr, "%s: Optimizer Error-- ", asm_name);
62: fprintf(stderr, Explanation,Number);
63: exit(-1);
64: }
65:
66: /* This is called whenever the assembler recognizes an error in the current
67: statement. It registers the error, so that an error code will be listed with
68: the statement, and a description of the error will be printed at the end of
69: the listing */
70:
71: prog_error(code)
72: err_code code;
73: {
74: errors++; /* increment error count */
75: fprintf(stderr,"%s: error (%d): %s\n",asm_name,
76: line_no,e_messages[(int)code]);
77: }
78:
79: /* Prog_Warning registers a warning on a statement. A warning is like an error,
80: in that something is probably amiss, but the assembler will still try
81: to generate the .o file.
82: */
83:
84: prog_warning(code)
85: err_code code;
86: {
87:
88: #if AS
89: if (pass != 2) return;
90: #endif
91: fprintf(stderr,"%s: warning (%d): %s\n",asm_name,
92: line_no,e_messages[(int)code]);
93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.