mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-05 10:27:02 +00:00
Disable external stubs for X86-32 and X86-64
Instruction selection for X86 now can choose an instruction sequence that will fit any address of any symbol, no matter the pointer width. X86-64 uses a mov+call-via-reg sequence for this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95323 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6fdce65902
commit
85bb54f964
@ -138,14 +138,15 @@ public:
|
||||
///
|
||||
static MachineRelocation getExtSym(uintptr_t offset, unsigned RelocationType,
|
||||
const char *ES, intptr_t cst = 0,
|
||||
bool GOTrelative = 0) {
|
||||
bool GOTrelative = 0,
|
||||
bool NeedStub = true) {
|
||||
assert((RelocationType & ~63) == 0 && "Relocation type too large!");
|
||||
MachineRelocation Result;
|
||||
Result.Offset = offset;
|
||||
Result.ConstantVal = cst;
|
||||
Result.TargetReloType = RelocationType;
|
||||
Result.AddrType = isExtSym;
|
||||
Result.MayNeedFarStub = true;
|
||||
Result.MayNeedFarStub = NeedStub;
|
||||
Result.GOTRelative = GOTrelative;
|
||||
Result.TargetResolve = false;
|
||||
Result.Target.ExtSym = ES;
|
||||
|
@ -191,8 +191,15 @@ template<class CodeEmitter>
|
||||
void Emitter<CodeEmitter>::emitExternalSymbolAddress(const char *ES,
|
||||
unsigned Reloc) {
|
||||
intptr_t RelocCST = (Reloc == X86::reloc_picrel_word) ? PICBaseOffset : 0;
|
||||
|
||||
// X86 never needs stubs because instruction selection will always pick
|
||||
// an instruction sequence that is large enough to hold any address
|
||||
// to a symbol.
|
||||
// (see X86ISelLowering.cpp, near 2039: X86TargetLowering::LowerCall)
|
||||
bool NeedStub = false;
|
||||
MCE.addRelocation(MachineRelocation::getExtSym(MCE.getCurrentPCOffset(),
|
||||
Reloc, ES, RelocCST));
|
||||
Reloc, ES, RelocCST,
|
||||
0, NeedStub));
|
||||
if (Reloc == X86::reloc_absolute_dword)
|
||||
MCE.emitDWordLE(0);
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user