Microchip Technology XC8 Standard Compiler (Workstation) SW006021-1 SW006021-1 User Manual

Product codes
SW006021-1
Page of 518
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.
(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.
(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.
(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.
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.
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.
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.
Generate an assembler list file for the appropriate module. Look for the address 
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.
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: