7.2 Errors
Symbol
.abort detected. Abandoning ship.
User error invoked with the .abort
directive.
.else without matching .if - ignored.
An .else
directive was seen without a preceding .if
directive.
“.elseif” after “.else” - ignored
An .elseif
directive specified after a .else
directive. Modify your code so that the .elseif
directive comes before
the .else
directive.
“.elseif” without matching “.if” - ignored.
An .elseif
directive was seen without a preceding .if
directive.
“.endif” without “.if”
An .endif
directive was seen without a preceding .if
directive.
.err encountered.
A user error invoked with the .err
directive.
# sign not valid in data allocation directive.
The # sign cannot be used within a data allocation directive (.byte
,
.word
, .pword
, .long
, etc.)
# warnings, treating warnings as errors.
The --fatal-warnings
command line option was specified on the command
line and warnings existed.
A
absolute address can not be specified for section '.const'.
Section .const
is a C compiler resource. Although it
is permissible for an application to allocate constants in section
.const
explicitly, it is not permissible to assign an absolute
address for this section.
Absolute address must be greater than or equal to 0.
A negative absolute address was specified as the target for the DO or BRA instruction. The assembler does not know anything about negative addresses.
Alignment in CODE section must be at least 2 units.
The alignment value for the .align
directive must be
at least 2 units. Either no alignment was specified or an alignment less than 2 was
specified. Modify the .align
directive to have an alignment of at least
2.
Attributes for section 'name' conflict with implied attributes.
Certain section names have implied attributes. In this case, the attributes specified in a .section directive conflict with its implied attributes. See Directives that Define Sections for more information.
B
backw. ref to unknown label “#:”, 0 assumed.
A backwards reference was made to a local label that was not seen. See Reserved Names for more information on local labels.
bad defsym; format is --defsym name=value.
The format for the command line option --defsym
is
incorrect. Most likely, you are missing the =
between the name and the
value.
Bad expression.
The assembler did not recognize the expression. See Assembler Command Line Options and MPLAB® XC32 Assembly Language for more details on assembler syntax.
bignum invalid; zero assumed.
The big number specified in the expression is not valid.
Byte operations expect an offset between -512 and 511.
The offset specified in [Wn+offset] or [Wn-offset] exceeded the maximum or minimum value allowed for byte instructions.
C
Cannot call a symbol (name) that is not located in an executable section.
Attempted to CALL a symbol that is not located in a CODE section.
Cannot create floating-point number.
Could not create a floating-point number because of exponent overflow or because of a floating-point exception that prohibits the assembler from encoding the floating-point number.
Cannot redefine executable symbol ‘s’.
A statement label or an executable section cannot be redefined with a
.set
or .equ
directive.
Cannot write to output file.
For some reason, the output file could not be written to. Ensure that you have write permission to the file and that there is enough disk space.
Can’t open file_name for reading.
The specified input source file could not be opened. Ensure that the file exists and that you have permission to access the file.
D
directive directive not supported in pic30 target.
The pic30 target does not support this directive. This directive is available in other versions of the assembler, but the pic30 target does not support it for one reason or another. Please check Assembler Directives for a complete list of supported directives.
duplicate “else” - ignored.
Two .else
directives were specified for the same
.if
directive.
E
end of file inside conditional.
The file ends without terminating the current conditional. Add a
.endif
to your code.
end of macro inside conditional.
A conditional is unterminated inside a macro. The
.endif
directive to end the current conditional was not specified
before seeing the .endm
directive.
Expected comma after symbol-name: rest of line ignored.
Missing comma from the .comm
directive after the
symbol name.
Expected constant expression for fill argument.
The fill argument for the .fill
,
.pfill
, .skip
, .pskip
,
.space
or .pspace
directive must be a constant
value. Attempted to use a symbol. Replace symbol with a constant value.
Expected constant expression for new-lc argument.
The new location counter argument for the .org
directive must be a constant value. Attempted to use a symbol. Replace symbol with a
constant value.
Expected constant expression for repeat argument.
The repeat argument for the .fill
,
.pfill
, .skip
, .pskip
,
.space
or .pspace
directive must be a constant
value. Attempted to use a symbol. Replace symbol with a constant value.
Expected constant expression for size argument.
The size argument for the .fill
or
.pfill
directive must be a constant value. Attempted to use a
symbol. Replace symbol with a constant value.
Expression too complex.
An expression is too complex for the assembler to process.
F
floating point number invalid; zero assumed.
The floating-point number specified in the expression is not valid.
I
Ignoring attempt to re-define symbol ‘symbol’.
The symbol that you are attempting to define with
.comm
or .lcomm
has already been defined and is not
a common symbol.
Invalid expression (expr) contained inside of the brackets.
Assembler did not recognize the expression between the brackets.
invalid identifier for “.ifdef”.
The identifier specified after the .ifdef
must be a
symbol. See Reserved Names and
Directives that Control Conditional Assembly for more
details.
Invalid mnemonic: ‘token’.
The token being parsed is not a valid mnemonic for the instruction set.
invalid listing option ‘optarg’.
The sub-option specified is not valid. Acceptable suboptions are
c
, d
, h
, l
,
m
, n
, v
and
=
.
Invalid operands specified (‘insn’). Check operand #n.
The operands specified were invalid. The assembler was able to match n-1 operands successfully. Although there is no assurance that operand #n is the culprit, it is a general idea of where you should begin looking.
Invalid operand syntax (‘insn’).
This message usually comes hand-in-hand with one of the previous operand syntax errors.
Invalid post increment value. Must be +/- 2, 4 or 6.
Assembler saw [Wn]+=value, where value is expected to be a +/- 2, 4 or 6. value was not correct. Specify a value of +/- 2, 4 or 6.
Invalid post decrement value. Must be +/- 2, 4 or 6.
Assembler saw [Wn]-=value, where value is expected to be a +/- 2, 4 or 6. value was not correct. Specify a value of +/- 2, 4 or 6.
Invalid register in operand expression.
Assembler was attempting to find either pre- or post-increment or decrement. The operand did not contain a register. Specify one of the registers w0-w16 or W0-W16.
Invalid register in expression reg.
Assembler saw [junk] or [junk]+=n or [junk]-=n. Was expecting a register between the brackets. Specify one of the registers w0-w16 or W0-W16 between the brackets.
Invalid use of ++ in operand expression.
Assembler was attempting to find either pre- or post-increment. The operand specified was neither pre-increment [++Wn] nor post-increment [Wn++]. Make sure that you are not using the old syntax of [Wn]++.
Invalid use of -- in operand expression.
Assembler was attempting to find either pre- or post-decrement. The operand specified was neither pre-decrement [--Wn] nor post-decrement [Wn--]. Make sure that you are not using the old syntax of [Wn]--.
Invalid value (#) for relocation name.
The final value of the relocation is not a valid value for the operand associated with the given relocation.
'name' is not a valid attribute name.
While processing a .section directive, the assembler found an identifier that is not a valid section attribute.
L
Length of .comm “sym” is already #. Not changed to #.
An attempt was made to redefine the length of a common symbol.
M
misplaced)
Missing parenthesis when expanding a macro. The syntax
\(...)
will literally substitute the text between the parenthesis
into the macro. The trailing parenthesis was missing from this syntax.
Missing model parameter.
Missing symbol in the .irp
or .irpc
directive.
Missing right bracket.
The assembler did not see the terminating bracket ‘]’.
Missing size expression.
The .lcomm
directive is missing the length
expression.
Missing ‘)’ after formals.
Missing trailing parenthesis when listing the macro formals inside of parenthesis.
Missing ‘)’ assumed.
Expected a terminating parenthesis ‘)’ while parsing the expression. Did not see one where expected so assumes where you wanted the trailing parenthesis.
Missing ‘]’ assumed.
Expected a terminating brace ‘]’ while parsing the expression. Did not see one where expected so assumes where you wanted the trailing brace.
Mnemonic not found.
The assembler was expecting to parse an instruction and could not find a mnemonic.
N
Negative of non-absolute symbol name.
Attempted to take the negative of a symbol name that is non-absolute.
For example, .word -sym
, where
sym
is external.
New line in title.
The .title
heading is missing a terminating quote.
non-constant expression in “.elseif” statement.
The argument of the .elseif
directive must be a
constant value able to be resolved on the first pass of the directive. Ensure that any
.equ
of a symbol used in this argument is located before the
directive. See Directives that Control Conditional Assembly
for more details.
non-constant expression in “.if” statement.
The argument of the .if
directive must be a constant
value able to be resolved on the first pass of the directive. Ensure that any
.equ
of a symbol used in this argument is located before the
directive. See Directives that Control Conditional Assembly
for more details.
Number of operands exceeds maximum number of 8.
Too many operands were specified in the instruction. The largest number of operands accepted by any of the 32-bit MCU device instructions is 8.
O
Only support plus register displacement (i.e., [Wb+Wn]).
Assembler found [Wb-Wn]. The syntax only supports a plus register displacement.
Operands share encoding bits. The operands must encode identically.
Two operands are register with displacement addressing mode [Wb+Wn]. The two operands share encoding bits so the Wn portion must match or be able to be switched to match the Wb of the other operand.
operation combines symbols in different segments.
The left-hand side of the expression and the right-hand side of the expression are located in two different sections. The assembler does not know how to handle this expression.
P
paddr modifier not allowed in instruction.
The paddr
operator was specified in an instruction.
This operator can only be specified in a .pword
or
.long
directive as those are the only two locations that are wide
enough to store all 24 bits of the program address.
PC relative expression is not a valid GOTO target.
The assembler does not support expressions which modify the PC of a GOTO destination such as “. + 4” or “sym + 100”.
R
Register expected as first operand of expression expr.
Assembler found [junk+anything] or [junk-anything]. The only valid expression contained in brackets with a + or a - requires that the first operand be a register.
Register or constant literal expected as second operand of expression expr.
Assembler found [Wn+junk] or [Wn-junk]. The only valid operand for this format is a register with plus or minus literal offset or a register with displacement.
Requested alignment 'n' is greater than alignment of absolute section 'name'
When the address()
attribute is used to specify an
absolute address for a section, it constrains the ability of the assembler to align
objects within the section. The alignment specified in a .align
or
.palign
directive must not be greater than the alignment implied by
the section address.
S
section alignment must be a power of two.
The argument to an align()
or
reverse()
section attribute was invalid.
section address 0xnnnn exceeds near data range . section address must be even . section address must be in range [0..0x7ffffe].
The argument to an address()
section attribute was
invalid.
Symbol ‘name’ can not be both weak and common.
Both the .weak
directive and .comm
directive were used on the same symbol within the same source file.
syntax error in .startof. or .sizeof.
The assembler found either .startof
. or
.sizeof
., but did not find the beginning parenthesis ‘(’ or ending
parenthesis ‘)’. See Obtaining the Size of a Specific Section and Obtaining the Starting Address of a Specific Section for details on the .startof
. and
.sizeof
operators.
T
This expression is not a valid GOTO target.
The assembler does not support expressions that include unresolved symbols as a GOTO destination.
Too few operands (‘insn’).
Too few operands were specified for this instruction.
Too many operands (‘insn’).
Too many operands were specified for this instruction.
U
unexpected end of file in irp or irpc.
The end of the file was seen before the terminating
.endr
directive.
unexpected end of file in macro definition.
The end of the file was seen before the terminating
.endm
directive.
Unknown pseudo-op: ‘directive’.
The assembler does not recognize the specified directive. Check to see that you have spelled the directive correctly.
W
WAR hazard detected.
The assembler found a Write After Read hazard in the instruction. A WAR hazard occurs when a common W register is used for both the source and destination given that the source register uses pre/post-increment/decrement.
Word operations expect even offset.
An attempt was made to specify [Wn+offset] or [Wn-offset] where offset is even with a word instruction.
Word operations expect an even offset between -1024 and 1022.
The offset specified in [Wn+offset] or [Wn-offset] was even, but exceeded the maximum or minimum value allowed for word instructions.