vlink

A portable linker for multiple file formats.
Valid HTML 4.01!
About vlink
Last release source
Daily source snapshot
Compilation notes
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 as well as 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 Amiga/MorphOS (relocatable executables)
  • ELF 32bit M68k big endian
  • ELF 32bit x86 little endian
  • ELF 32bit AROS (relocatable executables)
  • ELF 32bit ARM 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 NetBSD/68k (4k and 8k pages)
  • a.out NetBSD/386
  • a.out PC/386
  • AmigaOS hunk format
  • EHF, extended hunk format (WarpOS)
  • Atari TOS format (writing only)
  • Motorola S-Records (writing only)
  • Intel-hex format (writing only)
  • Raw binaries (writing only)
  • VOBJ, proprietary versatile object format (reading only)
Note: There are currently no binaries available for download, besides those included in a vbcc release. But you might want to download the latest source archive and build a binary yourself.


09-Jun-2010: vlink 0.12g.
  • Option -y only reports symbol references which will be part of the resulting output file.
  • (a.out) Also handle indirect symbols with N_EXT bit set.
  • (elf) Automatically add a default PT_PHDR, when a PHDRS block in a linker script doesn't define it although it was requested to be part of a PT_LOAD PHDR.
  • (elf) Ignore R_NONE relocations. No longer fail on it.
  • (elf) Introduced the new target "elf32amigaos" for AmigaOS4. The only difference to the standard "elf32ppcbe" is that even references from a shared object (to other shared objects) have to be resolved at link time.


14-Jul-2009: vlink 0.12f.
  • Do not set the executable flag of the target file before it is closed. This prevents exclusive locking problems with some file systems (e.g. with JXFS from AmigaOS4).


02-Jul-2009: vlink 0.12e.
  • Multiple definitions of absolute symbols are ignored, when all have the same value.
  • Replaced #ifdef WIN32 by _WIN32.
  • (elf) Fixed an error when creating executables with the default 2-segment layout, while one segment remains empty (e.g. only .text and .rodata).


05-May-2009: vlink 0.12d.
  • (a.out) New format aoutnull, which is the default format with undefined endianess and standard relocations, when an object with MID 0 is read.
  • (a.out) New format aoutjaguar, which recognizes swapped 16-bit words and generates a special relocation for the Jaguar GPU MOVEI RISC instruction (indicated by a set COPY flag in the reloc-info field).
  • (a.out) Detects Jaguar GPU MOVEI relocations in objects with MID 0 and treats them accordingly to write a correct desintation file.
  • When none of the input files sets a valid endianess use the endianess of the output file format. When the endianess is still unknown, guess it by using the endianess of the host system.
  • New options -EB and -EL to define the endianess for reading input files and writing the output. Useful when neither the input files nor the output file defines a valid endianess.
  • New option -minalign sets a minimum alignment (number of bits which have to be zero) for all imported sections. The specified alignment value will only take effect when higher than the section's current alignment. It defaults to 0.


20-Mar-2009: vlink 0.12c.
  • Common symbols which are defined in several object modules must be present in the output file only once! Even worse, since V0.12 different object modules referenced their own copy of a Common symbol.


02-Mar-2009: vlink 0.12b.
  • (ados/ehf) LoadSeg<=V40 doesn't allow more than 31 longwords per symbol in HUNK_SYMBOL and will respond with "bad loadfile hunk" otherwise. So we just cut everything after 124 characters.
Aktion UBERWACH!

$Id: index.php,v 1.11 2009/11/05 14:37:42 frank Exp $