<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
          "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">

<!-- $Id$ -->     

<refentry id="yasm_objfmts">

 <refentryinfo>
  <title>Yasm Supported Object Formats</title>
  <date>February 2007</date>
  <productname>Yasm</productname>
  <author>
   <firstname>Peter</firstname>
   <surname>Johnson</surname>
   <affiliation>
    <address><email>peter@tortall.net</email></address>
   </affiliation>
  </author>

  <copyright>
   <year>2006</year>
   <holder>Peter Johnson</holder>
  </copyright>
 </refentryinfo>

 <refmeta>
  <refentrytitle>yasm_objfmts</refentrytitle>
  <manvolnum>7</manvolnum>
 </refmeta>

 <refnamediv>
  <refname>yasm_objfmts</refname>
  <refpurpose>Yasm Supported Object Formats</refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <cmdsynopsis>
   <command>yasm</command>
   <arg choice="plain">
    <option>-f <replaceable>objfmt</replaceable></option>
   </arg>
   <arg choice="plain">
    <option><replaceable>...</replaceable></option>
   </arg>
  </cmdsynopsis>
 </refsynopsisdiv>

 <refsect1>
  <title>Description</title>

  <para>The standard Yasm distribution includes a number of modules
   for different object formats (Yasm's primary output).</para>

  <para>The object format is selected on the
   
   <citerefentry>
    <refentrytitle>yasm</refentrytitle>
    <manvolnum>1</manvolnum>
   </citerefentry>
   
   command line by use of the <option>-f
    <replaceable>objfmt</replaceable></option> command line
   option.</para>
 </refsect1>

 <refsect1>
  <title>bin</title>
  
  <para>The <quote>bin</quote> object format produces a flat-format,
   non-relocatable binary file.  It is appropriate for producing DOS
   .COM executables or things like boot blocks.  It supports only 3
   sections and those sections are written in a predefined order to
   the output file.</para>
 </refsect1>

 <refsect1>
  <title>coff</title>

  <para>The COFF object format is an older relocatable object format
   used on older Unix and compatible systems, and also (more recently)
   on the DJGPP development system for DOS.</para>
 </refsect1>

 <refsect1>
  <title>dbg</title>

  <para>The <quote>dbg</quote> object format is not a
   <quote>real</quote> object format; the output file it creates
   simply describes the sequence of calls made to it by Yasm and the
   final object and symbol table information in a human-readable text
   format (that in a normal object format would get processed into
   that object format's particular binary representation).  This
   object format is not intended for real use, but rather for
   debugging Yasm's internals.</para>
 </refsect1>

 <refsect1>
  <title>elf</title>

  <para>The ELF object format really comes in two flavors:
   <quote>elf32</quote> (for 32-bit targets) and <quote>elf64</quote>
   (for 64-bit targets).  ELF is a standard object format in common
   use on modern Unix and compatible systems (e.g. Linux, FreeBSD).
   ELF has complex support for relocatable and shared objects.</para>
 </refsect1>

 <refsect1>
  <title>macho</title>

  <para>The Mach-O object format really comes in two flavors:
   <quote>macho32</quote> (for 32-bit targets) and
   <quote>macho64</quote> (for 64-bit targets).  Mach-O is used as
   the object format on MacOS X.  As Yasm currently only supports
   x86 and AMD64 instruction sets, it can only generate Mach-O
   objects for Intel-based Macs.</para>
 </refsect1>

 <refsect1>
  <title>rdf</title>

  <para>The RDOFF2 object format is a simple multi-section format
   originally designed for NASM.  It supports segment references but
   not WRT references.  It was designed primarily for simplicity and
   has minimalistic headers for ease of loading and linking.  A
   complete toolchain (linker, librarian, and loader) is distributed
   with NASM.</para>
 </refsect1>

 <refsect1>
  <title>win32</title>

  <para>The Win32 object format produces object files compatible with
   Microsoft compilers (such as Visual C++) that target the 32-bit x86
   Windows platform.  The object format itself is an extended version
   of COFF.</para>
 </refsect1>

 <refsect1>
  <title>win64</title>

  <para>The Win64 object format produces object files compatible with
   Microsoft compilers that target the 64-bit <quote>x64</quote>
   Windows platform.  This format is very similar to the win32 object
   format, but produces 64-bit objects.</para>
 </refsect1>

 <refsect1>
  <title>xdf</title>

  <para>The XDF object format is essentially a simplified version of
   COFF.  It's a multi-section relocatable format that supports 64-bit
   physical and virtual addresses.</para>
 </refsect1>

 <refsect1>
  <title>See Also</title>

  <para><citerefentry>
   <refentrytitle>yasm</refentrytitle>
   <manvolnum>1</manvolnum>
  </citerefentry>,

  <citerefentry>
   <refentrytitle>yasm_arch</refentrytitle>
   <manvolnum>7</manvolnum>
  </citerefentry></para>
 </refsect1>
</refentry>
