ppc.h revision 89857
160484Sobrien/* PPC ELF support for BFD. 289857Sobrien Copyright 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc. 360484Sobrien 460484Sobrien By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information 560484Sobrien in the System V Application Binary Interface, PowerPC Processor Supplement 660484Sobrien and the PowerPC Embedded Application Binary Interface (eabi). 760484Sobrien 860484SobrienThis file is part of BFD, the Binary File Descriptor library. 960484Sobrien 1060484SobrienThis program is free software; you can redistribute it and/or modify 1160484Sobrienit under the terms of the GNU General Public License as published by 1260484Sobrienthe Free Software Foundation; either version 2 of the License, or 1360484Sobrien(at your option) any later version. 1460484Sobrien 1560484SobrienThis program is distributed in the hope that it will be useful, 1660484Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1760484SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1860484SobrienGNU General Public License for more details. 1960484Sobrien 2060484SobrienYou should have received a copy of the GNU General Public License 2160484Sobrienalong with this program; if not, write to the Free Software 2260484SobrienFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 2360484Sobrien 2460484Sobrien/* This file holds definitions specific to the PPC ELF ABI. Note 2560484Sobrien that most of this is not actually implemented by BFD. */ 2660484Sobrien 2760484Sobrien#ifndef _ELF_PPC_H 2860484Sobrien#define _ELF_PPC_H 2960484Sobrien 3060484Sobrien#include "elf/reloc-macros.h" 3160484Sobrien 3260484Sobrien/* Relocations. */ 3360484SobrienSTART_RELOC_NUMBERS (elf_ppc_reloc_type) 3460484Sobrien RELOC_NUMBER (R_PPC_NONE, 0) 3560484Sobrien RELOC_NUMBER (R_PPC_ADDR32, 1) 3660484Sobrien RELOC_NUMBER (R_PPC_ADDR24, 2) 3760484Sobrien RELOC_NUMBER (R_PPC_ADDR16, 3) 3860484Sobrien RELOC_NUMBER (R_PPC_ADDR16_LO, 4) 3960484Sobrien RELOC_NUMBER (R_PPC_ADDR16_HI, 5) 4060484Sobrien RELOC_NUMBER (R_PPC_ADDR16_HA, 6) 4160484Sobrien RELOC_NUMBER (R_PPC_ADDR14, 7) 4260484Sobrien RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8) 4360484Sobrien RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9) 4460484Sobrien RELOC_NUMBER (R_PPC_REL24, 10) 4560484Sobrien RELOC_NUMBER (R_PPC_REL14, 11) 4660484Sobrien RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12) 4760484Sobrien RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13) 4860484Sobrien RELOC_NUMBER (R_PPC_GOT16, 14) 4960484Sobrien RELOC_NUMBER (R_PPC_GOT16_LO, 15) 5060484Sobrien RELOC_NUMBER (R_PPC_GOT16_HI, 16) 5160484Sobrien RELOC_NUMBER (R_PPC_GOT16_HA, 17) 5260484Sobrien RELOC_NUMBER (R_PPC_PLTREL24, 18) 5360484Sobrien RELOC_NUMBER (R_PPC_COPY, 19) 5460484Sobrien RELOC_NUMBER (R_PPC_GLOB_DAT, 20) 5560484Sobrien RELOC_NUMBER (R_PPC_JMP_SLOT, 21) 5660484Sobrien RELOC_NUMBER (R_PPC_RELATIVE, 22) 5760484Sobrien RELOC_NUMBER (R_PPC_LOCAL24PC, 23) 5860484Sobrien RELOC_NUMBER (R_PPC_UADDR32, 24) 5960484Sobrien RELOC_NUMBER (R_PPC_UADDR16, 25) 6060484Sobrien RELOC_NUMBER (R_PPC_REL32, 26) 6160484Sobrien RELOC_NUMBER (R_PPC_PLT32, 27) 6260484Sobrien RELOC_NUMBER (R_PPC_PLTREL32, 28) 6360484Sobrien RELOC_NUMBER (R_PPC_PLT16_LO, 29) 6460484Sobrien RELOC_NUMBER (R_PPC_PLT16_HI, 30) 6560484Sobrien RELOC_NUMBER (R_PPC_PLT16_HA, 31) 6660484Sobrien RELOC_NUMBER (R_PPC_SDAREL16, 32) 6760484Sobrien RELOC_NUMBER (R_PPC_SECTOFF, 33) 6860484Sobrien RELOC_NUMBER (R_PPC_SECTOFF_LO, 34) 6960484Sobrien RELOC_NUMBER (R_PPC_SECTOFF_HI, 35) 7060484Sobrien RELOC_NUMBER (R_PPC_SECTOFF_HA, 36) 7189857Sobrien RELOC_NUMBER (R_PPC_ADDR30, 37) 7260484Sobrien 7389857Sobrien/* The following relocs are from the 64-bit PowerPC ELF ABI. */ 7489857Sobrien RELOC_NUMBER (R_PPC64_ADDR64, 38) 7589857Sobrien RELOC_NUMBER (R_PPC64_ADDR16_HIGHER, 39) 7689857Sobrien RELOC_NUMBER (R_PPC64_ADDR16_HIGHERA, 40) 7789857Sobrien RELOC_NUMBER (R_PPC64_ADDR16_HIGHEST, 41) 7889857Sobrien RELOC_NUMBER (R_PPC64_ADDR16_HIGHESTA, 42) 7989857Sobrien RELOC_NUMBER (R_PPC64_UADDR64, 43) 8089857Sobrien RELOC_NUMBER (R_PPC64_REL64, 44) 8189857Sobrien RELOC_NUMBER (R_PPC64_PLT64, 45) 8289857Sobrien RELOC_NUMBER (R_PPC64_PLTREL64, 46) 8389857Sobrien RELOC_NUMBER (R_PPC64_TOC16, 47) 8489857Sobrien RELOC_NUMBER (R_PPC64_TOC16_LO, 48) 8589857Sobrien RELOC_NUMBER (R_PPC64_TOC16_HI, 49) 8689857Sobrien RELOC_NUMBER (R_PPC64_TOC16_HA, 50) 8789857Sobrien RELOC_NUMBER (R_PPC64_TOC, 51) 8889857Sobrien RELOC_NUMBER (R_PPC64_PLTGOT16, 52) 8989857Sobrien RELOC_NUMBER (R_PPC64_PLTGOT16_LO, 53) 9089857Sobrien RELOC_NUMBER (R_PPC64_PLTGOT16_HI, 54) 9189857Sobrien RELOC_NUMBER (R_PPC64_PLTGOT16_HA, 55) 9289857Sobrien 9389857Sobrien/* The following relocs were added in the 64-bit PowerPC ELF ABI revision 1.2. */ 9489857Sobrien RELOC_NUMBER (R_PPC64_ADDR16_DS, 56) 9589857Sobrien RELOC_NUMBER (R_PPC64_ADDR16_LO_DS, 57) 9689857Sobrien RELOC_NUMBER (R_PPC64_GOT16_DS, 58) 9789857Sobrien RELOC_NUMBER (R_PPC64_GOT16_LO_DS, 59) 9889857Sobrien RELOC_NUMBER (R_PPC64_PLT16_LO_DS, 60) 9989857Sobrien RELOC_NUMBER (R_PPC64_SECTOFF_DS, 61) 10089857Sobrien RELOC_NUMBER (R_PPC64_SECTOFF_LO_DS, 62) 10189857Sobrien RELOC_NUMBER (R_PPC64_TOC16_DS, 63) 10289857Sobrien RELOC_NUMBER (R_PPC64_TOC16_LO_DS, 64) 10389857Sobrien RELOC_NUMBER (R_PPC64_PLTGOT16_DS, 65) 10489857Sobrien RELOC_NUMBER (R_PPC64_PLTGOT16_LO_DS, 66) 10589857Sobrien 10660484Sobrien/* The remaining relocs are from the Embedded ELF ABI, and are not 10760484Sobrien in the SVR4 ELF ABI. */ 10860484Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR32, 101) 10960484Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16, 102) 11060484Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103) 11160484Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104) 11260484Sobrien RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105) 11360484Sobrien RELOC_NUMBER (R_PPC_EMB_SDAI16, 106) 11460484Sobrien RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107) 11560484Sobrien RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108) 11660484Sobrien RELOC_NUMBER (R_PPC_EMB_SDA21, 109) 11760484Sobrien RELOC_NUMBER (R_PPC_EMB_MRKREF, 110) 11860484Sobrien RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111) 11960484Sobrien RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112) 12060484Sobrien RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113) 12160484Sobrien RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114) 12260484Sobrien RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115) 12360484Sobrien RELOC_NUMBER (R_PPC_EMB_RELSDA, 116) 12460484Sobrien 12560484Sobrien /* These are GNU extensions to enable C++ vtable garbage collection. */ 12660484Sobrien RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253) 12760484Sobrien RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254) 12860484Sobrien 12960484Sobrien/* This is a phony reloc to handle any old fashioned TOC16 references 13060484Sobrien that may still be in object files. */ 13160484Sobrien RELOC_NUMBER (R_PPC_TOC16, 255) 13260484Sobrien 13377298SobrienEND_RELOC_NUMBERS (R_PPC_max) 13460484Sobrien 13589857Sobrien/* Aliases for R_PPC64-relocs. */ 13689857Sobrien#define R_PPC64_NONE R_PPC_NONE 13789857Sobrien#define R_PPC64_ADDR32 R_PPC_ADDR32 13889857Sobrien#define R_PPC64_ADDR24 R_PPC_ADDR24 13989857Sobrien#define R_PPC64_ADDR16 R_PPC_ADDR16 14089857Sobrien#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO 14189857Sobrien#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI 14289857Sobrien#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA 14389857Sobrien#define R_PPC64_ADDR14 R_PPC_ADDR14 14489857Sobrien#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN 14589857Sobrien#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN 14689857Sobrien#define R_PPC64_REL24 R_PPC_REL24 14789857Sobrien#define R_PPC64_REL14 R_PPC_REL14 14889857Sobrien#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN 14989857Sobrien#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN 15089857Sobrien#define R_PPC64_GOT16 R_PPC_GOT16 15189857Sobrien#define R_PPC64_GOT16_LO R_PPC_GOT16_LO 15289857Sobrien#define R_PPC64_GOT16_HI R_PPC_GOT16_HI 15389857Sobrien#define R_PPC64_GOT16_HA R_PPC_GOT16_HA 15489857Sobrien#define R_PPC64_COPY R_PPC_COPY 15589857Sobrien#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT 15689857Sobrien#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT 15789857Sobrien#define R_PPC64_RELATIVE R_PPC_RELATIVE 15889857Sobrien#define R_PPC64_UADDR32 R_PPC_UADDR32 15989857Sobrien#define R_PPC64_UADDR16 R_PPC_UADDR16 16089857Sobrien#define R_PPC64_REL32 R_PPC_REL32 16189857Sobrien#define R_PPC64_PLT32 R_PPC_PLT32 16289857Sobrien#define R_PPC64_PLTREL32 R_PPC_PLTREL32 16389857Sobrien#define R_PPC64_PLT16_LO R_PPC_PLT16_LO 16489857Sobrien#define R_PPC64_PLT16_HI R_PPC_PLT16_HI 16589857Sobrien#define R_PPC64_PLT16_HA R_PPC_PLT16_HA 16689857Sobrien#define R_PPC64_SECTOFF R_PPC_SECTOFF 16789857Sobrien#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO 16889857Sobrien#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI 16989857Sobrien#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA 17089857Sobrien#define R_PPC64_ADDR30 R_PPC_ADDR30 17189857Sobrien#define R_PPC64_GNU_VTINHERIT R_PPC_GNU_VTINHERIT 17289857Sobrien#define R_PPC64_GNU_VTENTRY R_PPC_GNU_VTENTRY 17360484Sobrien 17489857Sobrien/* Specify the start of the .glink section. */ 17589857Sobrien#define DT_PPC64_GLINK DT_LOPROC 17689857Sobrien 17760484Sobrien/* Processor specific flags for the ELF header e_flags field. */ 17860484Sobrien 17977298Sobrien#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag. */ 18060484Sobrien 18177298Sobrien#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag. */ 18277298Sobrien#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag. */ 18360484Sobrien 18477298Sobrien/* Processor specific section headers, sh_type field. */ 18560484Sobrien 18660484Sobrien#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \ 18760484Sobrien entries in this section \ 18860484Sobrien based on the address \ 18960484Sobrien specified in the associated \ 19060484Sobrien symbol table entry. */ 19160484Sobrien 19277298Sobrien/* Processor specific section flags, sh_flags field. */ 19360484Sobrien 19460484Sobrien#define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude \ 19560484Sobrien this section from executable \ 19660484Sobrien and shared objects that it \ 19760484Sobrien builds when those objects \ 19860484Sobrien are not to be furhter \ 19960484Sobrien relocated. */ 20060484Sobrien#endif /* _ELF_PPC_H */ 201