Records specify a location and an operation
Compilation may not know another file’s function address or the final position of the current file. A relocation record preserves the fixup location and operation so a linker or loader can compute and encode the value after layout is known.
An ELF record includes r_offset and r_info, which combines a symbol index with a relocation type. Types specify machine-dependent calculations and encodings; not every relocation simply adds one common constant.
References: [1]
Implicit and explicit addends
ELF REL records take an implicit addend from the field being relocated. RELA records store an explicit r_addend. Symbol lookup alone is therefore insufficient to explain the complete calculation.
For a relocatable object, r_offset is a byte offset from the relevant section’s beginning; in an executable or shared object, it identifies the relocation place by virtual address. A field name need not use the same coordinate system at every stage.
References: [1]
Different work at linking and loading
Static linking arranges input sections, chooses definitions and completes references whose values are then known. Some runtime fixups instead depend on shared objects’ actual locations or symbol selection. This does not mean relinking an entire program on every call.
Position-independent code can reduce instruction fixups while data pointers or other entries still need relocation. Symbol resolution selects a definition; relocation encodes that definition and layout relationship at a reference site. They are related but distinct operations.