The linker can be controlled by GNU-style linker scripts to generate absolute code, but it also runs very well with default rules to create relocatable executables, as required for AmigaOS or MorphOS.
Of course there might be technical restrictions that object files of different architectures cannot be merged because of incompatible relocation types, differing endianess or symbol-names with and without leading underscores. But in theory everything is possible!
Currently the following object and executable file formats are supported by vlink:
* a.out generic
* a.out Jaguar (M68k with support for RISC relocations)
* a.out MiNT (embedded in Atari TOS format)
* a.out NetBSD/68k (4k and 8k pages)
* a.out NetBSD/386
* a.out PC/386
* a.out Sun/010 (also Amiga/Atari 68000)
* a.out Sun/020 (also Amiga/Atari 68020+)
* AmigaOS hunk format
* Apple OMF format (Apple IIgs)
* Atari TOS/DRI format
* EHF, extended hunk format (WarpOS)
* ELF 32bit ARM little endian
* ELF 32bit Jaguar RISC big endian
* ELF 32bit M68k big endian
* ELF 32bit PowerPC big endian
* ELF 32bit PowerPC AmigaOS (special dynamic linking rules)
* ELF 32bit PowerPC MorphOS (relocatable executables)
* ELF 32bit PowerPC PowerUp (relocatable executables)
* ELF 32bit x86 little endian
* ELF 32bit x86 AROS (relocatable executables)
* ELF 64bit x86_64 little endian
* o65 binary relocation format V1.3 (6502 and 65816)
* OS-9/6809 modules (writing only)
* VOBJ, proprietary versatile object format