OpenCores
URL https://opencores.org/ocsvn/forwardcom/forwardcom/trunk

Subversion Repositories forwardcom

[/] [forwardcom/] [bintools/] [error.h] - Blame information for rev 37

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 34 Agner
/****************************   error.h   ************************************
2
* Author:        Agner Fog
3
* Date created:  2017-04-17
4
* Last modified: 2021-03-30
5
* Version:       1.11
6
* Project:       Binary tools for ForwardCom instruction set
7
* Module:        error.h
8
* Description:
9
* Header file for error handler error.cpp
10
*
11
* Copyright 2006-2021 GNU General Public License http://www.gnu.org/licenses
12
*****************************************************************************/
13
#pragma once
14
 
15
// Error id numbers, general errors
16
const int ERR_MULTIPLE_COMMANDS        = 100;
17
const int ERR_OUTFILE_IGNORED          = 101;
18
const int ERR_EMPTY_OPTION             = 102;
19
const int ERR_UNKNOWN_OPTION           = 103;
20
const int ERR_UNKNOWN_ERROR_NUM        = 104;
21
const int ERR_MULTIPLE_IO_FILES        = 105;
22
const int ERR_DUMP_NOT_SUPPORTED       = 106;
23
const int ERR_INPUT_FILE               = 107;
24
const int ERR_OUTPUT_FILE              = 108;
25
const int ERR_UNKNOWN_FILE_TYPE        = 109;
26
const int ERR_FILE_SIZE                = 110;
27
const int ERR_FILE_NAME_LONG           = 111;
28
const int ERR_FILES_SAME_NAME          = 112;
29
const int ERR_TOO_MANY_RESP_FILES      = 112;
30
 
31
const int ERR_MEMORY_ALLOCATION        = 120;
32
const int ERR_CONTAINER_INDEX          = 121;
33
const int ERR_CONTAINER_OVERFLOW       = 122;
34
const int ERR_INDEX_OUT_OF_RANGE       = 123;
35
 
36
const int ERR_ELF_RECORD_SIZE          = 130;
37
const int ERR_ELF_SYMTAB_MISSING       = 131;
38
const int ERR_ELF_INDEX_RANGE          = 132;
39
const int ERR_ELF_UNKNOWN_SECTION      = 133;
40
const int ERR_ELF_STRING_TABLE         = 134;
41
const int ERR_ELF_NO_SECTIONS          = 135;
42
 
43
const int ERR_INSTRUCTION_LIST_SYNTAX  = 140;
44
const int ERR_INSTRUCTION_LIST_QUOTE   = 141;
45
 
46
const int ERR_LIBRARY_FILE_TYPE        = 200;
47
const int ERR_LIBRARY_FILE_CORRUPT     = 201;
48
const int ERR_DUPLICATE_NAME_COMMANDL  = 202;
49
const int ERR_DUPLICATE_NAME_IN_LIB    = 203;
50
const int ERR_DUPLICATE_SYMBOL_IN_LIB  = 204;
51
const int ERR_NO_SYMTAB_IN_LIB         = 205;
52
const int ERR_MEMBER_NOT_FOUND_DEL     = 206;
53
const int ERR_MEMBER_NOT_FOUND_EXTRACT = 207;
54
const int ERR_LIBRARY_LIST_ONLY        = 208;
55
const int ERR_LIBRARY_MEMBER_TYPE      = 209;
56
 
