| Index: include/llvm/Target/TargetELFWriterInfo.h
|
| ===================================================================
|
| --- a/include/llvm/Target/TargetELFWriterInfo.h
|
| +++ b/include/llvm/Target/TargetELFWriterInfo.h
|
| @@ -14,11 +14,14 @@
|
| #ifndef LLVM_TARGET_TARGETELFWRITERINFO_H
|
| #define LLVM_TARGET_TARGETELFWRITERINFO_H
|
|
|
| +#include "llvm/System/DataTypes.h"
|
| +
|
| namespace llvm {
|
| class Function;
|
| class TargetData;
|
| class TargetMachine;
|
| class MachineRelocation;
|
| + class TargetELFRelocHelper;
|
| class BinaryObject;
|
| //===--------------------------------------------------------------------===//
|
| // TargetELFWriterInfo
|
| @@ -119,8 +122,25 @@
|
| /// final relocation value for this symbol.
|
| virtual long int computeRelocation(unsigned SymOffset, unsigned RelOffset,
|
| unsigned RelTy) const = 0;
|
| +
|
| + // In certain architectures, nontrivial relocations require
|
| + // peeking into the actual instructions in the stream for patching
|
| + // purposes.
|
| +
|
| + virtual TargetELFRelocHelper *getRelocHelper() const;
|
| };
|
|
|
| + // This class isolates the arch-specific rules for
|
| + // emitting nontrivial intra-section relocations.
|
| + // This is a no-op in most architectures (e.g. x86)
|
| + // This class is NOT a no-op in ARM/ELF
|
| + class TargetELFRelocHelper {
|
| + public:
|
| + virtual ~TargetELFRelocHelper();
|
| + virtual void RelocateField(BinaryObject &BO, uint32_t Offset,
|
| + int64_t Value, unsigned Size,
|
| + const MachineRelocation &MR);
|
| + };
|
| } // end llvm namespace
|
|
|
| #endif // LLVM_TARGET_TARGETELFWRITERINFO_H
|
|
|