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.

Note: The assembler expects that anything that is preceded by a dot (.) is a directive.

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.