[PATCH] x86_64: Fix calls to __morestack under the large code model.

Peter Collingbourne peter at pcc.me.uk
Sun Dec 28 06:06:59 PST 2014


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.

http://reviews.llvm.org/D6787

Files:
  include/llvm/CodeGen/MachineModuleInfo.h
  lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  lib/CodeGen/MachineModuleInfo.cpp
  lib/Target/X86/X86FrameLowering.cpp
  test/CodeGen/X86/segmented-stacks.ll

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6787.17657.patch
Type: text/x-patch
Size: 5217 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141228/e68e723e/attachment.bin>


More information about the llvm-commits mailing list