57
const int ERR_LINK_LIST_ONLY           = 300;
58
const int ERR_LINK_FILE_TYPE           = 301;
59
const int ERR_LINK_FILE_TYPE_LIB       = 302;
60
const int ERR_LINK_FILE_TYPE_EXE       = 303;
61
const int ERR_LINK_COMMUNAL            = 304;
62
const int ERR_LINK_DUPLICATE_SYMBOL    = 305;
63
const int ERR_LINK_DIFFERENT_BASE      = 306;
64
const int ERR_LINK_MISALIGNED_TARGET   = 307;
65
const int ERR_LINK_OVERFLOW            = 308;
66
const int ERR_LINK_RELOCATION_OVERFLOW = 309;
67
const int ERR_LINK_REGUSE              = 310;
68
const int ERR_LINK_MODULE_NOT_FOUND    = 311;
69
const int ERR_EVENT_SIZE               = 312;
70
const int ERR_REL_SYMBOL_NOT_FOUND     = 313;
71
const int ERR_CANT_RELINK_MODULE       = 314;
72
const int ERR_CANT_RELINK_LIBRARY      = 315;
73
const int ERR_RELINK_MODULE_NOT_FOUND  = 316;
74
const int ERR_RELINK_LIBRARY_NOT_FOUND = 317;
75
const int ERR_RELINK_BASE_POINTER_MOD  = 318;
76
const int ERR_INPUT_NOT_RELINKABLE     = 319;
77
const int ERR_LINK_UNRESOLVED          = 320;
78
const int ERR_LINK_UNRESOLVED_WARN     = 321;
79
 
80
const int ERR_TOO_MANY_ERRORS          = 500;
81
const int ERR_BIG_ENDIAN               = 501;
82
const int ERR_INTERNAL                 = 502;
83
 
84
 
