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