x86_64: Fix calls to __morestack under the large code model.
Under the large code model, we cannot assume that __morestack lives within 2^31 bytes of the call site, so we cannot use pc-relative addressing. We cannot perform the call via a temporary register, as the rax register may be used to store the static chain, and all other suitable registers may be either callee-save or used for parameter passing. We cannot use the stack at this point either because __morestack manipulates the stack directly. To avoid these issues, perform an indirect call via a read-only memory location containing the address. This solution is not perfect, as it assumes that the .rodata section is laid out within 2^31 bytes of each function body, but this seems to be sufficient for JIT. Differential Revision: http://reviews.llvm.org/D6787 llvm-svn: 225003
This commit is contained in:
@@ -273,7 +273,7 @@ bool MachineModuleInfo::doInitialization(Module &M) {
|
||||
CurCallSite = 0;
|
||||
CallsEHReturn = 0;
|
||||
CallsUnwindInit = 0;
|
||||
DbgInfoAvailable = UsesVAFloatArgument = false;
|
||||
DbgInfoAvailable = UsesVAFloatArgument = UsesMorestackAddr = false;
|
||||
// Always emit some info, by default "no personality" info.
|
||||
Personalities.push_back(nullptr);
|
||||
AddrLabelSymbols = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user