ppc.h revision 77298
1145510Sdarrenr/* PPC ELF support for BFD.
2145510Sdarrenr   Copyright (C) 1995, 96, 98, 2000 Free Software Foundation, Inc.
3145510Sdarrenr
4145510Sdarrenr   By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information
5145510Sdarrenr   in the System V Application Binary Interface, PowerPC Processor Supplement
6145510Sdarrenr   and the PowerPC Embedded Application Binary Interface (eabi).
7145510Sdarrenr
8145510SdarrenrThis file is part of BFD, the Binary File Descriptor library.
9145510Sdarrenr
10145510SdarrenrThis program is free software; you can redistribute it and/or modify
11145510Sdarrenrit under the terms of the GNU General Public License as published by
12145510Sdarrenrthe Free Software Foundation; either version 2 of the License, or
13145510Sdarrenr(at your option) any later version.
14145510Sdarrenr
15145510SdarrenrThis program is distributed in the hope that it will be useful,
16145510Sdarrenrbut WITHOUT ANY WARRANTY; without even the implied warranty of
17145510SdarrenrMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18145510SdarrenrGNU General Public License for more details.
19145510Sdarrenr
20145510SdarrenrYou should have received a copy of the GNU General Public License
21145510Sdarrenralong with this program; if not, write to the Free Software
22145510SdarrenrFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
23145510Sdarrenr
24145510Sdarrenr/* This file holds definitions specific to the PPC ELF ABI.  Note
25145510Sdarrenr   that most of this is not actually implemented by BFD.  */
26145510Sdarrenr
27145510Sdarrenr#ifndef _ELF_PPC_H
28145510Sdarrenr#define _ELF_PPC_H
29145510Sdarrenr
30145510Sdarrenr#include "elf/reloc-macros.h"
31145510Sdarrenr
32145510Sdarrenr/* Relocations.  */
33145510SdarrenrSTART_RELOC_NUMBERS (elf_ppc_reloc_type)
34145510Sdarrenr  RELOC_NUMBER (R_PPC_NONE, 0)
35145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR32, 1)
36145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR24, 2)
37145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR16, 3)
38145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR16_LO, 4)
39145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR16_HI, 5)
40145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR16_HA, 6)
41145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR14, 7)
42145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8)
43145510Sdarrenr  RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9)
44145510Sdarrenr  RELOC_NUMBER (R_PPC_REL24, 10)
45145510Sdarrenr  RELOC_NUMBER (R_PPC_REL14, 11)
46145510Sdarrenr  RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12)
47145510Sdarrenr  RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13)
48145510Sdarrenr  RELOC_NUMBER (R_PPC_GOT16, 14)
49145510Sdarrenr  RELOC_NUMBER (R_PPC_GOT16_LO, 15)
50145510Sdarrenr  RELOC_NUMBER (R_PPC_GOT16_HI, 16)
51145510Sdarrenr  RELOC_NUMBER (R_PPC_GOT16_HA, 17)
52145510Sdarrenr  RELOC_NUMBER (R_PPC_PLTREL24, 18)
53145510Sdarrenr  RELOC_NUMBER (R_PPC_COPY, 19)
54145510Sdarrenr  RELOC_NUMBER (R_PPC_GLOB_DAT, 20)
55145510Sdarrenr  RELOC_NUMBER (R_PPC_JMP_SLOT, 21)
56145510Sdarrenr  RELOC_NUMBER (R_PPC_RELATIVE, 22)
57145510Sdarrenr  RELOC_NUMBER (R_PPC_LOCAL24PC, 23)
58145510Sdarrenr  RELOC_NUMBER (R_PPC_UADDR32, 24)
59145510Sdarrenr  RELOC_NUMBER (R_PPC_UADDR16, 25)
60145510Sdarrenr  RELOC_NUMBER (R_PPC_REL32, 26)
61145510Sdarrenr  RELOC_NUMBER (R_PPC_PLT32, 27)
62145510Sdarrenr  RELOC_NUMBER (R_PPC_PLTREL32, 28)
63145510Sdarrenr  RELOC_NUMBER (R_PPC_PLT16_LO, 29)
64145510Sdarrenr  RELOC_NUMBER (R_PPC_PLT16_HI, 30)
65145510Sdarrenr  RELOC_NUMBER (R_PPC_PLT16_HA, 31)
66145510Sdarrenr  RELOC_NUMBER (R_PPC_SDAREL16, 32)
67145510Sdarrenr  RELOC_NUMBER (R_PPC_SECTOFF, 33)
68145510Sdarrenr  RELOC_NUMBER (R_PPC_SECTOFF_LO, 34)
69145510Sdarrenr  RELOC_NUMBER (R_PPC_SECTOFF_HI, 35)
70145510Sdarrenr  RELOC_NUMBER (R_PPC_SECTOFF_HA, 36)
71145510Sdarrenr
72145510Sdarrenr/* The remaining relocs are from the Embedded ELF ABI, and are not
73145510Sdarrenr   in the SVR4 ELF ABI.  */
74145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_NADDR32, 101)
75145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_NADDR16, 102)
76145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103)
77145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104)
78145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105)
79145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_SDAI16, 106)
80145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107)
81145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108)
82145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_SDA21, 109)
83145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_MRKREF, 110)
84145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111)
85145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112)
86145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113)
87145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114)
88145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115)
89145510Sdarrenr  RELOC_NUMBER (R_PPC_EMB_RELSDA, 116)
90145510Sdarrenr
91145510Sdarrenr  /* These are GNU extensions to enable C++ vtable garbage collection.  */
92145510Sdarrenr  RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253)
93145510Sdarrenr  RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254)
94145510Sdarrenr
95145510Sdarrenr/* This is a phony reloc to handle any old fashioned TOC16 references
96145510Sdarrenr   that may still be in object files.  */
97145510Sdarrenr  RELOC_NUMBER (R_PPC_TOC16, 255)
98145510Sdarrenr
99145510SdarrenrEND_RELOC_NUMBERS (R_PPC_max)
100145510Sdarrenr
101145510Sdarrenr
102145510Sdarrenr/* Processor specific flags for the ELF header e_flags field.  */
103145510Sdarrenr
104145510Sdarrenr#define	EF_PPC_EMB		0x80000000	/* PowerPC embedded flag.  */
105145510Sdarrenr
106145510Sdarrenr#define	EF_PPC_RELOCATABLE	0x00010000	/* PowerPC -mrelocatable flag.  */
107145510Sdarrenr#define	EF_PPC_RELOCATABLE_LIB	0x00008000	/* PowerPC -mrelocatable-lib flag.  */
108145510Sdarrenr
109145510Sdarrenr/* Processor specific section headers, sh_type field.  */
110145510Sdarrenr
111145510Sdarrenr#define SHT_ORDERED		SHT_HIPROC	/* Link editor is to sort the \
112145510Sdarrenr						   entries in this section \
113145510Sdarrenr						   based on the address \
114145510Sdarrenr						   specified in the associated \
115145510Sdarrenr						   symbol table entry.  */
116145510Sdarrenr
117145510Sdarrenr/* Processor specific section flags, sh_flags field.  */
118145510Sdarrenr
119145510Sdarrenr#define SHF_EXCLUDE		0x80000000	/* Link editor is to exclude \
120145510Sdarrenr						   this section from executable \
121145510Sdarrenr						   and shared objects that it \
122145510Sdarrenr						   builds when those objects \
123145510Sdarrenr						   are not to be furhter \
124145510Sdarrenr						   relocated.  */
125145510Sdarrenr#endif /* _ELF_PPC_H */
126145510Sdarrenr