llvm-project/llvm
Luke Cheeseman 41a9e53500 [Dwarf/AArch64] Return address signing B key dwarf support
- When signing return addresses with -msign-return-address=<scope>{+<key>},
  either the A key instructions or the B key instructions can be used. To
  correctly authenticate the return address, the unwinder/debugger must know
  which key was used to sign the return address.
- When and exception is thrown or a break point reached, it may be necessary to
  unwind the stack. To accomplish this, the unwinder/debugger must be able to
  first authenticate an the return address if it has been signed.
- To enable this, the augmentation string of CIEs has been extended to allow
  inclusion of a 'B' character. Functions that are signed using the B key
  variant of the instructions should have and FDE whose associated CIE has a 'B'
  in the augmentation string.
- One must also be able to preserve these semantics when first stepping from a
  high level language into assembly and then, as a second step, into an object
  file. To achieve this, I have introduced a new assembly directive
  '.cfi_b_key_frame ', that tells the assembler the current frame uses return
  address signing with the B key.
- This ensures that the FDE is associated with a CIE that has 'B' in the
  augmentation string.

Differential Revision: https://reviews.llvm.org/D51798

llvm-svn: 349895
2018-12-21 10:45:08 +00:00
..
benchmarks
bindings
cmake Fix Windows build failures caused by r349839 2018-12-20 22:36:02 +00:00
docs cmake: Remove add_llvm_loadable_module() 2018-12-20 22:04:08 +00:00
examples Fix build break from r347239 2018-11-19 18:51:11 +00:00
include [Dwarf/AArch64] Return address signing B key dwarf support 2018-12-21 10:45:08 +00:00
lib [Dwarf/AArch64] Return address signing B key dwarf support 2018-12-21 10:45:08 +00:00
projects [projects] Use directory name for add_llvm_external_projects 2018-12-04 00:12:03 +00:00
resources
runtimes
test [Dwarf/AArch64] Return address signing B key dwarf support 2018-12-21 10:45:08 +00:00
tools cmake: Remove add_llvm_loadable_module() 2018-12-20 22:04:08 +00:00
unittests cmake: Remove add_llvm_loadable_module() 2018-12-20 22:04:08 +00:00
utils [gn check] Unbreak check-lld if llvm_install_binutils_symlinks is false 2018-12-20 21:57:12 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt [CMake] Add libunwind when 'all' is being passed as LLVM_ENABLE_PROJECTS 2018-12-20 18:39:47 +00:00
CODE_OWNERS.TXT [llvm-mca] Move llvm-mca library to llvm/lib/MCA. 2018-12-17 08:08:31 +00:00
CREDITS.TXT add Kang Zhang(shkzhang@cn.ibm.com) to the CREDITS.TXT 2018-11-25 02:56:49 +00:00
LICENSE.TXT
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT Update the list of platforms & archs 2018-12-16 14:47:16 +00:00
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.