forked from OSchip/llvm-project
6b75a3523f
This includes .seh_* directives for generating it from assembly. It is designed fairly similarly to the ARM64 handling. For .seh_handler directives, such as ".seh_handler __C_specific_handler, @except" (which is supported on x86_64 and aarch64 so far), the "@except" bit doesn't work in ARM assembly, as '@' is used as a comment character (on all current platforms). Allow using '%' instead of '@' for this purpose. This convention is used by GAS in similar contexts already, e.g. [1]: Note on targets where the @ character is the start of a comment (eg ARM) then another character is used instead. For example the ARM port uses the % character. In practice, this unfortunately means that all such .seh_handler directives will need ifdefs for ARM. Contrary to ARM64, on ARM, it's quite common that we can't evaluate e.g. the function length at this point, due to instructions whose length is finalized later. (Also, inline jump tables end with a ".p2align 1".) If unable to to evaluate the function length immediately, emit it as an MCExpr instead. If we'd implement splitting the unwind info for a function (which isn't implemented for ARM64 yet either), we wouldn't know whether we need to split it though. Avoid calling getFrameIndexOffset() on an unset FuncInfo.UnwindHelpFrameIdx, to avoid triggering asserts in the preexisting testcase CodeGen/ARM/Windows/wineh-basic.ll. (Once MSVC exception handling is fully implemented, those changes can be reverted.) [1] https://sourceware.org/binutils/docs/as/Section.html#Section Differential Revision: https://reviews.llvm.org/D125645 |
||
---|---|---|
.. | ||
AIXException.cpp | ||
ARMException.cpp | ||
AccelTable.cpp | ||
AddressPool.cpp | ||
AddressPool.h | ||
AsmPrinter.cpp | ||
AsmPrinterDwarf.cpp | ||
AsmPrinterInlineAsm.cpp | ||
ByteStreamer.h | ||
CMakeLists.txt | ||
CodeViewDebug.cpp | ||
CodeViewDebug.h | ||
DIE.cpp | ||
DIEHash.cpp | ||
DIEHash.h | ||
DIEHashAttributes.def | ||
DbgEntityHistoryCalculator.cpp | ||
DebugHandlerBase.cpp | ||
DebugLocEntry.h | ||
DebugLocStream.cpp | ||
DebugLocStream.h | ||
DwarfCFIException.cpp | ||
DwarfCompileUnit.cpp | ||
DwarfCompileUnit.h | ||
DwarfDebug.cpp | ||
DwarfDebug.h | ||
DwarfException.h | ||
DwarfExpression.cpp | ||
DwarfExpression.h | ||
DwarfFile.cpp | ||
DwarfFile.h | ||
DwarfStringPool.cpp | ||
DwarfStringPool.h | ||
DwarfUnit.cpp | ||
DwarfUnit.h | ||
EHStreamer.cpp | ||
EHStreamer.h | ||
ErlangGCPrinter.cpp | ||
OcamlGCPrinter.cpp | ||
PseudoProbePrinter.cpp | ||
PseudoProbePrinter.h | ||
WasmException.cpp | ||
WasmException.h | ||
WinCFGuard.cpp | ||
WinCFGuard.h | ||
WinException.cpp | ||
WinException.h |