5.15.1.1 Program Space Psects

The following psects reside in program memory.

checksum
A psect that is used to mark the position of a checksum that has been requested using the -mchecksum option. See 4.6.1.2 Checksum Option for more information. The checksum value is added after the linker has executed so you will not see the contents of this psect in the assembly list file, nor specific information in the map file. Do not change the default linker options relating to this psect.
cinit
The psect used by the C initialization runtime startup code. Code in this psect is output by the code generator along with the generated code for the C program. This psect can be linked anywhere within a program memory page, provided it does not interfere with the requirements of other psects.
config
The psect used to store the Configuration Words. This psect must be stored in a special location in the HEX file. Do not change the default linker options relating to this psect.
const
The PIC18-only psect used to hold objects that are declared const and string literals which are not modifiable. Used when the total amount of const data in a program exceeds 64k. This psect can be linked anywhere on a 2-byte address boundary (enforced by the psect's reloc value of 2) within a program memory page, provided it does not interfere with the requirements of other psects.
eeprom (PIC18: eeprom_data)
The psect used to store initial values in EEPROM memory. Do not change the default linker options relating to this psect.
end_init
The psect used by the C initialization runtime startup code for Baseline and Mid-range devices. This psect holds code which transfers control to the main() function.
idata
The psect containing the ROM image of any initialized variables. The class name associated with these psects represents the class of the corresponding RAM-based data psects, to which the content of these psects will be copied. These psects can be linked at any address within a program memory page, provided that they do not interfere with the requirements of other psects.
idloc
This psect is used to store the ID location words. This psect must be stored in a special location in the HEX file. Do not change the default linker options relating to this psect.
init
The psect used by assembly code in the runtime startup assembly module. The code in this and cinit define the runtime startup code. If no interrupt code is defined, the Reset vector code can “fall through” into this psect. It is recommended that the linker options for this psect are not changed.
intcode and intcodelo
The psect that contains the executable code for the high-priority (default) and low-priority interrupt service routines, respectively, linked to interrupt vector at address 0x8 and 0x18. Do not change the default linker options relating to these psects. See 4.6.1.3 Codeoffset Option if moving code when using a bootloader.
intentry
The psect that contains the entry code for the interrupt service routine which is linked to the interrupt vector. This code saves the necessary registers and jumps to the main interrupt code in the case of Mid-range devices; for Enhanced Mid-range devices this psect will contain the interrupt function body. PIC18 devices use the intcode psects.
 This psect must be linked at the interrupt vector. Do not change the default linker options relating to this psect. See the -mcodeoffset option 4.6.1.3 Codeoffset Option if you want to move code when using a bootloader.
ivt0xn
The psect that contains the vector table located at address n for devices that use interrupt vector tables or that are operating in legacy mode, see 5.9.1 Writing an Interrupt Service Routine.
jmp_tab
The Baseline only psect used to store jump addresses and function return values. Do not change the default linker options relating to this psect.
maintext
The psect used to hold the assembly code for the main() function. The code for main() is segregated as it contains the program entry point. Do not change the default linker options relating to this psect as the runtime startup code can “fall through” into this psect.
mediumconst
The PIC18-only psect used to hold objects that are declared const and string literals. Used when the total amount of const data in a program exceeds 255 bytes, but is less than 64k. This psect can be linked anywhere in the lower 64k of program memory, provided it does not interfere with the requirements of other psects. For PIC18 devices, the location of this psect must be above the highest RAM address.
powerup
The psect that contains executable code for a user-supplied powerup routine.
 Do not change the default linker options relating to this psect.
reset_vec
The psect used to hold code associated with the Reset vector.
 Do not change the default linker options relating to this psect. See the
-mcodeoffset option 4.6.1.3 Codeoffset Option, if you want to move code when using a bootloader.
reset_wrap
The Baseline psect that contains code that is executed after the oscillator calibration location at the top of program memory has been loaded.
 Do not change the default linker options relating to this psect.
smallconst
The psect that holds objects that are declared const and string literals. Used when the total amount of const data in a program is less than 255 bytes.
 This psect can be linked anywhere in the program memory, provided it does not cross a 0x100 address boundary and it does not interfere with the requirements of other psects. For PIC18 devices, the location of this psect must be above the highest RAM address.
strings
The psect used for const objects.
 It also includes all unnamed string literals.
 This psect can be linked anywhere in the program memory, provided it does not cross a 0x100 address boundary or interfere with the requirements of other psects.
stringtextn
The stringtextn psects (where n is a decimal number) are used for const objects when compiling for Enhanced Mid-range devices. These psects can be linked anywhere in the program memory, provided they do not interfere with the requirements of other psects.
textn
These psects (where n is a decimal number) contain all other executable code that does not require a special link location. These psects can be linked anywhere on a 2-byte address boundary (enforced by the psect's reloc value of 2) within any program memory page, provided they do not interfere with the requirements of other psects. Note that the compiler imposes pseudo page boundaries on some PIC18 devices to work around published errata. Check the default CODE linker class for the presence of pages, and their size, in the executable memory.
temp
The psect that contains compiler-defined temporary variables. This psect must be linked in common memory, but can be placed at any address in that memory, provided it does not interfere with other psects.
xxx_text
The psects for functions that have been made absolute; i.e., placed at an address. xxx will be the assembly symbol associated with the function. For example if the function rv() is made absolute, code associated with it will appear in the psect called _rv_text.
 As these psects are already placed at the address indicated in the C source code, the linker options that position them should not be changed.
xxx_const
The psects used for const objects that has been made absolute; i.e., placed at an address. xxx will be the assembly symbol associated with the object. For example, if the array nba is made absolute, values stored in this array will appear in the psect called _nba_const. As these psects are already placed at the address indicated in the C source code, the linker options that position them should not be changed.