1//===-- PPCRelocations.h - PPC Code Relocations -----------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the PowerPC 32-bit target-specific relocation types.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef PPCRELOCATIONS_H
15#define PPCRELOCATIONS_H
16
17#include "llvm/CodeGen/MachineRelocation.h"
18
19// Hack to rid us of a PPC pre-processor symbol which is erroneously
20// defined in a PowerPC header file (bug in Linux/PPC)
21#ifdef PPC
22#undef PPC
23#endif
24
25namespace llvm {
26  namespace PPC {
27    enum RelocationType {
28      // reloc_vanilla - A standard relocation, where the address of the
29      // relocated object completely overwrites the address of the relocation.
30      reloc_vanilla,
31
32      // reloc_pcrel_bx - PC relative relocation, for the b or bl instructions.
33      reloc_pcrel_bx,
34
35      // reloc_pcrel_bcx - PC relative relocation, for BLT,BLE,BEQ,BGE,BGT,BNE,
36      // and other bcx instructions.
37      reloc_pcrel_bcx,
38
39      // reloc_absolute_high - Absolute relocation, for the loadhi instruction
40      // (which is really addis).  Add the high 16-bits of the specified global
41      // address into the low 16-bits of the instruction.
42      reloc_absolute_high,
43
44      // reloc_absolute_low - Absolute relocation, for the la instruction (which
45      // is really an addi).  Add the low 16-bits of the specified global
46      // address into the low 16-bits of the instruction.
47      reloc_absolute_low,
48
49      // reloc_absolute_low_ix - Absolute relocation for the 64-bit load/store
50      // instruction which have two implicit zero bits.
51      reloc_absolute_low_ix
52    };
53  }
54}
55
56#endif
57