The linker determines at link time whether code and data segments are external or internal. Internal segments reference their data as far or near offsets of the small data registers r2 and r13 . Their code references are normally PC-relative, but if far code references are needed, they also use offsets of the small data registers.
Internal segments can also reference code and data in other internal segments with the same addressing that they would use for their own code and data.
By default, the linker considers all segments in your application to be internal with the exception of segments that are at absolute addresses. Segments with names such as .abs.xxxxxxxx , where xxxxxxxx is a hex address, are considered external.
External segments reference their data with absolute addressing and code references within the segment may be either PC-relative or absolute. Any other segment must use absolute references to reference code or data in external segments. External segments must reference an internal segment with small data registers for code and data.
Related to external segments are external symbol references. These are symbols, usually linker-generated, that are determined not to be within any segment in your application. They are referenced with absolute addressing. All symbols in an external segment are considered to be external symbol references.