diff options
| author | Eli Friedman <efriedma@quicinc.com> | 2019-05-03 00:10:45 +0000 |
|---|---|---|
| committer | Eli Friedman <efriedma@quicinc.com> | 2019-05-03 00:10:45 +0000 |
| commit | 0b61d220c9b1f00e79d5457b9b8d2f046e49776c (patch) | |
| tree | 36ac5debf5669b03a79b14cd6afd1ae5f2441a36 /llvm/lib/CodeGen/AsmPrinter/WinException.h | |
| parent | 973d66eefcbbe3dc3a147f73435498846debb872 (diff) | |
| download | bcm5719-llvm-0b61d220c9b1f00e79d5457b9b8d2f046e49776c.tar.gz bcm5719-llvm-0b61d220c9b1f00e79d5457b9b8d2f046e49776c.zip | |
[AArch64][Windows] Compute function length correctly in unwind tables.
The primary fix here is to WinException.cpp: we need to exclude jump
tables when computing the length of a function, or else we fail to
correctly compute the length. (We can only compute the number of bytes
consumed by certain assembler directives after the entire file is
parsed. ".p2align" is one of those directives, and is used by jump table
generation.)
The secondary fix, to MCWin64EH, is to make sure we don't silently
miscompile if we hit a similar situation in the future.
It's possible we could extend ARM64EmitUnwindInfo so it allows function
bodies that contain assembler directives, but that's a lot more
complicated; see the FIXME in MCWin64EH.cpp.
Fixes https://bugs.llvm.org/show_bug.cgi?id=41581 .
Differential Revision: https://reviews.llvm.org/D61095
llvm-svn: 359849
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/WinException.h')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/WinException.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/WinException.h b/llvm/lib/CodeGen/AsmPrinter/WinException.h index 9491d7d69c2..dc503630213 100644 --- a/llvm/lib/CodeGen/AsmPrinter/WinException.h +++ b/llvm/lib/CodeGen/AsmPrinter/WinException.h @@ -85,6 +85,7 @@ class LLVM_LIBRARY_VISIBILITY WinException : public EHStreamer { /// only), it is relative to the frame pointer. int getFrameIndexOffset(int FrameIndex, const WinEHFuncInfo &FuncInfo); + void endFuncletImpl(); public: //===--------------------------------------------------------------------===// // Main entry points. @@ -99,6 +100,8 @@ public: /// immediately after the function entry point. void beginFunction(const MachineFunction *MF) override; + void markFunctionEnd() override; + /// Gather and emit post-function exception information. void endFunction(const MachineFunction *) override; |

