[llvm-commits] [llvm] r58405 - /llvm/trunk/include/llvm/CodeGen/MachineRelocation.h
Evan Cheng
evan.cheng at apple.com
Wed Oct 29 16:53:43 PDT 2008
Author: evancheng
Date: Wed Oct 29 18:53:42 2008
New Revision: 58405
URL: http://llvm.org/viewvc/llvm-project?rev=58405&view=rev
Log:
Add a bit to MachineRelocation that tells JIT that target is responsible for resolving the address. e.g. ARM constpool.
Modified:
llvm/trunk/include/llvm/CodeGen/MachineRelocation.h
Modified: llvm/trunk/include/llvm/CodeGen/MachineRelocation.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRelocation.h?rev=58405&r1=58404&r2=58405&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineRelocation.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineRelocation.h Wed Oct 29 18:53:42 2008
@@ -63,10 +63,11 @@
unsigned GOTIndex; // Index in the GOT of this symbol/global
} Target;
- unsigned TargetReloType : 6; // The target relocation ID.
- AddressType AddrType : 4; // The field of Target to use.
- bool NeedStub : 1; // True if this relocation requires a stub.
+ unsigned TargetReloType : 6; // The target relocation ID
+ AddressType AddrType : 4; // The field of Target to use
+ bool NeedStub : 1; // True if this relocation requires a stub
bool GOTRelative : 1; // Should this relocation be relative to the GOT?
+ bool TargetResolve : 1; // True if target should resolve the address
public:
// Relocation types used in a generic implementation. Currently, relocation
@@ -90,6 +91,7 @@
Result.AddrType = isGV;
Result.NeedStub = NeedStub;
Result.GOTRelative = GOTrelative;
+ Result.TargetResolve = false;
Result.Target.GV = GV;
return Result;
}
@@ -109,6 +111,7 @@
Result.AddrType = isGVLazyPtr;
Result.NeedStub = NeedStub;
Result.GOTRelative = GOTrelative;
+ Result.TargetResolve = false;
Result.Target.GV = GV;
return Result;
}
@@ -125,6 +128,7 @@
Result.AddrType = isBB;
Result.NeedStub = false;
Result.GOTRelative = false;
+ Result.TargetResolve = false;
Result.Target.MBB = MBB;
return Result;
}
@@ -143,6 +147,7 @@
Result.AddrType = isExtSym;
Result.NeedStub = true;
Result.GOTRelative = GOTrelative;
+ Result.TargetResolve = false;
Result.Target.ExtSym = ES;
return Result;
}
@@ -151,7 +156,8 @@
/// pool entry.
///
static MachineRelocation getConstPool(intptr_t offset,unsigned RelocationType,
- unsigned CPI, intptr_t cst = 0) {
+ unsigned CPI, intptr_t cst = 0,
+ bool letTargetResolve = false) {
assert((RelocationType & ~63) == 0 && "Relocation type too large!");
MachineRelocation Result;
Result.Offset = offset;
@@ -160,6 +166,7 @@
Result.AddrType = isConstPool;
Result.NeedStub = false;
Result.GOTRelative = false;
+ Result.TargetResolve = letTargetResolve;
Result.Target.Index = CPI;
return Result;
}
@@ -177,6 +184,7 @@
Result.AddrType = isJumpTable;
Result.NeedStub = false;
Result.GOTRelative = false;
+ Result.TargetResolve = false;
Result.Target.Index = JTI;
return Result;
}
@@ -257,6 +265,12 @@
return !NeedStub;
}
+ /// letTargetResolve - Return true if the target JITInfo is usually
+ /// responsible for resolving the address of this relocation.
+ bool letTargetResolve() const {
+ return TargetResolve;
+ }
+
/// getGlobalValue - If this is a global value reference, return the
/// referenced global.
GlobalValue *getGlobalValue() const {
More information about the llvm-commits
mailing list