85
// Error id numbers during assembly
86
const int ERR_CONTROL_CHAR             = 0x100;  // illegal control character
87
const int ERR_ILLEGAL_CHAR             = 0x101;  // illegal character
88
const int ERR_COMMENT_BEGIN            = 0x102;  // unmatched comment begin
89
const int ERR_COMMENT_END              = 0x103;  // unmatched comment end
90
const int ERR_BRACKET_BEGIN            = 0x104;  // unmatched begin bracket
91
const int ERR_BRACKET_END              = 0x105;  // unmatched end bracket
92
const int ERR_QUOTE_BEGIN              = 0x106;  // unmatched quote begin
93
const int ERR_QUESTION_MARK            = 0x108;  // unmatched '?'
94
const int ERR_COLON                    = 0x109;  // unmatched ':'
95
const int ERR_SYMBOL_DEFINED           = 0x10A;  // symbol already defined
96
const int ERR_SYMBOL_UNDEFINED         = 0x10B;  // symbol not defined
97
const int ERR_UNFINISHED_VAR           = 0x10C;  // unfinished variable declaration
98
const int ERR_MISSING_EXPR             = 0x10D;  // unfinished variable declaration
99
const int ERR_MULTIDIMENSIONAL         = 0x110;  // multidimensional array not allowed
100
const int ERR_CONFLICT_ARRAYSZ         = 0x111;  // conflicting array size
101
const int ERR_CONFLICT_TYPE            = 0x112;  // conflicting array type
102
const int ERR_CONDITION                = 0x113;  // incorrect condition for ?: operator
103
const int ERR_OVERFLOW                 = 0x114;  // overflow in asseble-time calculation
104
const int ERR_WRONG_TYPE               = 0x115;  // wrong type for operator
105
const int ERR_WRONG_TYPE_VAR           = 0x116;  // wrong or mismatched type for variable
106
const int ERR_WRONG_OPERANDS           = 0x117;  // wrong operands for this instruction
107
const int ERR_MISSING_DESTINATION      = 0x118;  // destination required
108
const int ERR_NO_DESTINATION           = 0x119;  // should not have destination
109
const int ERR_NOT_OP_AMBIGUOUS         = 0x11A;  // '!' operator on register or memory is ambiguous
110
const int ERR_TOO_COMPLEX              = 0x11B;  // expression is too complex for a single instruction
111
const int ERR_MASK_NOT_REGISTER        = 0x11C;  // mask must be a register
112
const int ERR_FALLBACK_WRONG           = 0x11D;  // fallback must be a register or zero
113
const int ERR_CONSTANT_TOO_LARGE       = 0x11E;  // immediate constant too large for specified type
114
const int ERR_ALIGNMENT                = 0x11F;  // alignment too high or not a power of 2
115
const int ERR_SECTION_DIFFERENT_TYPE   = 0x120;  // redefinition of section is different type
116
const int ERR_EXPECT_COLON             = 0x121;  // expect colon after label
117
const int ERR_STRING_TYPE              = 0x122;  // string must have type int8
118
const int ERR_NONZERO_IN_BSS           = 0x123;  // nonzero value in uninitialized section
119
const int ERR_SYMBOL_REDEFINED         = 0x124;  // symbol has been assigned more than one value
120
const int ERR_EXPORT_EXPRESSION        = 0x125;  // cannot export expression
121
const int ERR_CANNOT_EXPORT            = 0x126;  // cannot export this type of symbol
122
const int ERR_CODE_WO_SECTION          = 0x127;  // code without section
123
const int ERR_DATA_WO_SECTION          = 0x128;  // data without section
124
const int ERR_MIX_DATA_AND_CODE        = 0x129;  // mixing data and code in same section
125
const int ERR_MUST_BE_CONSTANT         = 0x12A;  // option value must be constant
126
const int ERR_MEM_COMPONENT_TWICE      = 0x140;  // component of memory operand specified twice
127
const int ERR_SCALE_FACTOR             = 0x141;  // wrong scale factor
128
const int ERR_MUST_BE_GP               = 0x142;  // length or broadcast must be general purpose register
129
const int ERR_LIMIT_AND_OFFSET         = 0x143;  // cannot have both limit and offset
130
const int ERR_NOT_INSIDE_MEM           = 0x144;  // mask option not allowed inside memory operand
131
const int ERR_TOO_MANY_OPERANDS        = 0x145;  // too many operands
132
const int ERR_TOO_FEW_OPERANDS         = 0x146;  // too many operands
133
const int ERR_OPERANDS_WRONG_ORDER     = 0x147;  // operands in wrong order
134
const int ERR_BOTH_MEM_AND_IMMEDIATE   = 0x148;  // cannot have both memory operand and immediate constant
135
const int ERR_BOTH_MEM_AND_OPTIONS     = 0x149;  // cannot have both memory operand and options
136
const int ERR_UNFINISHED_INSTRUCTION   = 0x14A;  // unfinished instruction code
137
const int ERR_TYPE_MISSING             = 0x14B;  // type must be specified
138
const int ERR_MASK_FALLBACK_TYPE       = 0x14C;  // mask and fallback must have same type as destination
139
const int ERR_NEG_INDEX_LENGTH         = 0x14D;  // length must be the same as negative index
140
const int ERR_INDEX_AND_LENGTH         = 0x14E;  // cannot have length/broadcast and index
141
const int ERR_MASK_REGISTER            = 0x14F;  // mask register number > 6
142
const int ERR_LIMIT_TOO_HIGH           = 0x150;  // limit on memory operand too high
143
const int ERR_NO_INSTRUCTION_FIT       = 0x151;  // no version of this instruction fits the specified operands
144
const int ERR_CANNOT_SWAP_VECT         = 0x152;  // cannot change the order of vector registers
145
const int ERR_EXPECT_JUMP_TARGET       = 0x158;  // expecting jump target
146
const int ERR_JUMP_TARGET_MISALIGN     = 0x159;  // jump target offset must be divisible by 4
147
const int ERR_ABS_RELOCATION           = 0x15a;  // absolute address not allowed here
148
const int ERR_ABS_RELOCATION_WARN      = 0x15b;  // absolute address allowed, but not recommended. make warning
149
const int ERR_RELOCATION_DOMAIN        = 0x15c;  // cannot calculate difference between two symbols in different domains
150
const int ERR_WRONG_REG_TYPE           = 0x160;  // wrong type for register operand
151
const int ERR_CONFLICT_OPTIONS         = 0x161;  // conflicting options on memory operand
152
const int ERR_VECTOR_OPTION            = 0x162;  // vector option applied to non-vector operands
153
const int ERR_LENGTH_OPTION_MISS       = 0x163;  // vector memory operand must have scalar, length, or broadcast option
154
const int ERR_DEST_BROADCAST           = 0x164;  // memory destination operand cannot have broadcast
155
const int ERR_OFFSET_TOO_LARGE         = 0x165;  // address offset too large
156
const int ERR_LIMIT_TOO_LARGE          = 0x166;  // index limit too large
157
const int ERR_IMMEDIATE_TOO_LARGE      = 0x167;  // instruction format does not have space for full-size constant and option/signbits
158
const int ERR_TOO_LARGE_FOR_JUMP       = 0x168;  // jump instruction does not have space for full-size constant
159
const int ERR_CANNOT_HAVE_OPTION       = 0x169;  // this instruction cannot have options
160
const int ERR_CANNOT_HAVEFALLBACK1     = 0x16A;  // cannot have fallback register
161
const int ERR_CANNOT_HAVEFALLBACK2     = 0x16B;  // cannot have fallback != destination with this memory operand
162
const int ERR_3OP_AND_FALLBACK         = 0x16C;  // cannot have fallback != destination with three operands
163
const int ERR_3OP_AND_MEM              = 0x16D;  // the first source register must be the same as the destination when there is a memory operand with index or vector
164
const int ERR_R28_30_BASE              = 0x16E;  // cannot use r28-r30 as base pointer with more than 8 bits offset
165
const int ERR_NO_BASE                  = 0x16F;  // memory operand has no base pointer
166
const int ERR_MEM_WO_BRACKET           = 0x170;  // memory operand requires [] bracket
167
const int ERR_UNKNOWN                  = 0x171;  // unknown error during assembly
168
const int ERR_UNMATCHED_END            = 0x210;  // unmatched end
169
const int ERR_SECTION_MISS_END         = 0x211;  // missing end of section
170
const int ERR_FUNCTION_MISS_END        = 0x212;  // missing end of function
171
const int ERR_ELSE_WO_IF               = 0x222;  // else without if
172
const int ERR_EXPECT_PARENTHESIS       = 0x223;  // expecting parenthesis after if, for, while, switch
173
const int ERR_EXPECT_BRACKET           = 0x224;  // expecting bracket after if, for, while, switch()
174
const int ERR_EXPECT_LOGICAL           = 0x225;  // expecting logical expression in if() or while()
175
const int ERR_MEM_NOT_ALLOWED          = 0x226;  // cannot have memory operand
176
//const int ERR_MUST_BE_POW2             = 0x227;  // constant must have only one bit set
177
const int ERR_WHILE_EXPECTED           = 0x228;  // 'while' expected after 'do'
178
const int ERR_MISPLACED_BREAK          = 0x229;  // nothing: to break out of
179
const int ERR_MISPLACED_CONTINUE       = 0x22A;  // no loop to continue
180
 
