<!--
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 <phrase revisionflag= "deleted" > 2.7</phrase> <phrase
revisionflag="added">2.07</phrase>
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 – Programming languages, their
environments and system software interfaces – 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&linkid=1h3000&c_t=md515o6ntgh671shz9ioar20oyfp1grs" >
<citetitle >
https://www-03.ibm.com/technologyconnect/tgcm/TGCMFileServlet.wss/assem_um.pdf?id=109917A251EFD64C872569D900656D07& linkid=1h3000& 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>