A portable linker for multiple file formats.
Valid HTML 4.01!
About vlink
Last release source
Daily source snapshot
Tagged source archives
Compilation notes
Last release binaries
Daily snapshot binaries
vlink docs (pdf)
Volker's vlink page
vbcc/Amiga home page

vlink is a portable linker, written in ANSI-C, that can read and write a wide range of object- and executable file formats. It can be used to link a specific target format from several different input file formats, or for converting, stripping and manipulating files.

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:
  • 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 M68k big endian
  • ELF 32bit Jaguar RISC big endian
  • ELF 32bit x86 little endian
  • ELF 32bit x86 AROS (relocatable executables)
  • ELF 32bit ARM little endian
  • ELF 64bit x86_64 little endian
  • a.out Sun/010 (also Amiga/Atari 68000)
  • a.out Sun/020 (also Amiga/Atari 68020+)
  • a.out MiNT (embedded in Atari TOS format)
  • a.out Jaguar (M68k with support for RISC relocations)
  • a.out NetBSD/68k (4k and 8k pages)
  • a.out NetBSD/386
  • a.out PC/386
  • a.out generic
  • AmigaOS hunk format
  • EHF, extended hunk format (WarpOS)
  • Atari TOS format (writing only)
  • Motorola S-Records (writing only)
  • Intel-hex format (writing only)
  • AMSDOS format (Amstrad/Schneider CPC)
  • Commodore 8-bit PRG format
  • Raw binaries (writing only)
  • VOBJ, proprietary versatile object format (reading only)

10-Jun-2019: vlink 0.16c.
  • New target file format XFile, for Sharp X68000 computers. At the moment only executables may be created. No object file support.
  • (ados/ehf) Handle data-bss sections correctly, when linking/stripping executable files.

28-Dec-2018: vlink 0.16b.
  • New option -mtype: merge all sections of the same type (code, data, bss), ignoring name and attributes.
  • (ados/ehf) Fixed possible segfault when linking resident modules.
  • (ados/ehf) Allow linking/stripping executables again.

14-Aug-2017: vlink 0.16a.
  • New linker script commands: BYTE, SHORT, LONG, QUAD, SQUAD.
  • New option -k: keep original section order from the objects.
  • Fixed crash with -gc-all and unreferenced symbols.
  • Fixed crash with unresolved weak symbols.
  • (ados/ehf) _INIT/_EXIT functions with register arguments (prefixed by '@' instead of '_' for SAS/C-compatibility) are also detected, and their pointers inserted into the proper con-/destructor tables.
  • (elf) Provide __CTOR_LIST_END, __DTOR_LIST_END.

16-May-2017: vlink 0.16.
  • Fixed a potential crash when linking with empty object files, while using a linker script.
  • (ados/ehf): Support blink/slink linker symbols _RESLEN, _RESBASE, _NEWDATAL for generating resident (pure) programs.
  • (ados/ehf): Fixed SAS/C-compatibility linker symbol __BSSLEN. Now it represents the number of long words instead of the number of bytes. WARNING! Make sure to check your code, if you used __BSSLEN before!
  • (ados/ehf): AmigaOS LoadSeg() (up to V40) has a problem with allocating data-bss sections, which have an initialized size of 0. Implemented a workaround for this case.
  • (elf) Fixed crash in dynamic linking due to section-trimming.
  • (elf,aout) Malformatted library archive files are no longer fatal, but will be ignored.
  • (rawseg) Do not write output sections marked with NOLOAD.

06-Feb-2017: vlink 0.15d.
  • Section-trimming, introduced with V0.15b, did not work well with ELF executables. Fixed that.
  • New options -gc-all and -gc-empty for section garbage-collection.
  • New option -Z to prevent the linker from automatically removing a section's trailing zero-bytes.
  • New output format: jagsrv. Absolute raw binary output, similar to rawbin1, but with a header to make it load and execute via the Atari Jaguar SkunkBoard or the VirtualJaguar emulator.
  • (ados/ehf): Fixed a memory leak in relocation output and optimized it.
  • (elf) Allow N_FUN stabs without a relocatable label in n_value.

01-Nov-2016: vlink 0.15c.
  • Fixed problems with relocation addend sign-extension, introduced in the last version.

$Id: index.php,v 1.14 2017/06/27 21:59:22 frank Exp $