181
 
182
 
183
// Structure for defining error message texts
184
struct SErrorText {
185
   int  errorNumber;                             // Error number
186
   int  status;                                  // bit 0-3 = severity: 0 = ignore, 1 = warning, 2 = error, 9 = abort
187
                                                 // bit 8   = error number not found
188
   char const * text;                            // Error text
189
};
190
 
191
// General error routine for reporting warning and error messages to STDERR output
192
class CErrorReporter {
193
public:
194
   CErrorReporter();    // Default constructor
195
   static SErrorText *FindError(int ErrorNumber);// Search for error in ErrorTexts
196
   void submit(int ErrorNumber);                 // Print error message
197
   void submit(int ErrorNumber, int extra);      // Print error message with extra info
198
   void submit(int ErrorNumber, int, int);       // Print error message with two extra numbers inserted
199
   void submit(int ErrorNumber, char const * extra); // Print error message with extra info
200
   void submit(int ErrorNumber, char const *, char const *); // Print error message with two extra text fields inserted
201
   void submit(int ErrorNumber, char const * extra1, char const * extra2, char const * extra3);// Print error message with three extra text fields
202
   void submit(int ErrorNumber, int, char const *); // Print error message with two extra text fields inserted
203
   int number();                                 // Get number of errors
204
   int getWorstError();                          // Get highest warning or error number encountered
205
   void clearError(int ErrorNumber);             // Ignore further occurrences of this error
206
protected:
207
   int numErrors;                                // Number of errors detected
208
   int numWarnings;                              // Number of warnings detected
209
   int worstError;                               // Highest error number encountered
210
   int maxWarnings;                              // Max number of warning messages to pring
211
   int maxErrors;                                // Max number of error messages to print
212
   void handleError(SErrorText * err, char const * text); // Used by submit function
213
};
214
 
215
extern CErrorReporter err;  // Error handling object is in error.cpp
216
extern SErrorText errorTexts[]; // List of error texts
217
 
218
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.