aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2019-06-03 22:34:12 +0000
committerJason Molenda <jmolenda@apple.com>2019-06-03 22:34:12 +0000
commitc3ea7c66fec021867e005ad1b02f3c7e80feaa85 (patch)
tree145deba4f8f55240dc4a665528f092530f1ee59a /clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
parent6dc8ce323e24bed62cf9938b60f7323464c0da38 (diff)
downloadllvm-c3ea7c66fec021867e005ad1b02f3c7e80feaa85.zip
llvm-c3ea7c66fec021867e005ad1b02f3c7e80feaa85.tar.gz
llvm-c3ea7c66fec021867e005ad1b02f3c7e80feaa85.tar.bz2
Add support for mid-function epilogues on x86 that end in a non-local jump.
The x86 assembly inspection engine has code to support detecting a mid-function epilogue that ends in a RET instruction; add support for recognizing an epilogue that ends in a JMP, and add a check that the unwind state has been restored to the original stack setup; reinstate the post-prologue unwind state after this JMP instruction. The assembly inspection engine used for other architectures, UnwindAssemblyInstEmulation, detects mid-function epilogues by tracking branch instructions within the function and "forwards" the current unwind state to the targets of the branches. If an epilogue unwinds the stack and exits, followed by a branch target, we get back to the correct unwind state. The x86 unwinder should move to this same algorithm, or possibly even look at implementing an x86 instruction emulation plugin and get UnwindAssemblyInstEmulation to work for x86 too. I added a branch instruction recognizier method that will be necessary if we want to switch the algorithm. Differential Revision: https://reviews.llvm.org/D62764 <rdar://problem/51074422> llvm-svn: 362456
Diffstat (limited to 'clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions