<!--
  Copyright (c) 2016 OpenPOWER Foundation
  
  Licensed under the GNU Free Documentation License, Version 1.3;
  with no Invariants Sections, with no Front-Cover Texts,
  and with no Back-Cover Texts (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.gnu.org/licenses/fdl-1.3.txt

-->
<chapter xmlns="http://docbook.org/ns/docbook"
  xmlns:xi="http://www.w3.org/2001/XInclude"
  xmlns:xl="http://www.w3.org/1999/xlink" 
  version="5.0" xml:lang="en"
  xml:id="ch_1">
  <title>Introduction</title>
  
  <para>The Executable and Linking Format (ELF) defines a linking interface
  for executables and shared objects in two parts.</para>
  <itemizedlist>
    <listitem>
      <para>The first part is the generic System V ABI 
      (<link xl:href="http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/normativerefs.html#NORMATIVEREFSSECT">http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/normativerefs.html#NORMATIVEREFSSECT</link>).
      </para>
    </listitem>
    <listitem>
      <para>The second part is a processor-specific supplement.</para>
    </listitem>
  </itemizedlist>
  <para>This document, the OpenPOWER ABI for Linux Supplement for the Power
  Architecture 64-bit ELF V2 ABI, is the OpenPOWER-compliant
  processor-specific supplement for use with ELF V2 on 64-bit IBM Power
  Architecture® systems. This is not a complete System V ABI supplement
  because it does not define any library interfaces.</para>
  <para>This document establishes both big-endian and little-endian
  application binary interfaces (see 
  <xref linkend="dbdoclet.50655240___RefHeading___Toc377640574" />).
  OpenPOWER-compliant processors in the 64-bit Power Architecture can execute
  in either big-endian or little-endian mode. Executables and
  executable-generated data (in general) that subscribe to either byte
  ordering are not portable to a system running in the other mode.</para>
  <itemizedlist>
    <listitem>
      <para>Note: 
        <link xl:href="http://www.power.org/">This ABI specification does not 
        address little-endian byte ordering before Power ISA 2.03.</link>
      </para>
    </listitem>
  </itemizedlist>
  <para>The OpenPOWER ELF V2 ABI is not the same as either the Power
  Architecture 32-bit ABI supplement or the 64-bit IBM PowerPC® ELF ABI (ELF
  V1).</para>
  <para>The Power Architecture 64-bit OpenPOWER ELF V2 ABI supplement is
  intended to use the same structural layout now followed in practice by
  other processor-specific ABIs.</para>

  <section xml:id="dbdoclet.50655239___RefHeading___Toc377640569">
    <title>Reference Documentation</title>
    <para>The archetypal ELF ABI is described by the System V ABI.
    Supersessions and addenda that are specific to OpenPOWER ELF V2 Power
    Architecture (64-bit) processors are described in this document.</para>
    <para>The following documents are complementary to this document and
    equally binding:</para>
    <itemizedlist>
      <listitem>
        <para>
        <emphasis>Power Instruction Set Architecture,</emphasis> Versions 2.7
	and 3.0, IBM, 2013-2016. 
        <emphasis>
          <link xl:href="http://www.power.org">http://www.power.org
          </link>
        </emphasis></para>
      </listitem>
      <listitem>
        <para>
        <emphasis>DWARF Debugging Information Format,</emphasis> Version 4,
        DWARF Debugging Information Format Workgroup, 2010. 
        <emphasis>
          <link xl:href="http://dwarfstd.org/Dwarf4Std.php">http://dwarfstd.org/Dwarf4Std.php</link>
        </emphasis></para>
      </listitem>
      <listitem>
        <para>
        <emphasis>ISO/IEC 9899:2011: Programming languages—C</emphasis>. 
        <emphasis>
          <link xl:href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=57853">http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=57853
          </link>
        </emphasis></para>
      </listitem>
      <listitem xml:id="dbdoclet.50655239_page12">
        <para>Itanium C++ ABI: Exception Handling. Rev 1.22, CodeSourcery,
        2001.
        <emphasis>
          <link xl:href="http://www.codesourcery.com/public/cxx-abi/abi-eh.html">http://www.codesourcery.com/public/cxx-abi/abi-eh.html
          </link>
        </emphasis></para>
      </listitem>
      <listitem>
        <para>
        <emphasis>ISO/IEC TR 24732:2009 &#8211; Programming languages, their
        environments and system software interfaces &#8211; Extension for the
        programming language C to support decimal floating-point
        arithmetic</emphasis>, ISO/IEC, January 05, 2009. Available from ISO. 
        <emphasis>
          <link xl:href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_tc_browse.htm?commid=45202">http://www.iso.org/iso/home/store/catalogue_tc/catalogue_tc_browse.htm?commid=45202
          </link>
        </emphasis></para>
      </listitem>
      <listitem>
        <para>
        <emphasis>ELF Handling for Thread-Local Storage</emphasis>, Version
        0.20, Ulrich Drepper, Red Hat Inc., December 21, 2005. 
        <emphasis>
          <link xl:href="http://people.redhat.com/drepper/tls.pdf">http://people.redhat.com/drepper/tls.pdf
          </link>
        </emphasis></para>
      </listitem>
    </itemizedlist>
    <para>The following documents are of interest for their historical
    information but are not normative in any way.</para>
    <itemizedlist>
      <listitem>
        <para>
          <emphasis>64-bit PowerPC ELF Application Binary Interface Supplement
          1.9.</emphasis>
          <emphasis>
            <link xl:href="http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html">http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html
            </link>
          </emphasis>
        </para>
      </listitem>
      <listitem>
        <para>
          <emphasis>IBM PowerOpen™ ABI Application Binary Interface Big-Endian
          32-Bit Hardware Implementation.</emphasis>
          <emphasis>
            <link xl:href="ftp://www.sourceware.org/pub/binutils/ppc-docs/ppc-poweropen/">

              <citetitle>
              ftp://www.sourceware.org/pub/binutils/ppc-docs/ppc-poweropen/</citetitle>
            </link>
          </emphasis>
        </para>
      </listitem>
      <listitem>
        <para>
          <emphasis>Power Architecture 32-bit ABI Supplement 1.0
          Embedded/Linux/Unified.</emphasis>
          <emphasis>
            <link xl:href="https://www.power.org/documentation/power-architecture-32-bit-abi-supplement-1-0-embeddedlinuxunified/">

              <citetitle>
              https://www.power.org/documentation/power-architecture-32-bit-abi-supplement-1-0-embeddedlinuxunified/</citetitle>
            </link>
          </emphasis>
        </para>
      </listitem>
      <listitem>
        <para>
        <emphasis>ALTIVEC PIM: AltiVec™ Technology Programming Interface
        Manual</emphasis>, Freescale Semiconductor, 1999. 
        <emphasis>
          <link xl:href="http://www.freescale.com/files/32bit/doc/ref_manual/ALTIVECPIM.pdf">http://www.freescale.com/files/32bit/doc/ref_manual/ALTIVECPIM.pdf
          </link>
        </emphasis></para>
      </listitem>
      <listitem>
        <para>ELF Assembly User’s Guide, Fourth edition, IBM, 2000.
          <emphasis>
            <link xl:href="https://www-03.ibm.com/technologyconnect/tgcm/TGCMFileServlet.wss/assem_um.pdf?id=109917A251EFD64C872569D900656D07&amp;linkid=1h3000&amp;c_t=md515o6ntgh671shz9ioar20oyfp1grs">

              <citetitle>
              https://www-03.ibm.com/technologyconnect/tgcm/TGCMFileServlet.wss/assem_um.pdf?id=109917A251EFD64C872569D900656D07&amp;linkid=1h3000&amp;c_t=md515o6ntgh671shz9ioar20oyfp1grs</citetitle>
            </link>
          </emphasis>
        </para>
      </listitem>
    </itemizedlist>
  </section>
  <section revisionflag="added">
    <title>Changes from Revision 1.4</title>
    <itemizedlist>
      <listitem>
	<para>
	  Errata recorded at <link xl:href="https://openpowerfoundation.org/?resource_lib=openpower-elfv2-errata-elfv2-abi-version-1-4">https://openpowerfoundation.org/?resource_lib=openpower-elfv2-errata-elfv2-abi-version-1-4</link>
	  have been incorporated into this document.
	</para>
      </listitem>
      <listitem>
	<para>
	  PowerISA version 3.1 introduces PC-relative instructions for
	  accessing code and data.  Thus compilers and assembly programmers
	  that target version 3.1 or later can, if desired, avoid usage of
	  a TOC pointer for such accesses.  The ABI has been updated to
	  describe the implications of this new capability.  For specifics,
	  see <xref linkend="dbdoclet.50655241_FnLinkage" />, <xref
	  linkend="dbdoclet.50655240___RefHeading___Toc377640591" />, <xref
	  linkend="dbdoclet.50655241_18894" />, <xref
	  linkend="dbdoclet.50655241_LinkerOpts" />, <xref
	  linkend="dbdoclet.50655242_47739" />, and <xref
	  linkend="dbdoclet.50655242_82622" />.
	</para>
      </listitem>
    </itemizedlist>
  </section>
</chapter>
