A linker combines assembled objects, connects symbol references with definitions, and assigns section addresses. In ivss, its output still contains relocation records for the emulator to apply while loading:
$ ./linker -hex \ -place=my_code@0x40000000 \ -o program.hex \ main.o data.o
Both inputs must use the assembler's -hex serialization. The placement option puts the code at the emulator's initial program counter. Without -hex, the linker writes a descriptive dump instead of loader-readable serialized bytes.
The linker merges section contents, updates symbols and relocation indices, then assigns addresses. A load referring to data in another object can therefore remain independent of that object's eventual location.
Section merging determines offsets within combined sections; symbol resolution connects names. Placement supplies section bases. Final patching happens in Mem_LoadElf(), rather than being completed by this command alone. The resulting file is intended for the ivss emulator, not native execution by the host operating system.
Source: linker.c.