blob: a45b5bb66a072efb8713a3df0d83d0e16e934a80 [file] [log] [blame]
Bill Wendling40d77642007-01-27 02:54:30 +00001//===-- X86ELFWriterInfo.h - ELF Writer Info for X86 ------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Bill Wendling40d77642007-01-27 02:54:30 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file implements ELF writer information for the X86 backend.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86_ELF_WRITER_INFO_H
15#define X86_ELF_WRITER_INFO_H
16
17#include "llvm/Target/TargetELFWriterInfo.h"
18
19namespace llvm {
20
21 class X86ELFWriterInfo : public TargetELFWriterInfo {
Bruno Cardoso Lopes0d3193e2009-06-22 19:16:16 +000022
Bill Wendling40d77642007-01-27 02:54:30 +000023 public:
Rafael Espindola0febc462010-10-03 18:59:45 +000024 X86ELFWriterInfo(bool is64Bit_, bool isLittleEndian_);
Bill Wendling0db1f0b2007-01-27 11:40:32 +000025 virtual ~X86ELFWriterInfo();
Bruno Cardoso Lopesc997d452009-06-11 19:16:03 +000026
Bruno Cardoso Lopes0d3193e2009-06-22 19:16:16 +000027 /// getRelocationType - Returns the target specific ELF Relocation type.
28 /// 'MachineRelTy' contains the object code independent relocation type
29 virtual unsigned getRelocationType(unsigned MachineRelTy) const;
30
31 /// hasRelocationAddend - True if the target uses an addend in the
32 /// ELF relocation entry.
33 virtual bool hasRelocationAddend() const { return is64Bit ? true : false; }
34
Bruno Cardoso Lopes0a38dc52009-07-20 08:52:02 +000035 /// getDefaultAddendForRelTy - Gets the default addend value for a
36 /// relocation entry based on the target ELF relocation type.
Bruno Cardoso Lopes52d08512009-08-05 06:57:03 +000037 virtual long int getDefaultAddendForRelTy(unsigned RelTy,
38 long int Modifier = 0) const;
Bruno Cardoso Lopes171375f2009-07-18 19:30:09 +000039
40 /// getRelTySize - Returns the size of relocatable field in bits
41 virtual unsigned getRelocationTySize(unsigned RelTy) const;
42
Bruno Cardoso Lopes0a38dc52009-07-20 08:52:02 +000043 /// isPCRelativeRel - True if the relocation type is pc relative
44 virtual bool isPCRelativeRel(unsigned RelTy) const;
45
Bruno Cardoso Lopes171375f2009-07-18 19:30:09 +000046 /// getJumpTableRelocationTy - Returns the machine relocation type used
47 /// to reference a jumptable.
Bruno Cardoso Lopes617dd7b2009-07-18 20:52:11 +000048 virtual unsigned getAbsoluteLabelMachineRelTy() const;
Bruno Cardoso Lopes0a38dc52009-07-20 08:52:02 +000049
50 /// computeRelocation - Some relocatable fields could be relocated
51 /// directly, avoiding the relocation symbol emission, compute the
52 /// final relocation value for this symbol.
53 virtual long int computeRelocation(unsigned SymOffset, unsigned RelOffset,
54 unsigned RelTy) const;
Bill Wendling40d77642007-01-27 02:54:30 +000055 };
56
57} // end llvm namespace
58
59#endif // X86_ELF_WRITER_INFO_H