160484Sobrien/* PPC ELF support for BFD. 2218822Sdim Copyright 1995, 1996, 1998, 2000, 2001, 2002, 2003, 2005 3130561Sobrien Free Software Foundation, Inc. 460484Sobrien 560484Sobrien By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information 660484Sobrien in the System V Application Binary Interface, PowerPC Processor Supplement 760484Sobrien and the PowerPC Embedded Application Binary Interface (eabi). 860484Sobrien 960484SobrienThis file is part of BFD, the Binary File Descriptor library. 1060484Sobrien 1160484SobrienThis program is free software; you can redistribute it and/or modify 1260484Sobrienit under the terms of the GNU General Public License as published by 1360484Sobrienthe Free Software Foundation; either version 2 of the License, or 1460484Sobrien(at your option) any later version. 1560484Sobrien 1660484SobrienThis program is distributed in the hope that it will be useful, 1760484Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1860484SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1960484SobrienGNU General Public License for more details. 2060484Sobrien 2160484SobrienYou should have received a copy of the GNU General Public License 2260484Sobrienalong with this program; if not, write to the Free Software 23218822SdimFoundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 2460484Sobrien 2560484Sobrien/* This file holds definitions specific to the PPC ELF ABI. Note 2660484Sobrien that most of this is not actually implemented by BFD. */ 2760484Sobrien 2860484Sobrien#ifndef _ELF_PPC_H 2960484Sobrien#define _ELF_PPC_H 3060484Sobrien 3160484Sobrien#include "elf/reloc-macros.h" 3260484Sobrien 3360484Sobrien/* Relocations. */ 3460484SobrienSTART_RELOC_NUMBERS (elf_ppc_reloc_type) 35130561Sobrien RELOC_NUMBER (R_PPC_NONE, 0) 36130561Sobrien RELOC_NUMBER (R_PPC_ADDR32, 1) 37130561Sobrien RELOC_NUMBER (R_PPC_ADDR24, 2) 38130561Sobrien RELOC_NUMBER (R_PPC_ADDR16, 3) 39130561Sobrien RELOC_NUMBER (R_PPC_ADDR16_LO, 4) 40130561Sobrien RELOC_NUMBER (R_PPC_ADDR16_HI, 5) 41130561Sobrien RELOC_NUMBER (R_PPC_ADDR16_HA, 6) 42130561Sobrien RELOC_NUMBER (R_PPC_ADDR14, 7) 43130561Sobrien RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8) 44130561Sobrien RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9) 45130561Sobrien RELOC_NUMBER (R_PPC_REL24, 10) 46130561Sobrien RELOC_NUMBER (R_PPC_REL14, 11) 47130561Sobrien RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12) 48130561Sobrien RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13) 49130561Sobrien RELOC_NUMBER (R_PPC_GOT16, 14) 50130561Sobrien RELOC_NUMBER (R_PPC_GOT16_LO, 15) 51130561Sobrien RELOC_NUMBER (R_PPC_GOT16_HI, 16) 52130561Sobrien RELOC_NUMBER (R_PPC_GOT16_HA, 17) 53130561Sobrien RELOC_NUMBER (R_PPC_PLTREL24, 18) 54130561Sobrien RELOC_NUMBER (R_PPC_COPY, 19) 55130561Sobrien RELOC_NUMBER (R_PPC_GLOB_DAT, 20) 56130561Sobrien RELOC_NUMBER (R_PPC_JMP_SLOT, 21) 57130561Sobrien RELOC_NUMBER (R_PPC_RELATIVE, 22) 58130561Sobrien RELOC_NUMBER (R_PPC_LOCAL24PC, 23) 59130561Sobrien RELOC_NUMBER (R_PPC_UADDR32, 24) 60130561Sobrien RELOC_NUMBER (R_PPC_UADDR16, 25) 61130561Sobrien RELOC_NUMBER (R_PPC_REL32, 26) 62130561Sobrien RELOC_NUMBER (R_PPC_PLT32, 27) 63130561Sobrien RELOC_NUMBER (R_PPC_PLTREL32, 28) 64130561Sobrien RELOC_NUMBER (R_PPC_PLT16_LO, 29) 65130561Sobrien RELOC_NUMBER (R_PPC_PLT16_HI, 30) 66130561Sobrien RELOC_NUMBER (R_PPC_PLT16_HA, 31) 67130561Sobrien RELOC_NUMBER (R_PPC_SDAREL16, 32) 68130561Sobrien RELOC_NUMBER (R_PPC_SECTOFF, 33) 69130561Sobrien RELOC_NUMBER (R_PPC_SECTOFF_LO, 34) 70130561Sobrien RELOC_NUMBER (R_PPC_SECTOFF_HI, 35) 71130561Sobrien RELOC_NUMBER (R_PPC_SECTOFF_HA, 36) 72130561Sobrien RELOC_NUMBER (R_PPC_ADDR30, 37) 7360484Sobrien 74130561Sobrien /* Relocs added to support TLS. */ 75130561Sobrien RELOC_NUMBER (R_PPC_TLS, 67) 76130561Sobrien RELOC_NUMBER (R_PPC_DTPMOD32, 68) 77130561Sobrien RELOC_NUMBER (R_PPC_TPREL16, 69) 78130561Sobrien RELOC_NUMBER (R_PPC_TPREL16_LO, 70) 79130561Sobrien RELOC_NUMBER (R_PPC_TPREL16_HI, 71) 80130561Sobrien RELOC_NUMBER (R_PPC_TPREL16_HA, 72) 81130561Sobrien RELOC_NUMBER (R_PPC_TPREL32, 73) 82130561Sobrien RELOC_NUMBER (R_PPC_DTPREL16, 74) 83130561Sobrien RELOC_NUMBER (R_PPC_DTPREL16_LO, 75) 84130561Sobrien RELOC_NUMBER (R_PPC_DTPREL16_HI, 76) 85130561Sobrien RELOC_NUMBER (R_PPC_DTPREL16_HA, 77) 86130561Sobrien RELOC_NUMBER (R_PPC_DTPREL32, 78) 87130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSGD16, 79) 88130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSGD16_LO, 80) 89130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSGD16_HI, 81) 90130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSGD16_HA, 82) 91130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSLD16, 83) 92130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSLD16_LO, 84) 93130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSLD16_HI, 85) 94130561Sobrien RELOC_NUMBER (R_PPC_GOT_TLSLD16_HA, 86) 95130561Sobrien RELOC_NUMBER (R_PPC_GOT_TPREL16, 87) 96130561Sobrien RELOC_NUMBER (R_PPC_GOT_TPREL16_LO, 88) 97130561Sobrien RELOC_NUMBER (R_PPC_GOT_TPREL16_HI, 89) 98130561Sobrien RELOC_NUMBER (R_PPC_GOT_TPREL16_HA, 90) 99130561Sobrien RELOC_NUMBER (R_PPC_GOT_DTPREL16, 91) 100130561Sobrien RELOC_NUMBER (R_PPC_GOT_DTPREL16_LO, 92) 101130561Sobrien RELOC_NUMBER (R_PPC_GOT_DTPREL16_HI, 93) 102130561Sobrien RELOC_NUMBER (R_PPC_GOT_DTPREL16_HA, 94) 10389857Sobrien 10460484Sobrien/* The remaining relocs are from the Embedded ELF ABI, and are not 10560484Sobrien in the SVR4 ELF ABI. */ 106130561Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR32, 101) 107130561Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16, 102) 108130561Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103) 109130561Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104) 110130561Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105) 111130561Sobrien RELOC_NUMBER (R_PPC_EMB_SDAI16, 106) 112130561Sobrien RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107) 113130561Sobrien RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108) 114130561Sobrien RELOC_NUMBER (R_PPC_EMB_SDA21, 109) 115130561Sobrien RELOC_NUMBER (R_PPC_EMB_MRKREF, 110) 116130561Sobrien RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111) 117130561Sobrien RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112) 118130561Sobrien RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113) 119130561Sobrien RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114) 120130561Sobrien RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115) 121130561Sobrien RELOC_NUMBER (R_PPC_EMB_RELSDA, 116) 12260484Sobrien 123218822Sdim/* Fake relocations for branch stubs, only used internally by ld. */ 124218822Sdim#define R_PPC_RELAX32 245 125218822Sdim#define R_PPC_RELAX32PC 246 126218822Sdim#define R_PPC_RELAX32_PLT 247 127218822Sdim#define R_PPC_RELAX32PC_PLT 248 12860484Sobrien 129218822Sdim/* These are GNU extensions used in PIC code sequences. */ 130218822Sdim RELOC_NUMBER (R_PPC_REL16, 249) 131218822Sdim RELOC_NUMBER (R_PPC_REL16_LO, 250) 132218822Sdim RELOC_NUMBER (R_PPC_REL16_HI, 251) 133218822Sdim RELOC_NUMBER (R_PPC_REL16_HA, 252) 134218822Sdim 135130561Sobrien/* These are GNU extensions to enable C++ vtable garbage collection. */ 136130561Sobrien RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253) 137130561Sobrien RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254) 138130561Sobrien 13960484Sobrien/* This is a phony reloc to handle any old fashioned TOC16 references 14060484Sobrien that may still be in object files. */ 141130561Sobrien RELOC_NUMBER (R_PPC_TOC16, 255) 14260484Sobrien 14377298SobrienEND_RELOC_NUMBERS (R_PPC_max) 14460484Sobrien 145130561Sobrien#define IS_PPC_TLS_RELOC(R) \ 146130561Sobrien ((R) >= R_PPC_TLS && (R) <= R_PPC_GOT_DTPREL16_HA) 14760484Sobrien 148218822Sdim/* Specify the value of _GLOBAL_OFFSET_TABLE_. */ 149218822Sdim#define DT_PPC_GOT DT_LOPROC 150218822Sdim 15160484Sobrien/* Processor specific flags for the ELF header e_flags field. */ 15260484Sobrien 15377298Sobrien#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag. */ 15460484Sobrien 15577298Sobrien#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag. */ 15677298Sobrien#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag. */ 15760484Sobrien 15877298Sobrien/* Processor specific section headers, sh_type field. */ 15960484Sobrien 16060484Sobrien#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \ 16160484Sobrien entries in this section \ 16260484Sobrien based on the address \ 16360484Sobrien specified in the associated \ 16460484Sobrien symbol table entry. */ 16560484Sobrien 16677298Sobrien/* Processor specific section flags, sh_flags field. */ 16760484Sobrien 16860484Sobrien#define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude \ 16960484Sobrien this section from executable \ 17060484Sobrien and shared objects that it \ 17160484Sobrien builds when those objects \ 17260484Sobrien are not to be furhter \ 17360484Sobrien relocated. */ 174218822Sdim 175218822Sdim/* Object attribute tags. */ 176218822Sdimenum 177218822Sdim{ 178218822Sdim /* 0-3 are generic. */ 179218822Sdim Tag_GNU_Power_ABI_FP = 4, /* Value 1 for hard-float, 2 for 180218822Sdim soft-float; 0 for not tagged or not 181218822Sdim using any ABIs affected by the 182218822Sdim differences. */ 183218822Sdim}; 184218822Sdim 18560484Sobrien#endif /* _ELF_PPC_H */ 186