/* PPC ELF support for BFD.
   Copyright (C) 1995, 96, 98, 2000 Free Software Foundation, Inc.

   By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information
   in the System V Application Binary Interface, PowerPC Processor Supplement
   and the PowerPC Embedded Application Binary Interface (eabi).

This file is part of BFD, the Binary File Descriptor library.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */

/* This file holds definitions specific to the PPC ELF ABI.  Note
   that most of this is not actually implemented by BFD.  */

#ifndef _ELF_PPC_H
#define _ELF_PPC_H

#include "elf/reloc-macros.h"

/* Relocations.  */
START_RELOC_NUMBERS (elf_ppc_reloc_type)
  RELOC_NUMBER (R_PPC_NONE, 0)
  RELOC_NUMBER (R_PPC_ADDR32, 1)
  RELOC_NUMBER (R_PPC_ADDR24, 2)
  RELOC_NUMBER (R_PPC_ADDR16, 3)
  RELOC_NUMBER (R_PPC_ADDR16_LO, 4)
  RELOC_NUMBER (R_PPC_ADDR16_HI, 5)
  RELOC_NUMBER (R_PPC_ADDR16_HA, 6)
  RELOC_NUMBER (R_PPC_ADDR14, 7)
  RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8)
  RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9)
  RELOC_NUMBER (R_PPC_REL24, 10)
  RELOC_NUMBER (R_PPC_REL14, 11)
  RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12)
  RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13)
  RELOC_NUMBER (R_PPC_GOT16, 14)
  RELOC_NUMBER (R_PPC_GOT16_LO, 15)
  RELOC_NUMBER (R_PPC_GOT16_HI, 16)
  RELOC_NUMBER (R_PPC_GOT16_HA, 17)
  RELOC_NUMBER (R_PPC_PLTREL24, 18)
  RELOC_NUMBER (R_PPC_COPY, 19)
  RELOC_NUMBER (R_PPC_GLOB_DAT, 20)
  RELOC_NUMBER (R_PPC_JMP_SLOT, 21)
  RELOC_NUMBER (R_PPC_RELATIVE, 22)
  RELOC_NUMBER (R_PPC_LOCAL24PC, 23)
  RELOC_NUMBER (R_PPC_UADDR32, 24)
  RELOC_NUMBER (R_PPC_UADDR16, 25)
  RELOC_NUMBER (R_PPC_REL32, 26)
  RELOC_NUMBER (R_PPC_PLT32, 27)
  RELOC_NUMBER (R_PPC_PLTREL32, 28)
  RELOC_NUMBER (R_PPC_PLT16_LO, 29)
  RELOC_NUMBER (R_PPC_PLT16_HI, 30)
  RELOC_NUMBER (R_PPC_PLT16_HA, 31)
  RELOC_NUMBER (R_PPC_SDAREL16, 32)
  RELOC_NUMBER (R_PPC_SECTOFF, 33)
  RELOC_NUMBER (R_PPC_SECTOFF_LO, 34)
  RELOC_NUMBER (R_PPC_SECTOFF_HI, 35)
  RELOC_NUMBER (R_PPC_SECTOFF_HA, 36)

/* The remaining relocs are from the Embedded ELF ABI, and are not
   in the SVR4 ELF ABI.  */
  RELOC_NUMBER (R_PPC_EMB_NADDR32, 101)
  RELOC_NUMBER (R_PPC_EMB_NADDR16, 102)
  RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103)
  RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104)
  RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105)
  RELOC_NUMBER (R_PPC_EMB_SDAI16, 106)
  RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107)
  RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108)
  RELOC_NUMBER (R_PPC_EMB_SDA21, 109)
  RELOC_NUMBER (R_PPC_EMB_MRKREF, 110)
  RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111)
  RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112)
  RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113)
  RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114)
  RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115)
  RELOC_NUMBER (R_PPC_EMB_RELSDA, 116)

  /* These are GNU extensions to enable C++ vtable garbage collection.  */
  RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253)
  RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254)

/* This is a phony reloc to handle any old fashioned TOC16 references
   that may still be in object files.  */
  RELOC_NUMBER (R_PPC_TOC16, 255)

END_RELOC_NUMBERS (R_PPC_max)


/* Processor specific flags for the ELF header e_flags field.  */

#define	EF_PPC_EMB		0x80000000	/* PowerPC embedded flag.  */

#define	EF_PPC_RELOCATABLE	0x00010000	/* PowerPC -mrelocatable flag.  */
#define	EF_PPC_RELOCATABLE_LIB	0x00008000	/* PowerPC -mrelocatable-lib flag.  */

/* Processor specific section headers, sh_type field.  */

#define SHT_ORDERED		SHT_HIPROC	/* Link editor is to sort the \
						   entries in this section \
						   based on the address \
						   specified in the associated \
						   symbol table entry.  */

/* Processor specific section flags, sh_flags field.  */

#define SHF_EXCLUDE		0x80000000	/* Link editor is to exclude \
						   this section from executable \
						   and shared objects that it \
						   builds when those objects \
						   are not to be furhter \
						   relocated.  */
#endif /* _ELF_PPC_H */
