llvm-project/llvm/utils
Peter Collingbourne 21a1814417 hwasan: Untag unwound stack frames by wrapping personality functions.
One problem with untagging memory in landing pads is that it only works
correctly if the function that catches the exception is instrumented.
If the function is uninstrumented, we have no opportunity to untag the
memory.

To address this, replace landing pad instrumentation with personality function
wrapping. Each function with an instrumented stack has its personality function
replaced with a wrapper provided by the runtime. Functions that did not have
a personality function to begin with also get wrappers if they may be unwound
past. As the unwinder calls personality functions during stack unwinding,
the original personality function is called and the function's stack frame is
untagged by the wrapper if the personality function instructs the unwinder
to keep unwinding. If unwinding stops at a landing pad, the function is
still responsible for untagging its stack frame if it resumes unwinding.

The old landing pad mechanism is preserved for compatibility with old runtimes.

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

llvm-svn: 369721
2019-08-23 01:28:44 +00:00
..
FileCheck [FileCheck] Document FILECHECK_OPTS in -help 2019-08-14 02:56:20 +00:00
KillTheDoctor Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LLVMVisualizers Clean up MSVC visualization of LLVM pointer types 2019-06-30 21:54:34 +00:00
Misc
PerfectShuffle Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Reviewing Python compat - iteritems() vs. items() 2019-01-03 14:12:23 +00:00
TableGen Retire llvm::less_ptr. llvm::deref is much more flexible. 2019-08-22 17:32:16 +00:00
Target/ARM Python compat - print statement 2019-01-03 14:11:33 +00:00
UpdateTestChecks [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
benchmark [benchmark] Fix win32 link on case-sensitive fs 2019-07-30 20:47:59 +00:00
bugpoint
count Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
crosstool
docker [build] Rename clang-headers to clang-resource-headers 2019-03-04 21:19:53 +00:00
emacs ARM MTE stack sanitizer. 2019-07-15 20:02:23 +00:00
fpcmp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
gdb-scripts Fix GDB pretty printer for Optional after r354246 2019-05-28 20:22:16 +00:00
git-svn git-llvm: Make push --force suppress error on nothing to commit as well 2019-08-21 16:03:34 +00:00
gn hwasan: Untag unwound stack frames by wrapping personality functions. 2019-08-23 01:28:44 +00:00
jedit
kate [TableGen] Introduce !listsplat 'binary' operator 2019-04-10 18:26:36 +00:00
lint Python compat - print statement 2019-01-03 14:11:33 +00:00
lit [lit] Diagnose insufficient args to internal env 2019-08-22 03:42:01 +00:00
llvm-build Write the RequiredLibraries for 'all' in LibraryDependencies.inc in a deterministic order (PR42739) 2019-08-05 13:04:07 +00:00
llvm-lit [lit] llvm-lit.in: specify file encoding to UTF-8 2019-01-14 20:02:11 +00:00
not Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
release [utils] Update shebang to use the environment. 2019-08-22 23:42:31 +00:00
sanitizers Add a ubsan blacklist entry for libstdc++ 8.0.1. 2018-11-21 23:04:39 +00:00
testgen
textmate
unittest reland [gtest] Fix printing of StringRef and SmallString in assert messages. 2019-08-21 13:56:29 +00:00
valgrind
vim Line wrap README file 2019-03-14 21:09:14 +00:00
vscode
yaml-bench Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
DSAclean.py Python compat - print statement 2019-01-03 14:11:33 +00:00
DSAextract.py Python compat - print statement 2019-01-03 14:11:33 +00:00
GenLibDeps.pl [Bitcode] Move Bitstream to a separate library 2019-07-03 22:40:07 +00:00
GetRepositoryPath
GetSourceVersion
LLVMBuild.txt Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
UpdateCMakeLists.pl
abtest.py
add_argument_names.py IR: print value numbers for unnamed function arguments 2019-08-03 14:28:34 +00:00
bisect [Utils][NFC] Copy bisect usage documents from commit msg into script. 2019-08-15 22:07:59 +00:00
bisect-skip-count
bugpoint_gisel_reducer.py
check-each-file
chunk-print-before-all.py [Util] Add a helper script for converting -print-before-all output into a file based equivelent 2019-06-19 22:05:47 +00:00
clang-parse-diagnostics-file
codegen-diff
collect_and_build_with_pgo.py [utils] collect_and_build_with_pgo.py: revert part already fixed in rL345461 2018-10-27 23:10:09 +00:00
countloc.sh Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
create_ladder_graph.py Pythran compat - range vs. xrange 2019-01-03 14:11:58 +00:00
demangle_tree.py Python compat - print statement 2019-01-03 14:11:33 +00:00
extract_symbols.py
extract_vplan.py Python compat - print statement 2019-01-03 14:11:33 +00:00
findmisopt
findoptdiff
findsym.pl
getsrcs.sh Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
indirect_calls.py Python compat - print statement 2019-01-03 14:11:33 +00:00
lldbDataFormatters.py Add LLDB dataformatters for llvm::StringRef and lldb_private::ConstString 2019-08-16 23:47:57 +00:00
llvm-compilers-check Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
llvm-gisel-cov.py Python compat - print statement 2019-01-03 14:11:33 +00:00
llvm-native-gxx
llvm.grm
llvmdo Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
llvmgrep Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
prepare-code-coverage-artifact.py svn propset svn:executable on utils/prepare-code-coverage-artifact.py 2019-06-04 23:35:07 +00:00
schedcover.py Python compat - map/filter 2019-01-03 14:12:30 +00:00
shuffle_fuzz.py Pythran compat - range vs. xrange 2019-01-03 14:11:58 +00:00
shuffle_select_fuzz_tester.py Python compat - print statement 2019-01-03 14:11:33 +00:00
sort_includes.py
unicode-case-fold.py Python compat - urllib 2019-01-03 14:12:44 +00:00
update_analyze_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_cc_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_llc_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_mca_test_checks.py [UpdateTestChecks] Emit warning when invalid value for -check-prefix(es) option 2019-07-29 17:41:00 +00:00
update_mir_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
wciia.py Python compat - print statement 2019-01-03 14:11:33 +00:00