llvm-project/llvm/lib
Arlo Siemsen 080866470d Add ehcont section support
In the future Windows will enable Control-flow Enforcement Technology (CET aka shadow stacks). To protect the path where the context is updated during exception handling, the binary is required to enumerate valid unwind entrypoints in a dedicated section which is validated when the context is being set during exception handling.

This change allows llvm to generate the section that contains the appropriate symbol references in the form expected by the msvc linker.

This feature is enabled through a new module flag, ehcontguard, which was modelled on the cfguard flag.

The change includes a test that when the module flag is enabled the section is correctly generated.

The set of exception continuation information includes returns from exceptional control flow (catchret in llvm).

In order to collect catchret we:
1) Includes an additional flag on machine basic blocks to indicate that the given block is the target of a catchret operation,
2) Introduces a new machine function pass to insert and collect symbols at the start of each block, and
3) Combines these targets with the other EHCont targets that were already being collected.

Change originally authored by Daniel Frampton <dframpto@microsoft.com>

For more details, see MSVC documentation for `/guard:ehcont`
  https://docs.microsoft.com/en-us/cpp/build/reference/guard-enable-eh-continuation-metadata

Reviewed By: pengfei

Differential Revision: https://reviews.llvm.org/D94835
2021-02-15 14:27:12 +08:00
..
Analysis [BasicAA] Merge aliasGEP code paths 2021-02-14 19:35:36 +01:00
AsmParser Encode alignment attribute for `cmpxchg` 2021-02-11 15:17:50 -05:00
BinaryFormat [Debuginfo][DW_OP_implicit_pointer] (1/7) Support for DW_OP_LLVM_implicit_pointer 2021-01-15 14:45:04 +05:30
Bitcode [LTO] Perform DSOLocal propagation in combined index 2021-02-12 22:58:26 -08:00
Bitstream [llvm] Use llvm::append_range (NFC) 2021-01-06 18:27:33 -08:00
CodeGen Add ehcont section support 2021-02-15 14:27:12 +08:00
DWARFLinker [dsymutil][DWARFLinker][NFC] make AddressManager not depending on the order of checks for relocations. 2021-01-31 16:34:10 +03:00
DebugInfo DebugInfo/Symbolize: Exclude ARM mapping symbols for .symtab symbolization after D95916 2021-02-12 11:04:20 -08:00
Demangle [Demangle] Support demangling Swift calling convention in MS demangler. 2021-01-27 13:24:54 -08:00
ExecutionEngine [llvm] Use llvm::is_contained (NFC) 2021-02-14 08:36:20 -08:00
Extensions llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
FileCheck [llvm] Use llvm::sort (NFC) 2021-01-17 10:39:45 -08:00
Frontend [OpenMPIRBuilder] Implement collapseLoops. 2021-02-03 19:12:02 -06:00
FuzzMutate [FuzzMutate] Add mutator to modify instruction flags. 2021-01-23 19:05:20 +00:00
Fuzzer
IR [LTO] Perform DSOLocal propagation in combined index 2021-02-12 22:58:26 -08:00
IRReader static const char *const foo => const char foo[] 2020-12-01 10:33:18 -08:00
InterfaceStub [llvm-elfabi] Support ELF file that lacks .gnu.hash section 2021-01-26 12:31:52 -08:00
LTO [LTO] Perform DSOLocal propagation in combined index 2021-02-12 22:58:26 -08:00
LineEditor llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
Linker ValueMapper: Rename RF_MoveDistinctMDs => RF_ReuseAndMutateDistinctMDs, NFC 2021-02-10 16:53:21 -08:00
MC Add ehcont section support 2021-02-15 14:27:12 +08:00
MCA [llvm] Use llvm::find (NFC) 2021-01-19 20:19:14 -08:00
Object [llvm] Use llvm::is_contained (NFC) 2021-02-14 08:36:20 -08:00
ObjectYAML [llvm-readobj] Add support for decoding FreeBSD ELF notes 2021-02-09 16:59:22 +00:00
Option [clang][cli] Command line round-trip for HeaderSearch options 2021-02-04 10:18:34 +01:00
Passes [llvm] Use llvm::is_contained (NFC) 2021-02-14 08:36:20 -08:00
ProfileData [CSSPGO][llvm-profgen] Add brackets for context id to support extended binary format 2021-02-12 01:14:53 -08:00
Remarks [llvm] Use append_range (NFC) 2021-01-27 23:25:41 -08:00
Support [llvm/Support] Add SHA256 implementation 2021-02-14 19:01:01 +00:00
TableGen [llvm] Use llvm::is_contained (NFC) 2021-02-14 08:36:20 -08:00
Target Add ehcont section support 2021-02-15 14:27:12 +08:00
Testing [clangd] Implement semanticTokens modifiers 2021-02-09 16:31:22 +01:00
TextAPI [llvm] Use llvm::sort (NFC) 2021-01-17 10:39:45 -08:00
ToolDrivers llvm-lib: Pull error printing code out of two functions 2021-01-26 19:13:30 -05:00
Transforms [ConstraintElimination] Fix variables used for pattern matching. 2021-02-14 18:42:37 +00:00
WindowsManifest llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
XRay [lib/Object, tools] - Make ELFObjectFile::getELFFile return reference. 2020-12-04 16:02:29 +03:00
CMakeLists.txt llvmbuildectomy - support disabled native target 2020-11-13 15:50:13 +01:00