Back to index

cell-binutils  2.17cvs20070401
ppc64.h
Go to the documentation of this file.
00001 /* PPC64 ELF support for BFD.
00002    Copyright 2003 Free Software Foundation, Inc.
00003 
00004 This file is part of BFD, the Binary File Descriptor library.
00005 
00006 This program is free software; you can redistribute it and/or modify
00007 it under the terms of the GNU General Public License as published by
00008 the Free Software Foundation; either version 2 of the License, or
00009 (at your option) any later version.
00010 
00011 This program is distributed in the hope that it will be useful,
00012 but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 GNU General Public License for more details.
00015 
00016 You should have received a copy of the GNU General Public License
00017 along with this program; if not, write to the Free Software
00018 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
00019 
00020 #ifndef _ELF_PPC64_H
00021 #define _ELF_PPC64_H
00022 
00023 #include "elf/reloc-macros.h"
00024 
00025 /* Relocations.  */
00026 START_RELOC_NUMBERS (elf_ppc64_reloc_type)
00027   RELOC_NUMBER (R_PPC64_NONE,                  0)
00028   RELOC_NUMBER (R_PPC64_ADDR32,                1)
00029   RELOC_NUMBER (R_PPC64_ADDR24,                2)
00030   RELOC_NUMBER (R_PPC64_ADDR16,                3)
00031   RELOC_NUMBER (R_PPC64_ADDR16_LO,      4)
00032   RELOC_NUMBER (R_PPC64_ADDR16_HI,      5)
00033   RELOC_NUMBER (R_PPC64_ADDR16_HA,      6)
00034   RELOC_NUMBER (R_PPC64_ADDR14,                7)
00035   RELOC_NUMBER (R_PPC64_ADDR14_BRTAKEN,        8)
00036   RELOC_NUMBER (R_PPC64_ADDR14_BRNTAKEN,     9)
00037   RELOC_NUMBER (R_PPC64_REL24,                10)
00038   RELOC_NUMBER (R_PPC64_REL14,                11)
00039   RELOC_NUMBER (R_PPC64_REL14_BRTAKEN,        12)
00040   RELOC_NUMBER (R_PPC64_REL14_BRNTAKEN,       13)
00041   RELOC_NUMBER (R_PPC64_GOT16,                14)
00042   RELOC_NUMBER (R_PPC64_GOT16_LO,      15)
00043   RELOC_NUMBER (R_PPC64_GOT16_HI,      16)
00044   RELOC_NUMBER (R_PPC64_GOT16_HA,      17)
00045   /* 18 unused.  32-bit reloc is R_PPC_PLTREL24.  */
00046   RELOC_NUMBER (R_PPC64_COPY,                 19)
00047   RELOC_NUMBER (R_PPC64_GLOB_DAT,      20)
00048   RELOC_NUMBER (R_PPC64_JMP_SLOT,      21)
00049   RELOC_NUMBER (R_PPC64_RELATIVE,      22)
00050   /* 23 unused.  32-bit reloc is R_PPC_LOCAL24PC.  */
00051   RELOC_NUMBER (R_PPC64_UADDR32,       24)
00052   RELOC_NUMBER (R_PPC64_UADDR16,       25)
00053   RELOC_NUMBER (R_PPC64_REL32,                26)
00054   RELOC_NUMBER (R_PPC64_PLT32,                27)
00055   RELOC_NUMBER (R_PPC64_PLTREL32,      28)
00056   RELOC_NUMBER (R_PPC64_PLT16_LO,      29)
00057   RELOC_NUMBER (R_PPC64_PLT16_HI,      30)
00058   RELOC_NUMBER (R_PPC64_PLT16_HA,      31)
00059   /* 32 unused.  32-bit reloc is R_PPC_SDAREL16.  */
00060   RELOC_NUMBER (R_PPC64_SECTOFF,       33)
00061   RELOC_NUMBER (R_PPC64_SECTOFF_LO,           34)
00062   RELOC_NUMBER (R_PPC64_SECTOFF_HI,           35)
00063   RELOC_NUMBER (R_PPC64_SECTOFF_HA,           36)
00064   RELOC_NUMBER (R_PPC64_REL30,                37)
00065   RELOC_NUMBER (R_PPC64_ADDR64,               38)
00066   RELOC_NUMBER (R_PPC64_ADDR16_HIGHER,        39)
00067   RELOC_NUMBER (R_PPC64_ADDR16_HIGHERA,       40)
00068   RELOC_NUMBER (R_PPC64_ADDR16_HIGHEST,       41)
00069   RELOC_NUMBER (R_PPC64_ADDR16_HIGHESTA,    42)
00070   RELOC_NUMBER (R_PPC64_UADDR64,       43)
00071   RELOC_NUMBER (R_PPC64_REL64,                44)
00072   RELOC_NUMBER (R_PPC64_PLT64,                45)
00073   RELOC_NUMBER (R_PPC64_PLTREL64,      46)
00074   RELOC_NUMBER (R_PPC64_TOC16,                47)
00075   RELOC_NUMBER (R_PPC64_TOC16_LO,      48)
00076   RELOC_NUMBER (R_PPC64_TOC16_HI,      49)
00077   RELOC_NUMBER (R_PPC64_TOC16_HA,      50)
00078   RELOC_NUMBER (R_PPC64_TOC,                  51)
00079   RELOC_NUMBER (R_PPC64_PLTGOT16,      52)
00080   RELOC_NUMBER (R_PPC64_PLTGOT16_LO,          53)
00081   RELOC_NUMBER (R_PPC64_PLTGOT16_HI,          54)
00082   RELOC_NUMBER (R_PPC64_PLTGOT16_HA,          55)
00083 
00084   /* The following relocs were added in the 64-bit PowerPC ELF ABI
00085      revision 1.2. */
00086   RELOC_NUMBER (R_PPC64_ADDR16_DS,     56)
00087   RELOC_NUMBER (R_PPC64_ADDR16_LO_DS,         57)
00088   RELOC_NUMBER (R_PPC64_GOT16_DS,      58)
00089   RELOC_NUMBER (R_PPC64_GOT16_LO_DS,          59)
00090   RELOC_NUMBER (R_PPC64_PLT16_LO_DS,          60)
00091   RELOC_NUMBER (R_PPC64_SECTOFF_DS,           61)
00092   RELOC_NUMBER (R_PPC64_SECTOFF_LO_DS,        62)
00093   RELOC_NUMBER (R_PPC64_TOC16_DS,      63)
00094   RELOC_NUMBER (R_PPC64_TOC16_LO_DS,          64)
00095   RELOC_NUMBER (R_PPC64_PLTGOT16_DS,          65)
00096   RELOC_NUMBER (R_PPC64_PLTGOT16_LO_DS,       66)
00097 
00098   /* Relocs added to support TLS.  PowerPC64 ELF ABI revision 1.5.  */
00099   RELOC_NUMBER (R_PPC64_TLS,                  67)
00100   RELOC_NUMBER (R_PPC64_DTPMOD64,      68)
00101   RELOC_NUMBER (R_PPC64_TPREL16,       69)
00102   RELOC_NUMBER (R_PPC64_TPREL16_LO,           70)
00103   RELOC_NUMBER (R_PPC64_TPREL16_HI,           71)
00104   RELOC_NUMBER (R_PPC64_TPREL16_HA,           72)
00105   RELOC_NUMBER (R_PPC64_TPREL64,       73)
00106   RELOC_NUMBER (R_PPC64_DTPREL16,      74)
00107   RELOC_NUMBER (R_PPC64_DTPREL16_LO,          75)
00108   RELOC_NUMBER (R_PPC64_DTPREL16_HI,          76)
00109   RELOC_NUMBER (R_PPC64_DTPREL16_HA,          77)
00110   RELOC_NUMBER (R_PPC64_DTPREL64,      78)
00111   RELOC_NUMBER (R_PPC64_GOT_TLSGD16,          79)
00112   RELOC_NUMBER (R_PPC64_GOT_TLSGD16_LO,       80)
00113   RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HI,       81)
00114   RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HA,       82)
00115   RELOC_NUMBER (R_PPC64_GOT_TLSLD16,          83)
00116   RELOC_NUMBER (R_PPC64_GOT_TLSLD16_LO,       84)
00117   RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HI,       85)
00118   RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HA,       86)
00119   RELOC_NUMBER (R_PPC64_GOT_TPREL16_DS,       87)
00120   RELOC_NUMBER (R_PPC64_GOT_TPREL16_LO_DS,  88)
00121   RELOC_NUMBER (R_PPC64_GOT_TPREL16_HI,       89)
00122   RELOC_NUMBER (R_PPC64_GOT_TPREL16_HA,       90)
00123   RELOC_NUMBER (R_PPC64_GOT_DTPREL16_DS,    91)
00124   RELOC_NUMBER (R_PPC64_GOT_DTPREL16_LO_DS, 92)
00125   RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HI,    93)
00126   RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HA,    94)
00127   RELOC_NUMBER (R_PPC64_TPREL16_DS,           95)
00128   RELOC_NUMBER (R_PPC64_TPREL16_LO_DS,        96)
00129   RELOC_NUMBER (R_PPC64_TPREL16_HIGHER,       97)
00130   RELOC_NUMBER (R_PPC64_TPREL16_HIGHERA,    98)
00131   RELOC_NUMBER (R_PPC64_TPREL16_HIGHEST,    99)
00132   RELOC_NUMBER (R_PPC64_TPREL16_HIGHESTA,  100)
00133   RELOC_NUMBER (R_PPC64_DTPREL16_DS,         101)
00134   RELOC_NUMBER (R_PPC64_DTPREL16_LO_DS,      102)
00135   RELOC_NUMBER (R_PPC64_DTPREL16_HIGHER,   103)
00136   RELOC_NUMBER (R_PPC64_DTPREL16_HIGHERA,  104)
00137   RELOC_NUMBER (R_PPC64_DTPREL16_HIGHEST,  105)
00138   RELOC_NUMBER (R_PPC64_DTPREL16_HIGHESTA, 106)
00139 
00140   /* These are GNU extensions to enable C++ vtable garbage collection.  */
00141   RELOC_NUMBER (R_PPC64_GNU_VTINHERIT,       253)
00142   RELOC_NUMBER (R_PPC64_GNU_VTENTRY,         254)
00143 
00144 END_RELOC_NUMBERS (R_PPC64_max)
00145 
00146 #define IS_PPC64_TLS_RELOC(R) \
00147   ((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA)
00148 
00149 /* Specify the start of the .glink section.  */
00150 #define DT_PPC64_GLINK             DT_LOPROC
00151 
00152 /* Specify the start and size of the .opd section.  */
00153 #define DT_PPC64_OPD        (DT_LOPROC + 1)
00154 #define DT_PPC64_OPDSZ             (DT_LOPROC + 2)
00155 
00156 #endif /* _ELF_PPC64_H */