Microchip Technology XC8 Standard Compiler (Workstation) SW006021-1 SW006021-1 User Manual
Product codes
SW006021-1
Error and Warning Messages
2012 Microchip Technology Inc.
DS52053B-page 419
(474) no psect specified for function variable/argument allocation
(Linker)
The FNCONF assembler directive which specifies to the linker information regarding the
auto/parameter block was never seen. This is supplied in the standard runtime files if
necessary. This error may imply that the correct run-time startup module was not
linked. Ensure you have used the FNCONF directive if the runtime startup module is
hand-written.
auto/parameter block was never seen. This is supplied in the standard runtime files if
necessary. This error may imply that the correct run-time startup module was not
linked. Ensure you have used the FNCONF directive if the runtime startup module is
hand-written.
(475) conflicting FNCONF records
(Linker)
The linker has seen two conflicting FNCONF directives. This directive should be speci-
fied only once, and is included in the standard runtime startup code which is normally
linked into every program.
fied only once, and is included in the standard runtime startup code which is normally
linked into every program.
(476) fixup overflow referencing * * (location 0x* (0x*+*), size *, value 0x*)
(Linker)
The linker was asked to relocate (fixup) an item that would not fit back into the space
after relocation. See the following error message (477) for more information.
after relocation. See the following error message (477) for more information.
(477) fixup overflow in expression (location 0x* (0x*+*), size *, value 0x*)
(Linker)
Fixup is the process conducted by the linker of replacing symbolic references to vari-
ables etc, in an assembler instruction with an absolute value. This takes place after
positioning the psects (program sections or blocks) into the available memory on the
target device. Fixup overflow is when the value determined for a symbol is too large to
fit within the allocated space within the assembler instruction. For example, if an
assembler instruction has an 8-bit field to hold an address and the linker determines
that the symbol that has been used to represent this address has the value 0x110, then
clearly this value cannot be inserted into the instruction.
ables etc, in an assembler instruction with an absolute value. This takes place after
positioning the psects (program sections or blocks) into the available memory on the
target device. Fixup overflow is when the value determined for a symbol is too large to
fit within the allocated space within the assembler instruction. For example, if an
assembler instruction has an 8-bit field to hold an address and the linker determines
that the symbol that has been used to represent this address has the value 0x110, then
clearly this value cannot be inserted into the instruction.
The causes for this can be many, but hand-written assembler code is always the first
suspect. Badly written C code can also generate assembler that ultimately generates
fixup overflow errors. Consider the following error message.
suspect. Badly written C code can also generate assembler that ultimately generates
fixup overflow errors. Consider the following error message.
main.obj: 8: Fixup overflow in expression (loc 0x1FD (0x1FC+1),
size 1, value 0x7FC)
This indicates that the file causing the problem was main.obj. This would be typically
be the output of compiling main.c or main.as. This tells you the file in which you
should be looking. The next number (8 in this example) is the record number in the
object file that was causing the problem. If you use the DUMP utility to examine the
object file, you can identify the record; however, you do not normally need to do this.
be the output of compiling main.c or main.as. This tells you the file in which you
should be looking. The next number (8 in this example) is the record number in the
object file that was causing the problem. If you use the DUMP utility to examine the
object file, you can identify the record; however, you do not normally need to do this.
The location (loc) of the instruction (0x1FD), the size (in bytes) of the field in the
instruction for the value (1), and the value which is the actual value the symbol repre-
sents, is typically the only information needed to track down the cause of this error.
Note that a size which is not a multiple of 8 bits will be rounded up to the nearest byte
size, i.e., a 7 bit space in an instruction will be shown as 1 byte.
instruction for the value (1), and the value which is the actual value the symbol repre-
sents, is typically the only information needed to track down the cause of this error.
Note that a size which is not a multiple of 8 bits will be rounded up to the nearest byte
size, i.e., a 7 bit space in an instruction will be shown as 1 byte.
Generate an assembler list file for the appropriate module. Look for the address
specified in the error message.
specified in the error message.
7
07FC
0E21
MOVLW 33
8
07FD
6FFC
MOVWF _foo
9
07FE
0012
RETURN
and to confirm, look for the symbol referenced in the assembler instruction at this
address in the symbol table at the bottom of the same file.
address in the symbol table at the bottom of the same file.
Symbol Table Fri Aug 12 13:17:37 2004
_foo 01FC _main 07FF
In this example, the instruction causing the problem takes an 8-bit offset into a bank of
memory, but clearly the address 0x1FC exceeds this size. Maybe the instruction should
have been written as:
memory, but clearly the address 0x1FC exceeds this size. Maybe the instruction should
have been written as: