llvm-project/llvm
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
..
benchmarks
bindings
cmake Support multi-configuration generators correctly in several config files 2021-02-11 09:32:20 -08:00
docs [LangRef] Update memory access ops to raise UB if ptrs are not well defined 2021-02-13 14:13:19 +09:00
examples [Draft] [examples] Move llvm/examples/OCaml-Kaleidoscope/ to llvm-archive 2021-02-11 06:52:24 +05:30
include Add ehcont section support 2021-02-15 14:27:12 +08:00
lib Add ehcont section support 2021-02-15 14:27:12 +08:00
projects
resources
runtimes
test Add ehcont section support 2021-02-15 14:27:12 +08:00
tools [llvm] Use llvm::is_contained (NFC) 2021-02-14 08:36:20 -08:00
unittests [llvm/Support] Add SHA256 implementation 2021-02-14 19:01:01 +00:00
utils Add ehcont section support 2021-02-15 14:27:12 +08:00
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt [Timer] On macOS count number of executed instructions 2021-02-11 17:26:37 +01:00
CODE_OWNERS.TXT
CREDITS.TXT
LICENSE.TXT
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in

README.txt

The LLVM Compiler Infrastructure
================================

This directory and its subdirectories contain source code for LLVM,
a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.