1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-25 22:12:57 +02:00
llvm-mirror/lib/CodeGen/AsmPrinter
Reid Kleckner b190c8f871 CodeGen support for x86_64 SEH catch handlers in LLVM
This adds handling for ExceptionHandling::MSVC, used by the
x86_64-pc-windows-msvc triple. It assumes that filter functions have
already been outlined in either the frontend or the backend. Filter
functions are used in place of the landingpad catch clause type info
operands. In catch clause order, the first filter to return true will
catch the exception.

The C specific handler table expects the landing pad to be split into
one block per handler, but LLVM IR uses a single landing pad for all
possible unwind actions. This patch papers over the mismatch by
synthesizing single instruction BBs for every catch clause to fill in
the EH selector that the landing pad block expects.

Missing functionality:
- Accessing data in the parent frame from outlined filters
- Cleanups (from __finally) are unsupported, as they will require
  outlining and parent frame access
- Filter clauses are unsupported, as there's no clear analogue in SEH

In other words, this is the minimal set of changes needed to write IR to
catch arbitrary exceptions and resume normal execution.

Reviewers: majnemer

Differential Revision: http://reviews.llvm.org/D6300

llvm-svn: 225904
2015-01-14 01:05:27 +00:00
..
AddressPool.cpp
AddressPool.h
ARMException.cpp Allow the use of functions as typeinfo in landingpad clauses 2014-11-14 00:35:50 +00:00
AsmPrinter.cpp Add the llvm.frameallocate and llvm.recoverframeallocation intrinsics 2015-01-13 00:48:10 +00:00
AsmPrinterDwarf.cpp Debug Info: Emitting a register in DwarfExpression may fail. Report the 2015-01-14 01:01:28 +00:00
AsmPrinterHandler.h
AsmPrinterInlineAsm.cpp [mips] Set GCC-compatible MIPS asssembler options before inline asm blocks. 2014-12-17 10:56:16 +00:00
ByteStreamer.h
CMakeLists.txt Debug info: Factor out the creation of DWARF expressions from AsmPrinter 2015-01-12 22:19:22 +00:00
DbgValueHistoryCalculator.cpp DbgValueHistoryCalculator: Store modified registers in a BitVector instead of std::set. 2014-10-06 15:31:04 +00:00
DbgValueHistoryCalculator.h
DebugLocEntry.h Move the complex address expression out of DIVariable and into an extra 2014-10-01 18:55:02 +00:00
DebugLocList.h
DIE.cpp Make DIE.h a public CodeGen header. 2015-01-05 21:29:41 +00:00
DIEHash.cpp Make DIE.h a public CodeGen header. 2015-01-05 21:29:41 +00:00
DIEHash.h Make DIE.h a public CodeGen header. 2015-01-05 21:29:41 +00:00
DwarfAccelTable.cpp Make DIE.h a public CodeGen header. 2015-01-05 21:29:41 +00:00
DwarfAccelTable.h Make DIE.h a public CodeGen header. 2015-01-05 21:29:41 +00:00
DwarfCFIException.cpp Rename EH related stuff to be more precise 2014-11-14 23:31:07 +00:00
DwarfCompileUnit.cpp Debug Info: Implement DwarfCompileUnit::addComplexAddress() using 2015-01-14 01:01:30 +00:00
DwarfCompileUnit.h Provide gmlt-like inline scope information in the skeleton CU to facilitate symbolication without needing the .dwo files 2014-11-04 22:12:25 +00:00
DwarfDebug.cpp Debug Info: Move the complex expression handling (=the remainder) of 2015-01-13 23:39:11 +00:00
DwarfDebug.h Debug Info: Move the complex expression handling (=the remainder) of 2015-01-13 23:39:11 +00:00
DwarfException.h CodeGen: split out the Win64Exception emitter 2014-09-01 23:48:34 +00:00
DwarfExpression.cpp Debug Info: Emitting a register in DwarfExpression may fail. Report the 2015-01-14 01:01:28 +00:00
DwarfExpression.h Debug Info: Emitting a register in DwarfExpression may fail. Report the 2015-01-14 01:01:28 +00:00
DwarfFile.cpp Sink dwarf unit length emission down into DwarfUnit::emitHeader 2014-11-01 23:59:23 +00:00
DwarfFile.h Move cross-unit DIE caching to the DwarfFile level, so it doesn't interfere with fission-gmlt data and produce skeleton<>full unit cross referencing. 2014-11-04 22:12:18 +00:00
DwarfStringPool.cpp Remove StringMap::GetOrCreateValue in favor of StringMap::insert 2014-11-19 05:49:42 +00:00
DwarfStringPool.h Remove the unused string section symbol parameter from DwarfFile::emitStrings 2014-09-11 21:12:48 +00:00
DwarfUnit.cpp Debug Info: Move DIEDwarfExpression into DwarfExpression.h because it 2015-01-14 01:01:22 +00:00
DwarfUnit.h Debug Info: Implement DwarfUnit::addRegisterOffset using DwarfExpression. 2015-01-12 22:19:26 +00:00
EHStreamer.cpp CodeGen support for x86_64 SEH catch handlers in LLVM 2015-01-14 01:05:27 +00:00
EHStreamer.h CodeGen support for x86_64 SEH catch handlers in LLVM 2015-01-14 01:05:27 +00:00
ErlangGCPrinter.cpp GCStrategy should not own GCFunctionInfo 2014-12-11 01:47:23 +00:00
LLVMBuild.txt
Makefile
OcamlGCPrinter.cpp GCStrategy should not own GCFunctionInfo 2014-12-11 01:47:23 +00:00
Win64Exception.cpp CodeGen support for x86_64 SEH catch handlers in LLVM 2015-01-14 01:05:27 +00:00
Win64Exception.h CodeGen support for x86_64 SEH catch handlers in LLVM 2015-01-14 01:05:27 +00:00
WinCodeViewLineTables.cpp Temporary fix for PR21528 - use mangled C++ function names in COFF debug info to un-break ASan on Windows 2014-11-12 20:21:20 +00:00
WinCodeViewLineTables.h