Date: Wed, 23 Oct 2019 17:52:22 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r353944 - in vendor/compiler-rt/dist: include/fuzzer include/sanitizer lib/asan lib/builtins lib/builtins/aarch64 lib/builtins/arm lib/dfsan lib/fuzzer lib/fuzzer/utils lib/gwp_asan lib... Message-ID: <201910231752.x9NHqMbX078149@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Wed Oct 23 17:52:22 2019 New Revision: 353944 URL: https://svnweb.freebsd.org/changeset/base/353944 Log: Vendor import of stripped compiler-rt trunk r375505, the last commit before the upstream Subversion repository was made read-only, and the LLVM project migrated to GitHub: https://llvm.org/svn/llvm-project/compiler-rt/trunk@375505 Added: vendor/compiler-rt/dist/include/fuzzer/ vendor/compiler-rt/dist/include/fuzzer/FuzzedDataProvider.h vendor/compiler-rt/dist/include/sanitizer/ubsan_interface.h vendor/compiler-rt/dist/lib/asan/asan_activation.cpp vendor/compiler-rt/dist/lib/asan/asan_allocator.cpp vendor/compiler-rt/dist/lib/asan/asan_debugging.cpp vendor/compiler-rt/dist/lib/asan/asan_descriptions.cpp vendor/compiler-rt/dist/lib/asan/asan_errors.cpp vendor/compiler-rt/dist/lib/asan/asan_fake_stack.cpp vendor/compiler-rt/dist/lib/asan/asan_flags.cpp vendor/compiler-rt/dist/lib/asan/asan_fuchsia.cpp vendor/compiler-rt/dist/lib/asan/asan_globals.cpp vendor/compiler-rt/dist/lib/asan/asan_globals_win.cpp vendor/compiler-rt/dist/lib/asan/asan_interceptors.cpp vendor/compiler-rt/dist/lib/asan/asan_interceptors_memintrinsics.cpp vendor/compiler-rt/dist/lib/asan/asan_linux.cpp vendor/compiler-rt/dist/lib/asan/asan_mac.cpp vendor/compiler-rt/dist/lib/asan/asan_malloc_linux.cpp vendor/compiler-rt/dist/lib/asan/asan_malloc_mac.cpp vendor/compiler-rt/dist/lib/asan/asan_malloc_win.cpp vendor/compiler-rt/dist/lib/asan/asan_memory_profile.cpp vendor/compiler-rt/dist/lib/asan/asan_new_delete.cpp vendor/compiler-rt/dist/lib/asan/asan_poisoning.cpp vendor/compiler-rt/dist/lib/asan/asan_posix.cpp vendor/compiler-rt/dist/lib/asan/asan_preinit.cpp vendor/compiler-rt/dist/lib/asan/asan_premap_shadow.cpp vendor/compiler-rt/dist/lib/asan/asan_report.cpp vendor/compiler-rt/dist/lib/asan/asan_rtems.cpp vendor/compiler-rt/dist/lib/asan/asan_rtl.cpp vendor/compiler-rt/dist/lib/asan/asan_shadow_setup.cpp vendor/compiler-rt/dist/lib/asan/asan_stack.cpp vendor/compiler-rt/dist/lib/asan/asan_stats.cpp vendor/compiler-rt/dist/lib/asan/asan_suppressions.cpp vendor/compiler-rt/dist/lib/asan/asan_thread.cpp vendor/compiler-rt/dist/lib/asan/asan_win.cpp vendor/compiler-rt/dist/lib/asan/asan_win_dll_thunk.cpp vendor/compiler-rt/dist/lib/asan/asan_win_dynamic_runtime_thunk.cpp vendor/compiler-rt/dist/lib/asan/asan_win_weak_interception.cpp vendor/compiler-rt/dist/lib/builtins/aarch64/fp_mode.c vendor/compiler-rt/dist/lib/builtins/arm/fp_mode.c vendor/compiler-rt/dist/lib/builtins/fp_mode.c vendor/compiler-rt/dist/lib/builtins/fp_mode.h vendor/compiler-rt/dist/lib/dfsan/dfsan.cpp vendor/compiler-rt/dist/lib/dfsan/dfsan_custom.cpp vendor/compiler-rt/dist/lib/dfsan/dfsan_interceptors.cpp vendor/compiler-rt/dist/lib/gwp_asan/scripts/ vendor/compiler-rt/dist/lib/gwp_asan/scripts/symbolize.sh (contents, props changed) vendor/compiler-rt/dist/lib/gwp_asan/stack_trace_compressor.cpp vendor/compiler-rt/dist/lib/gwp_asan/stack_trace_compressor.h vendor/compiler-rt/dist/lib/hwasan/hwasan_exceptions.cpp vendor/compiler-rt/dist/lib/interception/interception_linux.cpp vendor/compiler-rt/dist/lib/interception/interception_mac.cpp vendor/compiler-rt/dist/lib/interception/interception_type_test.cpp vendor/compiler-rt/dist/lib/interception/interception_win.cpp vendor/compiler-rt/dist/lib/lsan/lsan.cpp vendor/compiler-rt/dist/lib/lsan/lsan_allocator.cpp vendor/compiler-rt/dist/lib/lsan/lsan_common.cpp vendor/compiler-rt/dist/lib/lsan/lsan_common_linux.cpp vendor/compiler-rt/dist/lib/lsan/lsan_common_mac.cpp vendor/compiler-rt/dist/lib/lsan/lsan_interceptors.cpp vendor/compiler-rt/dist/lib/lsan/lsan_linux.cpp vendor/compiler-rt/dist/lib/lsan/lsan_mac.cpp vendor/compiler-rt/dist/lib/lsan/lsan_malloc_mac.cpp vendor/compiler-rt/dist/lib/lsan/lsan_preinit.cpp vendor/compiler-rt/dist/lib/lsan/lsan_thread.cpp vendor/compiler-rt/dist/lib/msan/msan.cpp vendor/compiler-rt/dist/lib/msan/msan_allocator.cpp vendor/compiler-rt/dist/lib/msan/msan_chained_origin_depot.cpp vendor/compiler-rt/dist/lib/msan/msan_interceptors.cpp vendor/compiler-rt/dist/lib/msan/msan_linux.cpp vendor/compiler-rt/dist/lib/msan/msan_new_delete.cpp vendor/compiler-rt/dist/lib/msan/msan_poisoning.cpp vendor/compiler-rt/dist/lib/msan/msan_report.cpp vendor/compiler-rt/dist/lib/msan/msan_thread.cpp vendor/compiler-rt/dist/lib/profile/InstrProfilingRuntime.cpp vendor/compiler-rt/dist/lib/safestack/safestack.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sancov_flags.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator_checks.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator_report.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_nolibc.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_fuchsia.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_dll_thunk.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_sections.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_weak_interception.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_deadlock_detector1.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_deadlock_detector2.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_errno.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_file.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_flag_parser.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_flags.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_fuchsia.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_glibc_version.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_libc.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_libignore.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux_s390.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_mac.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_mac_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_netbsd.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_openbsd.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_persistent_allocator.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_freebsd.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_linux.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_netbsd.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_openbsd.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_solaris.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_posix.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_posix_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_printf.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_common.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_linux.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_mac.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_solaris.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_rtems.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_solaris.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stackdepot.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace_sparc.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stoptheworld_mac.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_suppressions.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_mac.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_report.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_win.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_termination.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_thread_registry.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_tls_get_addr.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_type_traits.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_unwind_win.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_dll_thunk.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cpp vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_weak_interception.cpp vendor/compiler-rt/dist/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp vendor/compiler-rt/dist/lib/sanitizer_common/symbolizer/sanitizer_wrappers.cpp vendor/compiler-rt/dist/lib/scudo/standalone/checksum.cpp vendor/compiler-rt/dist/lib/scudo/standalone/common.cpp vendor/compiler-rt/dist/lib/scudo/standalone/crc32_hw.cpp vendor/compiler-rt/dist/lib/scudo/standalone/flags.cpp vendor/compiler-rt/dist/lib/scudo/standalone/flags_parser.cpp vendor/compiler-rt/dist/lib/scudo/standalone/fuchsia.cpp vendor/compiler-rt/dist/lib/scudo/standalone/linux.cpp vendor/compiler-rt/dist/lib/scudo/standalone/report.cpp vendor/compiler-rt/dist/lib/scudo/standalone/secondary.cpp vendor/compiler-rt/dist/lib/scudo/standalone/string_utils.cpp vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_c.cpp vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_c_bionic.cpp vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_cpp.cpp vendor/compiler-rt/dist/lib/stats/stats.cpp vendor/compiler-rt/dist/lib/stats/stats_client.cpp vendor/compiler-rt/dist/lib/tsan/benchmarks/func_entry_exit.cpp vendor/compiler-rt/dist/lib/tsan/benchmarks/mini_bench_local.cpp vendor/compiler-rt/dist/lib/tsan/benchmarks/mini_bench_shared.cpp vendor/compiler-rt/dist/lib/tsan/benchmarks/mop.cpp vendor/compiler-rt/dist/lib/tsan/benchmarks/start_many_threads.cpp vendor/compiler-rt/dist/lib/tsan/benchmarks/vts_many_threads_bench.cpp vendor/compiler-rt/dist/lib/tsan/dd/dd_interceptors.cpp vendor/compiler-rt/dist/lib/tsan/dd/dd_rtl.cpp vendor/compiler-rt/dist/lib/tsan/go/tsan_go.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_clock.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_debugging.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_external.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_fd.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_flags.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_ignoreset.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors_libdispatch.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors_mac.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors_mach_vm.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors_posix.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_ann.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_atomic.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_java.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_malloc_mac.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_md5.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mman.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mutex.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mutexset.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_new_delete.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_linux.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_mac.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_posix.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_windows.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_preinit.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_report.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_mutex.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_proc.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_report.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_thread.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_stack_trace.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_stat.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_suppressions.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_symbolize.cpp vendor/compiler-rt/dist/lib/tsan/rtl/tsan_sync.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_diag.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_diag_standalone.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_flags.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_handlers.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_handlers_cxx.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_init.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_init_standalone.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_init_standalone_preinit.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_monitor.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_signals_standalone.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash_itanium.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash_win.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_value.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_win_dll_thunk.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_win_dynamic_runtime_thunk.cpp vendor/compiler-rt/dist/lib/ubsan/ubsan_win_weak_interception.cpp vendor/compiler-rt/dist/lib/ubsan_minimal/ubsan_minimal_handlers.cpp vendor/compiler-rt/dist/lib/xray/xray_AArch64.cpp vendor/compiler-rt/dist/lib/xray/xray_arm.cpp vendor/compiler-rt/dist/lib/xray/xray_basic_flags.cpp vendor/compiler-rt/dist/lib/xray/xray_basic_logging.cpp vendor/compiler-rt/dist/lib/xray/xray_buffer_queue.cpp vendor/compiler-rt/dist/lib/xray/xray_fdr_flags.cpp vendor/compiler-rt/dist/lib/xray/xray_fdr_logging.cpp vendor/compiler-rt/dist/lib/xray/xray_flags.cpp vendor/compiler-rt/dist/lib/xray/xray_init.cpp vendor/compiler-rt/dist/lib/xray/xray_interface.cpp vendor/compiler-rt/dist/lib/xray/xray_log_interface.cpp vendor/compiler-rt/dist/lib/xray/xray_mips.cpp vendor/compiler-rt/dist/lib/xray/xray_mips64.cpp vendor/compiler-rt/dist/lib/xray/xray_powerpc64.cpp vendor/compiler-rt/dist/lib/xray/xray_profile_collector.cpp vendor/compiler-rt/dist/lib/xray/xray_profiling.cpp vendor/compiler-rt/dist/lib/xray/xray_profiling_flags.cpp vendor/compiler-rt/dist/lib/xray/xray_trampoline_powerpc64.cpp vendor/compiler-rt/dist/lib/xray/xray_utils.cpp vendor/compiler-rt/dist/lib/xray/xray_x86_64.cpp vendor/compiler-rt/dist/tools/ vendor/compiler-rt/dist/tools/CMakeLists.txt vendor/compiler-rt/dist/tools/gwp_asan/ vendor/compiler-rt/dist/tools/gwp_asan/CMakeLists.txt vendor/compiler-rt/dist/tools/gwp_asan/stack_trace_compressor_fuzzer.cpp Deleted: vendor/compiler-rt/dist/lib/asan/asan_activation.cc vendor/compiler-rt/dist/lib/asan/asan_allocator.cc vendor/compiler-rt/dist/lib/asan/asan_debugging.cc vendor/compiler-rt/dist/lib/asan/asan_descriptions.cc vendor/compiler-rt/dist/lib/asan/asan_errors.cc vendor/compiler-rt/dist/lib/asan/asan_fake_stack.cc vendor/compiler-rt/dist/lib/asan/asan_flags.cc vendor/compiler-rt/dist/lib/asan/asan_fuchsia.cc vendor/compiler-rt/dist/lib/asan/asan_globals.cc vendor/compiler-rt/dist/lib/asan/asan_globals_win.cc vendor/compiler-rt/dist/lib/asan/asan_interceptors.cc vendor/compiler-rt/dist/lib/asan/asan_interceptors_memintrinsics.cc vendor/compiler-rt/dist/lib/asan/asan_linux.cc vendor/compiler-rt/dist/lib/asan/asan_mac.cc vendor/compiler-rt/dist/lib/asan/asan_malloc_linux.cc vendor/compiler-rt/dist/lib/asan/asan_malloc_mac.cc vendor/compiler-rt/dist/lib/asan/asan_malloc_win.cc vendor/compiler-rt/dist/lib/asan/asan_memory_profile.cc vendor/compiler-rt/dist/lib/asan/asan_new_delete.cc vendor/compiler-rt/dist/lib/asan/asan_poisoning.cc vendor/compiler-rt/dist/lib/asan/asan_posix.cc vendor/compiler-rt/dist/lib/asan/asan_preinit.cc vendor/compiler-rt/dist/lib/asan/asan_premap_shadow.cc vendor/compiler-rt/dist/lib/asan/asan_report.cc vendor/compiler-rt/dist/lib/asan/asan_rtems.cc vendor/compiler-rt/dist/lib/asan/asan_rtl.cc vendor/compiler-rt/dist/lib/asan/asan_shadow_setup.cc vendor/compiler-rt/dist/lib/asan/asan_stack.cc vendor/compiler-rt/dist/lib/asan/asan_stats.cc vendor/compiler-rt/dist/lib/asan/asan_suppressions.cc vendor/compiler-rt/dist/lib/asan/asan_thread.cc vendor/compiler-rt/dist/lib/asan/asan_win.cc vendor/compiler-rt/dist/lib/asan/asan_win_dll_thunk.cc vendor/compiler-rt/dist/lib/asan/asan_win_dynamic_runtime_thunk.cc vendor/compiler-rt/dist/lib/asan/asan_win_weak_interception.cc vendor/compiler-rt/dist/lib/dfsan/dfsan.cc vendor/compiler-rt/dist/lib/dfsan/dfsan_custom.cc vendor/compiler-rt/dist/lib/dfsan/dfsan_interceptors.cc vendor/compiler-rt/dist/lib/fuzzer/utils/ vendor/compiler-rt/dist/lib/interception/interception_linux.cc vendor/compiler-rt/dist/lib/interception/interception_mac.cc vendor/compiler-rt/dist/lib/interception/interception_type_test.cc vendor/compiler-rt/dist/lib/interception/interception_win.cc vendor/compiler-rt/dist/lib/lsan/lsan.cc vendor/compiler-rt/dist/lib/lsan/lsan_allocator.cc vendor/compiler-rt/dist/lib/lsan/lsan_common.cc vendor/compiler-rt/dist/lib/lsan/lsan_common_linux.cc vendor/compiler-rt/dist/lib/lsan/lsan_common_mac.cc vendor/compiler-rt/dist/lib/lsan/lsan_interceptors.cc vendor/compiler-rt/dist/lib/lsan/lsan_linux.cc vendor/compiler-rt/dist/lib/lsan/lsan_mac.cc vendor/compiler-rt/dist/lib/lsan/lsan_malloc_mac.cc vendor/compiler-rt/dist/lib/lsan/lsan_preinit.cc vendor/compiler-rt/dist/lib/lsan/lsan_thread.cc vendor/compiler-rt/dist/lib/msan/msan.cc vendor/compiler-rt/dist/lib/msan/msan_allocator.cc vendor/compiler-rt/dist/lib/msan/msan_chained_origin_depot.cc vendor/compiler-rt/dist/lib/msan/msan_interceptors.cc vendor/compiler-rt/dist/lib/msan/msan_linux.cc vendor/compiler-rt/dist/lib/msan/msan_new_delete.cc vendor/compiler-rt/dist/lib/msan/msan_poisoning.cc vendor/compiler-rt/dist/lib/msan/msan_report.cc vendor/compiler-rt/dist/lib/msan/msan_thread.cc vendor/compiler-rt/dist/lib/profile/InstrProfilingRuntime.cc vendor/compiler-rt/dist/lib/safestack/safestack.cc vendor/compiler-rt/dist/lib/sancov/ vendor/compiler-rt/dist/lib/sanitizer_common/sancov_flags.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator_checks.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator_report.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_nolibc.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_fuchsia.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_dll_thunk.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_sections.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_coverage_win_weak_interception.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_deadlock_detector1.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_deadlock_detector2.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_errno.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_file.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_flag_parser.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_flags.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_fuchsia.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_libc.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_libignore.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux_s390.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_mac.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_mac_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_netbsd.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_openbsd.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_persistent_allocator.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_freebsd.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_linux.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_netbsd.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_openbsd.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_posix.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_solaris.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_posix.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_posix_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_printf.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_bsd.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_common.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_linux.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_mac.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps_solaris.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_rtems.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_solaris.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stackdepot.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace_printer.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stacktrace_sparc.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stoptheworld_mac.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_suppressions.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_mac.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_markup.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_report.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_win.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_termination.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_thread_registry.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_tls_get_addr.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_type_traits.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_unwind_win.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_dll_thunk.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_weak_interception.cc vendor/compiler-rt/dist/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cc vendor/compiler-rt/dist/lib/sanitizer_common/symbolizer/sanitizer_wrappers.cc vendor/compiler-rt/dist/lib/scudo/standalone/checksum.cc vendor/compiler-rt/dist/lib/scudo/standalone/common.cc vendor/compiler-rt/dist/lib/scudo/standalone/crc32_hw.cc vendor/compiler-rt/dist/lib/scudo/standalone/flags.cc vendor/compiler-rt/dist/lib/scudo/standalone/flags_parser.cc vendor/compiler-rt/dist/lib/scudo/standalone/fuchsia.cc vendor/compiler-rt/dist/lib/scudo/standalone/linux.cc vendor/compiler-rt/dist/lib/scudo/standalone/report.cc vendor/compiler-rt/dist/lib/scudo/standalone/secondary.cc vendor/compiler-rt/dist/lib/scudo/standalone/string_utils.cc vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_c.cc vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_c_bionic.cc vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_cpp.cc vendor/compiler-rt/dist/lib/stats/stats.cc vendor/compiler-rt/dist/lib/stats/stats_client.cc vendor/compiler-rt/dist/lib/tsan/benchmarks/func_entry_exit.cc vendor/compiler-rt/dist/lib/tsan/benchmarks/mini_bench_local.cc vendor/compiler-rt/dist/lib/tsan/benchmarks/mini_bench_shared.cc vendor/compiler-rt/dist/lib/tsan/benchmarks/mop.cc vendor/compiler-rt/dist/lib/tsan/benchmarks/start_many_threads.cc vendor/compiler-rt/dist/lib/tsan/benchmarks/vts_many_threads_bench.cc vendor/compiler-rt/dist/lib/tsan/dd/dd_interceptors.cc vendor/compiler-rt/dist/lib/tsan/dd/dd_rtl.cc vendor/compiler-rt/dist/lib/tsan/go/tsan_go.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_clock.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_debugging.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_external.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_fd.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_flags.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_ignoreset.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors_mac.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_ann.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_atomic.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_java.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_libdispatch.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_malloc_mac.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_md5.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mman.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mutex.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mutexset.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_new_delete.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_linux.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_mac.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_posix.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform_windows.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_preinit.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_report.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_mutex.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_proc.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_report.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_thread.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_stack_trace.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_stat.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_suppressions.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_symbolize.cc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_sync.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_diag.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_diag_standalone.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_flags.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_handlers.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_handlers_cxx.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_init.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_init_standalone.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_init_standalone_preinit.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_monitor.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_signals_standalone.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash_itanium.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash_win.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_value.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_win_dll_thunk.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_win_dynamic_runtime_thunk.cc vendor/compiler-rt/dist/lib/ubsan/ubsan_win_weak_interception.cc vendor/compiler-rt/dist/lib/ubsan_minimal/ubsan_minimal_handlers.cc vendor/compiler-rt/dist/lib/xray/xray_AArch64.cc vendor/compiler-rt/dist/lib/xray/xray_arm.cc vendor/compiler-rt/dist/lib/xray/xray_basic_flags.cc vendor/compiler-rt/dist/lib/xray/xray_basic_logging.cc vendor/compiler-rt/dist/lib/xray/xray_buffer_queue.cc vendor/compiler-rt/dist/lib/xray/xray_fdr_flags.cc vendor/compiler-rt/dist/lib/xray/xray_fdr_logging.cc vendor/compiler-rt/dist/lib/xray/xray_flags.cc vendor/compiler-rt/dist/lib/xray/xray_init.cc vendor/compiler-rt/dist/lib/xray/xray_interface.cc vendor/compiler-rt/dist/lib/xray/xray_log_interface.cc vendor/compiler-rt/dist/lib/xray/xray_mips.cc vendor/compiler-rt/dist/lib/xray/xray_mips64.cc vendor/compiler-rt/dist/lib/xray/xray_powerpc64.cc vendor/compiler-rt/dist/lib/xray/xray_profile_collector.cc vendor/compiler-rt/dist/lib/xray/xray_profiling.cc vendor/compiler-rt/dist/lib/xray/xray_profiling_flags.cc vendor/compiler-rt/dist/lib/xray/xray_trampoline_powerpc64.cc vendor/compiler-rt/dist/lib/xray/xray_utils.cc vendor/compiler-rt/dist/lib/xray/xray_x86_64.cc Modified: vendor/compiler-rt/dist/include/sanitizer/dfsan_interface.h vendor/compiler-rt/dist/include/sanitizer/tsan_interface_atomic.h vendor/compiler-rt/dist/lib/asan/asan_allocator.h vendor/compiler-rt/dist/lib/asan/asan_descriptions.h vendor/compiler-rt/dist/lib/asan/asan_errors.h vendor/compiler-rt/dist/lib/asan/asan_fake_stack.h vendor/compiler-rt/dist/lib/asan/asan_flags.inc vendor/compiler-rt/dist/lib/asan/asan_interceptors.h vendor/compiler-rt/dist/lib/asan/asan_interceptors_memintrinsics.h vendor/compiler-rt/dist/lib/asan/asan_internal.h vendor/compiler-rt/dist/lib/asan/asan_scariness_score.h vendor/compiler-rt/dist/lib/asan/asan_stack.h vendor/compiler-rt/dist/lib/asan/asan_suppressions.h vendor/compiler-rt/dist/lib/asan/asan_thread.h vendor/compiler-rt/dist/lib/builtins/adddf3.c vendor/compiler-rt/dist/lib/builtins/addsf3.c vendor/compiler-rt/dist/lib/builtins/addtf3.c vendor/compiler-rt/dist/lib/builtins/atomic.c vendor/compiler-rt/dist/lib/builtins/clear_cache.c vendor/compiler-rt/dist/lib/builtins/cpu_model.c vendor/compiler-rt/dist/lib/builtins/divtf3.c vendor/compiler-rt/dist/lib/builtins/emutls.c vendor/compiler-rt/dist/lib/builtins/extenddftf2.c vendor/compiler-rt/dist/lib/builtins/extendsftf2.c vendor/compiler-rt/dist/lib/builtins/fixunsxfdi.c vendor/compiler-rt/dist/lib/builtins/fixunsxfsi.c vendor/compiler-rt/dist/lib/builtins/fixxfdi.c vendor/compiler-rt/dist/lib/builtins/fp_add_impl.inc vendor/compiler-rt/dist/lib/builtins/fp_lib.h vendor/compiler-rt/dist/lib/builtins/fp_trunc_impl.inc vendor/compiler-rt/dist/lib/builtins/subdf3.c vendor/compiler-rt/dist/lib/builtins/subsf3.c vendor/compiler-rt/dist/lib/builtins/subtf3.c vendor/compiler-rt/dist/lib/builtins/udivmoddi4.c vendor/compiler-rt/dist/lib/fuzzer/FuzzerBuiltinsMsvc.h vendor/compiler-rt/dist/lib/fuzzer/FuzzerDefs.h vendor/compiler-rt/dist/lib/fuzzer/FuzzerDriver.cpp vendor/compiler-rt/dist/lib/fuzzer/FuzzerExtFunctions.def vendor/compiler-rt/dist/lib/fuzzer/FuzzerFlags.def vendor/compiler-rt/dist/lib/fuzzer/FuzzerInternal.h vendor/compiler-rt/dist/lib/fuzzer/FuzzerLoop.cpp vendor/compiler-rt/dist/lib/fuzzer/FuzzerMerge.cpp vendor/compiler-rt/dist/lib/fuzzer/FuzzerOptions.h vendor/compiler-rt/dist/lib/fuzzer/FuzzerTracePC.cpp vendor/compiler-rt/dist/lib/fuzzer/FuzzerTracePC.h vendor/compiler-rt/dist/lib/fuzzer/FuzzerUtil.h vendor/compiler-rt/dist/lib/fuzzer/FuzzerUtilFuchsia.cpp vendor/compiler-rt/dist/lib/fuzzer/FuzzerUtilPosix.cpp vendor/compiler-rt/dist/lib/fuzzer/FuzzerUtilWindows.cpp vendor/compiler-rt/dist/lib/gwp_asan/guarded_pool_allocator.cpp vendor/compiler-rt/dist/lib/gwp_asan/guarded_pool_allocator.h vendor/compiler-rt/dist/lib/gwp_asan/optional/backtrace.h vendor/compiler-rt/dist/lib/gwp_asan/optional/backtrace_linux_libc.cpp vendor/compiler-rt/dist/lib/gwp_asan/optional/backtrace_sanitizer_common.cpp vendor/compiler-rt/dist/lib/gwp_asan/options.h vendor/compiler-rt/dist/lib/gwp_asan/options.inc vendor/compiler-rt/dist/lib/hwasan/hwasan.cpp vendor/compiler-rt/dist/lib/hwasan/hwasan.h vendor/compiler-rt/dist/lib/hwasan/hwasan_allocator.cpp vendor/compiler-rt/dist/lib/hwasan/hwasan_allocator.h vendor/compiler-rt/dist/lib/hwasan/hwasan_flags.inc vendor/compiler-rt/dist/lib/hwasan/hwasan_interceptors.cpp vendor/compiler-rt/dist/lib/hwasan/hwasan_interface_internal.h vendor/compiler-rt/dist/lib/hwasan/hwasan_linux.cpp vendor/compiler-rt/dist/lib/hwasan/hwasan_new_delete.cpp vendor/compiler-rt/dist/lib/hwasan/hwasan_report.cpp vendor/compiler-rt/dist/lib/hwasan/hwasan_tag_mismatch_aarch64.S vendor/compiler-rt/dist/lib/interception/interception.h vendor/compiler-rt/dist/lib/lsan/lsan_common.h vendor/compiler-rt/dist/lib/msan/msan.h vendor/compiler-rt/dist/lib/profile/InstrProfiling.h vendor/compiler-rt/dist/lib/profile/InstrProfilingFile.c vendor/compiler-rt/dist/lib/profile/InstrProfilingPlatformFuchsia.c vendor/compiler-rt/dist/lib/profile/InstrProfilingUtil.c vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_allocator_checks.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_asm.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_atomic_msvc.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_interceptors.inc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_interface.inc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_common_syscalls.inc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_flag_parser.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_getauxval.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_interceptors_ioctl_netbsd.inc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_internal_defs.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_malloc_mac.inc vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_interceptors.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_freebsd.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_netbsd.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_posix.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_solaris.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_posix.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_procmaps.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_suppressions.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_internal.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_tls_get_addr.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_vector.h vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_win_defs.h vendor/compiler-rt/dist/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh vendor/compiler-rt/dist/lib/sanitizer_common/symbolizer/scripts/global_symbols.txt vendor/compiler-rt/dist/lib/scudo/scudo_allocator_secondary.h vendor/compiler-rt/dist/lib/scudo/scudo_errors.cpp vendor/compiler-rt/dist/lib/scudo/standalone/allocator_config.h vendor/compiler-rt/dist/lib/scudo/standalone/chunk.h vendor/compiler-rt/dist/lib/scudo/standalone/combined.h vendor/compiler-rt/dist/lib/scudo/standalone/internal_defs.h vendor/compiler-rt/dist/lib/scudo/standalone/linux.h vendor/compiler-rt/dist/lib/scudo/standalone/list.h vendor/compiler-rt/dist/lib/scudo/standalone/local_cache.h vendor/compiler-rt/dist/lib/scudo/standalone/mutex.h vendor/compiler-rt/dist/lib/scudo/standalone/primary32.h vendor/compiler-rt/dist/lib/scudo/standalone/primary64.h vendor/compiler-rt/dist/lib/scudo/standalone/quarantine.h vendor/compiler-rt/dist/lib/scudo/standalone/secondary.h vendor/compiler-rt/dist/lib/scudo/standalone/size_class_map.h vendor/compiler-rt/dist/lib/scudo/standalone/stats.h vendor/compiler-rt/dist/lib/scudo/standalone/string_utils.h vendor/compiler-rt/dist/lib/scudo/standalone/tsd_exclusive.h vendor/compiler-rt/dist/lib/scudo/standalone/tsd_shared.h vendor/compiler-rt/dist/lib/scudo/standalone/wrappers_c.inc vendor/compiler-rt/dist/lib/tsan/rtl/tsan_dispatch_defs.h vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface.h vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_inl.h vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interface_java.h vendor/compiler-rt/dist/lib/tsan/rtl/tsan_mman.h vendor/compiler-rt/dist/lib/tsan/rtl/tsan_platform.h vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl.h vendor/compiler-rt/dist/lib/ubsan/ubsan_checks.inc Added: vendor/compiler-rt/dist/include/fuzzer/FuzzedDataProvider.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/compiler-rt/dist/include/fuzzer/FuzzedDataProvider.h Wed Oct 23 17:52:22 2019 (r353944) @@ -0,0 +1,299 @@ +//===- FuzzedDataProvider.h - Utility header for fuzz targets ---*- C++ -* ===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// A single header library providing an utility class to break up an array of +// bytes. Whenever run on the same input, provides the same output, as long as +// its methods are called in the same order, with the same arguments. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_ +#define LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_ + +#include <algorithm> +#include <climits> +#include <cstddef> +#include <cstdint> +#include <cstring> +#include <initializer_list> +#include <string> +#include <type_traits> +#include <utility> +#include <vector> + +// In addition to the comments below, the API is also briefly documented at +// https://github.com/google/fuzzing/blob/master/docs/split-inputs.md#fuzzed-data-provider +class FuzzedDataProvider { + public: + // |data| is an array of length |size| that the FuzzedDataProvider wraps to + // provide more granular access. |data| must outlive the FuzzedDataProvider. + FuzzedDataProvider(const uint8_t *data, size_t size) + : data_ptr_(data), remaining_bytes_(size) {} + ~FuzzedDataProvider() = default; + + // Returns a std::vector containing |num_bytes| of input data. If fewer than + // |num_bytes| of data remain, returns a shorter std::vector containing all + // of the data that's left. Can be used with any byte sized type, such as + // char, unsigned char, uint8_t, etc. + template <typename T> std::vector<T> ConsumeBytes(size_t num_bytes) { + num_bytes = std::min(num_bytes, remaining_bytes_); + return ConsumeBytes<T>(num_bytes, num_bytes); + } + + // Similar to |ConsumeBytes|, but also appends the terminator value at the end + // of the resulting vector. Useful, when a mutable null-terminated C-string is + // needed, for example. But that is a rare case. Better avoid it, if possible, + // and prefer using |ConsumeBytes| or |ConsumeBytesAsString| methods. + template <typename T> + std::vector<T> ConsumeBytesWithTerminator(size_t num_bytes, + T terminator = 0) { + num_bytes = std::min(num_bytes, remaining_bytes_); + std::vector<T> result = ConsumeBytes<T>(num_bytes + 1, num_bytes); + result.back() = terminator; + return result; + } + + // Returns a std::string containing |num_bytes| of input data. Using this and + // |.c_str()| on the resulting string is the best way to get an immutable + // null-terminated C string. If fewer than |num_bytes| of data remain, returns + // a shorter std::string containing all of the data that's left. + std::string ConsumeBytesAsString(size_t num_bytes) { + static_assert(sizeof(std::string::value_type) == sizeof(uint8_t), + "ConsumeBytesAsString cannot convert the data to a string."); + + num_bytes = std::min(num_bytes, remaining_bytes_); + std::string result( + reinterpret_cast<const std::string::value_type *>(data_ptr_), + num_bytes); + Advance(num_bytes); + return result; + } + + // Returns a number in the range [min, max] by consuming bytes from the + // input data. The value might not be uniformly distributed in the given + // range. If there's no input data left, always returns |min|. |min| must + // be less than or equal to |max|. + template <typename T> T ConsumeIntegralInRange(T min, T max) { + static_assert(std::is_integral<T>::value, "An integral type is required."); + static_assert(sizeof(T) <= sizeof(uint64_t), "Unsupported integral type."); + + if (min > max) + abort(); + + // Use the biggest type possible to hold the range and the result. + uint64_t range = static_cast<uint64_t>(max) - min; + uint64_t result = 0; + size_t offset = 0; + + while (offset < sizeof(T) * CHAR_BIT && (range >> offset) > 0 && + remaining_bytes_ != 0) { + // Pull bytes off the end of the seed data. Experimentally, this seems to + // allow the fuzzer to more easily explore the input space. This makes + // sense, since it works by modifying inputs that caused new code to run, + // and this data is often used to encode length of data read by + // |ConsumeBytes|. Separating out read lengths makes it easier modify the + // contents of the data that is actually read. + --remaining_bytes_; + result = (result << CHAR_BIT) | data_ptr_[remaining_bytes_]; + offset += CHAR_BIT; + } + + // Avoid division by 0, in case |range + 1| results in overflow. + if (range != std::numeric_limits<decltype(range)>::max()) + result = result % (range + 1); + + return static_cast<T>(min + result); + } + + // Returns a std::string of length from 0 to |max_length|. When it runs out of + // input data, returns what remains of the input. Designed to be more stable + // with respect to a fuzzer inserting characters than just picking a random + // length and then consuming that many bytes with |ConsumeBytes|. + std::string ConsumeRandomLengthString(size_t max_length) { + // Reads bytes from the start of |data_ptr_|. Maps "\\" to "\", and maps "\" + // followed by anything else to the end of the string. As a result of this + // logic, a fuzzer can insert characters into the string, and the string + // will be lengthened to include those new characters, resulting in a more + // stable fuzzer than picking the length of a string independently from + // picking its contents. + std::string result; + + // Reserve the anticipated capaticity to prevent several reallocations. + result.reserve(std::min(max_length, remaining_bytes_)); + for (size_t i = 0; i < max_length && remaining_bytes_ != 0; ++i) { + char next = ConvertUnsignedToSigned<char>(data_ptr_[0]); + Advance(1); + if (next == '\\' && remaining_bytes_ != 0) { + next = ConvertUnsignedToSigned<char>(data_ptr_[0]); + Advance(1); + if (next != '\\') + break; + } + result += next; + } + + result.shrink_to_fit(); + return result; + } + + // Returns a std::vector containing all remaining bytes of the input data. + template <typename T> std::vector<T> ConsumeRemainingBytes() { + return ConsumeBytes<T>(remaining_bytes_); + } + + // Returns a std::string containing all remaining bytes of the input data. + // Prefer using |ConsumeRemainingBytes| unless you actually need a std::string + // object. + std::string ConsumeRemainingBytesAsString() { + return ConsumeBytesAsString(remaining_bytes_); + } + + // Returns a number in the range [Type's min, Type's max]. The value might + // not be uniformly distributed in the given range. If there's no input data + // left, always returns |min|. + template <typename T> T ConsumeIntegral() { + return ConsumeIntegralInRange(std::numeric_limits<T>::min(), + std::numeric_limits<T>::max()); + } + + // Reads one byte and returns a bool, or false when no data remains. + bool ConsumeBool() { return 1 & ConsumeIntegral<uint8_t>(); } + + // Returns a copy of the value selected from the given fixed-size |array|. + template <typename T, size_t size> + T PickValueInArray(const T (&array)[size]) { + static_assert(size > 0, "The array must be non empty."); + return array[ConsumeIntegralInRange<size_t>(0, size - 1)]; + } + + template <typename T> + T PickValueInArray(std::initializer_list<const T> list) { + // TODO(Dor1s): switch to static_assert once C++14 is allowed. + if (!list.size()) + abort(); + + return *(list.begin() + ConsumeIntegralInRange<size_t>(0, list.size() - 1)); + } + + // Returns an enum value. The enum must start at 0 and be contiguous. It must + // also contain |kMaxValue| aliased to its largest (inclusive) value. Such as: + // enum class Foo { SomeValue, OtherValue, kMaxValue = OtherValue }; + template <typename T> T ConsumeEnum() { + static_assert(std::is_enum<T>::value, "|T| must be an enum type."); + return static_cast<T>(ConsumeIntegralInRange<uint32_t>( + 0, static_cast<uint32_t>(T::kMaxValue))); + } + + // Returns a floating point number in the range [0.0, 1.0]. If there's no + // input data left, always returns 0. + template <typename T> T ConsumeProbability() { + static_assert(std::is_floating_point<T>::value, + "A floating point type is required."); + + // Use different integral types for different floating point types in order + // to provide better density of the resulting values. + using IntegralType = + typename std::conditional<(sizeof(T) <= sizeof(uint32_t)), uint32_t, + uint64_t>::type; + + T result = static_cast<T>(ConsumeIntegral<IntegralType>()); + result /= static_cast<T>(std::numeric_limits<IntegralType>::max()); + return result; + } + + // Returns a floating point value in the range [Type's lowest, Type's max] by + // consuming bytes from the input data. If there's no input data left, always + // returns approximately 0. + template <typename T> T ConsumeFloatingPoint() { + return ConsumeFloatingPointInRange<T>(std::numeric_limits<T>::lowest(), + std::numeric_limits<T>::max()); + } + + // Returns a floating point value in the given range by consuming bytes from + // the input data. If there's no input data left, returns |min|. Note that + // |min| must be less than or equal to |max|. + template <typename T> T ConsumeFloatingPointInRange(T min, T max) { + if (min > max) + abort(); + + T range = .0; + T result = min; + constexpr T zero(.0); + if (max > zero && min < zero && max > min + std::numeric_limits<T>::max()) { + // The diff |max - min| would overflow the given floating point type. Use + // the half of the diff as the range and consume a bool to decide whether + // the result is in the first of the second part of the diff. + range = (max / 2.0) - (min / 2.0); + if (ConsumeBool()) { + result += range; + } + } else { + range = max - min; + } + + return result + range * ConsumeProbability<T>(); + } + + // Reports the remaining bytes available for fuzzed input. + size_t remaining_bytes() { return remaining_bytes_; } + + private: + FuzzedDataProvider(const FuzzedDataProvider &) = delete; + FuzzedDataProvider &operator=(const FuzzedDataProvider &) = delete; + + void Advance(size_t num_bytes) { + if (num_bytes > remaining_bytes_) + abort(); + + data_ptr_ += num_bytes; + remaining_bytes_ -= num_bytes; + } + + template <typename T> + std::vector<T> ConsumeBytes(size_t size, size_t num_bytes_to_consume) { + static_assert(sizeof(T) == sizeof(uint8_t), "Incompatible data type."); + + // The point of using the size-based constructor below is to increase the + // odds of having a vector object with capacity being equal to the length. + // That part is always implementation specific, but at least both libc++ and + // libstdc++ allocate the requested number of bytes in that constructor, + // which seems to be a natural choice for other implementations as well. + // To increase the odds even more, we also call |shrink_to_fit| below. + std::vector<T> result(size); + std::memcpy(result.data(), data_ptr_, num_bytes_to_consume); + Advance(num_bytes_to_consume); + + // Even though |shrink_to_fit| is also implementation specific, we expect it + // to provide an additional assurance in case vector's constructor allocated + // a buffer which is larger than the actual amount of data we put inside it. + result.shrink_to_fit(); + return result; + } + + template <typename TS, typename TU> TS ConvertUnsignedToSigned(TU value) { + static_assert(sizeof(TS) == sizeof(TU), "Incompatible data types."); + static_assert(!std::numeric_limits<TU>::is_signed, + "Source type must be unsigned."); + + // TODO(Dor1s): change to `if constexpr` once C++17 becomes mainstream. + if (std::numeric_limits<TS>::is_modulo) + return static_cast<TS>(value); + + // Avoid using implementation-defined unsigned to signer conversions. + // To learn more, see https://stackoverflow.com/questions/13150449. + if (value <= std::numeric_limits<TS>::max()) { + return static_cast<TS>(value); + } else { + constexpr auto TS_min = std::numeric_limits<TS>::min(); + return TS_min + static_cast<char>(value - TS_min); + } + } + + const uint8_t *data_ptr_; + size_t remaining_bytes_; +}; + +#endif // LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_ Modified: vendor/compiler-rt/dist/include/sanitizer/dfsan_interface.h ============================================================================== --- vendor/compiler-rt/dist/include/sanitizer/dfsan_interface.h Wed Oct 23 17:52:16 2019 (r353943) +++ vendor/compiler-rt/dist/include/sanitizer/dfsan_interface.h Wed Oct 23 17:52:22 2019 (r353944) @@ -112,7 +112,7 @@ void dfsan_weak_hook_strncmp(void *caller_pc, const ch } // extern "C" template <typename T> -void dfsan_set_label(dfsan_label label, T &data) { // NOLINT +void dfsan_set_label(dfsan_label label, T &data) { // NOLINT dfsan_set_label(label, (void *)&data, sizeof(T)); } Modified: vendor/compiler-rt/dist/include/sanitizer/tsan_interface_atomic.h ============================================================================== --- vendor/compiler-rt/dist/include/sanitizer/tsan_interface_atomic.h Wed Oct 23 17:52:16 2019 (r353943) +++ vendor/compiler-rt/dist/include/sanitizer/tsan_interface_atomic.h Wed Oct 23 17:52:22 2019 (r353944) @@ -17,10 +17,10 @@ extern "C" { #endif -typedef char __tsan_atomic8; -typedef short __tsan_atomic16; // NOLINT -typedef int __tsan_atomic32; -typedef long __tsan_atomic64; // NOLINT +typedef char __tsan_atomic8; +typedef short __tsan_atomic16; +typedef int __tsan_atomic32; +typedef long __tsan_atomic64; #if defined(__SIZEOF_INT128__) \ || (__clang_major__ * 100 + __clang_minor__ >= 302) __extension__ typedef __int128 __tsan_atomic128; Added: vendor/compiler-rt/dist/include/sanitizer/ubsan_interface.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/compiler-rt/dist/include/sanitizer/ubsan_interface.h Wed Oct 23 17:52:22 2019 (r353944) @@ -0,0 +1,32 @@ +//===-- sanitizer/ubsan_interface.h -----------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of UBSanitizer (UBSan). +// +// Public interface header. +//===----------------------------------------------------------------------===// +#ifndef SANITIZER_UBSAN_INTERFACE_H +#define SANITIZER_UBSAN_INTERFACE_H + +#ifdef __cplusplus +extern "C" { +#endif +/// User-provided default option settings. +/// +/// You can provide your own implementation of this function to return a string +/// containing UBSan runtime options (for example, +/// <c>verbosity=1:halt_on_error=0</c>). +/// +/// \returns Default options string. +const char* __ubsan_default_options(void); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // SANITIZER_UBSAN_INTERFACE_H Added: vendor/compiler-rt/dist/lib/asan/asan_activation.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/compiler-rt/dist/lib/asan/asan_activation.cpp Wed Oct 23 17:52:22 2019 (r353944) @@ -0,0 +1,143 @@ +//===-- asan_activation.cpp -------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of AddressSanitizer, an address sanity checker. +// +// ASan activation/deactivation logic. +//===----------------------------------------------------------------------===// + +#include "asan_activation.h" +#include "asan_allocator.h" +#include "asan_flags.h" +#include "asan_internal.h" +#include "asan_mapping.h" +#include "asan_poisoning.h" +#include "asan_stack.h" +#include "sanitizer_common/sanitizer_common.h" +#include "sanitizer_common/sanitizer_flags.h" + +namespace __asan { + +static struct AsanDeactivatedFlags { + AllocatorOptions allocator_options; + int malloc_context_size; + bool poison_heap; + bool coverage; + const char *coverage_dir; + + void RegisterActivationFlags(FlagParser *parser, Flags *f, CommonFlags *cf) { +#define ASAN_ACTIVATION_FLAG(Type, Name) \ + RegisterFlag(parser, #Name, "", &f->Name); +#define COMMON_ACTIVATION_FLAG(Type, Name) \ + RegisterFlag(parser, #Name, "", &cf->Name); +#include "asan_activation_flags.inc" +#undef ASAN_ACTIVATION_FLAG +#undef COMMON_ACTIVATION_FLAG + + RegisterIncludeFlags(parser, cf); + } + + void OverrideFromActivationFlags() { + Flags f; + CommonFlags cf; + FlagParser parser; + RegisterActivationFlags(&parser, &f, &cf); + + cf.SetDefaults(); + // Copy the current activation flags. + allocator_options.CopyTo(&f, &cf); + cf.malloc_context_size = malloc_context_size; + f.poison_heap = poison_heap; + cf.coverage = coverage; + cf.coverage_dir = coverage_dir; + cf.verbosity = Verbosity(); + cf.help = false; // this is activation-specific help + + // Check if activation flags need to be overriden. + if (const char *env = GetEnv("ASAN_ACTIVATION_OPTIONS")) { + parser.ParseString(env); + } + + InitializeCommonFlags(&cf); + + if (Verbosity()) ReportUnrecognizedFlags(); + + if (cf.help) parser.PrintFlagDescriptions(); + + allocator_options.SetFrom(&f, &cf); + malloc_context_size = cf.malloc_context_size; + poison_heap = f.poison_heap; + coverage = cf.coverage; + coverage_dir = cf.coverage_dir; + } + + void Print() { + Report( + "quarantine_size_mb %d, thread_local_quarantine_size_kb %d, " + "max_redzone %d, poison_heap %d, malloc_context_size %d, " + "alloc_dealloc_mismatch %d, allocator_may_return_null %d, coverage %d, " + "coverage_dir %s, allocator_release_to_os_interval_ms %d\n", + allocator_options.quarantine_size_mb, + allocator_options.thread_local_quarantine_size_kb, + allocator_options.max_redzone, poison_heap, malloc_context_size, + allocator_options.alloc_dealloc_mismatch, + allocator_options.may_return_null, coverage, coverage_dir, + allocator_options.release_to_os_interval_ms); + } +} asan_deactivated_flags; + +static bool asan_is_deactivated; + +void AsanDeactivate() { + CHECK(!asan_is_deactivated); + VReport(1, "Deactivating ASan\n"); + + // Stash runtime state. + GetAllocatorOptions(&asan_deactivated_flags.allocator_options); + asan_deactivated_flags.malloc_context_size = GetMallocContextSize(); + asan_deactivated_flags.poison_heap = CanPoisonMemory(); + asan_deactivated_flags.coverage = common_flags()->coverage; + asan_deactivated_flags.coverage_dir = common_flags()->coverage_dir; + + // Deactivate the runtime. + SetCanPoisonMemory(false); + SetMallocContextSize(1); + + AllocatorOptions disabled = asan_deactivated_flags.allocator_options; + disabled.quarantine_size_mb = 0; + disabled.thread_local_quarantine_size_kb = 0; + // Redzone must be at least Max(16, granularity) bytes long. + disabled.min_redzone = Max(16, (int)SHADOW_GRANULARITY); + disabled.max_redzone = disabled.min_redzone; + disabled.alloc_dealloc_mismatch = false; + disabled.may_return_null = true; + ReInitializeAllocator(disabled); + + asan_is_deactivated = true; +} + +void AsanActivate() { + if (!asan_is_deactivated) return; + VReport(1, "Activating ASan\n"); + + UpdateProcessName(); + + asan_deactivated_flags.OverrideFromActivationFlags(); + + SetCanPoisonMemory(asan_deactivated_flags.poison_heap); + SetMallocContextSize(asan_deactivated_flags.malloc_context_size); + ReInitializeAllocator(asan_deactivated_flags.allocator_options); + + asan_is_deactivated = false; + if (Verbosity()) { + Report("Activated with flags:\n"); + asan_deactivated_flags.Print(); + } +} + +} // namespace __asan Added: vendor/compiler-rt/dist/lib/asan/asan_allocator.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/compiler-rt/dist/lib/asan/asan_allocator.cpp Wed Oct 23 17:52:22 2019 (r353944) @@ -0,0 +1,1119 @@ +//===-- asan_allocator.cpp ------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of AddressSanitizer, an address sanity checker. +// +// Implementation of ASan's memory allocator, 2-nd version. +// This variant uses the allocator from sanitizer_common, i.e. the one shared +// with ThreadSanitizer and MemorySanitizer. +// +//===----------------------------------------------------------------------===// + +#include "asan_allocator.h" +#include "asan_mapping.h" +#include "asan_poisoning.h" +#include "asan_report.h" +#include "asan_stack.h" +#include "asan_thread.h" +#include "sanitizer_common/sanitizer_allocator_checks.h" +#include "sanitizer_common/sanitizer_allocator_interface.h" +#include "sanitizer_common/sanitizer_errno.h" +#include "sanitizer_common/sanitizer_flags.h" +#include "sanitizer_common/sanitizer_internal_defs.h" +#include "sanitizer_common/sanitizer_list.h" +#include "sanitizer_common/sanitizer_stackdepot.h" +#include "sanitizer_common/sanitizer_quarantine.h" +#include "lsan/lsan_common.h" + +namespace __asan { + +// Valid redzone sizes are 16, 32, 64, ... 2048, so we encode them in 3 bits. +// We use adaptive redzones: for larger allocation larger redzones are used. +static u32 RZLog2Size(u32 rz_log) { + CHECK_LT(rz_log, 8); + return 16 << rz_log; +} + +static u32 RZSize2Log(u32 rz_size) { + CHECK_GE(rz_size, 16); + CHECK_LE(rz_size, 2048); + CHECK(IsPowerOfTwo(rz_size)); + u32 res = Log2(rz_size) - 4; + CHECK_EQ(rz_size, RZLog2Size(res)); + return res; +} + +static AsanAllocator &get_allocator(); + +// The memory chunk allocated from the underlying allocator looks like this: +// L L L L L L H H U U U U U U R R +// L -- left redzone words (0 or more bytes) +// H -- ChunkHeader (16 bytes), which is also a part of the left redzone. +// U -- user memory. +// R -- right redzone (0 or more bytes) +// ChunkBase consists of ChunkHeader and other bytes that overlap with user +// memory. + +// If the left redzone is greater than the ChunkHeader size we store a magic +// value in the first uptr word of the memory block and store the address of +// ChunkBase in the next uptr. +// M B L L L L L L L L L H H U U U U U U +// | ^ +// ---------------------| +// M -- magic value kAllocBegMagic +// B -- address of ChunkHeader pointing to the first 'H' +static const uptr kAllocBegMagic = 0xCC6E96B9; + +struct ChunkHeader { + // 1-st 8 bytes. + u32 chunk_state : 8; // Must be first. + u32 alloc_tid : 24; + + u32 free_tid : 24; + u32 from_memalign : 1; + u32 alloc_type : 2; + u32 rz_log : 3; + u32 lsan_tag : 2; + // 2-nd 8 bytes + // This field is used for small sizes. For large sizes it is equal to + // SizeClassMap::kMaxSize and the actual size is stored in the + // SecondaryAllocator's metadata. + u32 user_requested_size : 29; + // align < 8 -> 0 + // else -> log2(min(align, 512)) - 2 + u32 user_requested_alignment_log : 3; + u32 alloc_context_id; +}; + +struct ChunkBase : ChunkHeader { + // Header2, intersects with user memory. + u32 free_context_id; +}; + +static const uptr kChunkHeaderSize = sizeof(ChunkHeader); +static const uptr kChunkHeader2Size = sizeof(ChunkBase) - kChunkHeaderSize; +COMPILER_CHECK(kChunkHeaderSize == 16); +COMPILER_CHECK(kChunkHeader2Size <= 16); + +// Every chunk of memory allocated by this allocator can be in one of 3 states: +// CHUNK_AVAILABLE: the chunk is in the free list and ready to be allocated. +// CHUNK_ALLOCATED: the chunk is allocated and not yet freed. +// CHUNK_QUARANTINE: the chunk was freed and put into quarantine zone. +enum { + CHUNK_AVAILABLE = 0, // 0 is the default value even if we didn't set it. + CHUNK_ALLOCATED = 2, + CHUNK_QUARANTINE = 3 +}; + +struct AsanChunk: ChunkBase { + uptr Beg() { return reinterpret_cast<uptr>(this) + kChunkHeaderSize; } + uptr UsedSize(bool locked_version = false) { + if (user_requested_size != SizeClassMap::kMaxSize) + return user_requested_size; + return *reinterpret_cast<uptr *>( + get_allocator().GetMetaData(AllocBeg(locked_version))); + } + void *AllocBeg(bool locked_version = false) { + if (from_memalign) { + if (locked_version) + return get_allocator().GetBlockBeginFastLocked( + reinterpret_cast<void *>(this)); + return get_allocator().GetBlockBegin(reinterpret_cast<void *>(this)); + } + return reinterpret_cast<void*>(Beg() - RZLog2Size(rz_log)); + } + bool AddrIsInside(uptr addr, bool locked_version = false) { + return (addr >= Beg()) && (addr < Beg() + UsedSize(locked_version)); + } +}; + +struct QuarantineCallback { + QuarantineCallback(AllocatorCache *cache, BufferedStackTrace *stack) + : cache_(cache), + stack_(stack) { + } + + void Recycle(AsanChunk *m) { + CHECK_EQ(m->chunk_state, CHUNK_QUARANTINE); + atomic_store((atomic_uint8_t*)m, CHUNK_AVAILABLE, memory_order_relaxed); + CHECK_NE(m->alloc_tid, kInvalidTid); + CHECK_NE(m->free_tid, kInvalidTid); + PoisonShadow(m->Beg(), + RoundUpTo(m->UsedSize(), SHADOW_GRANULARITY), + kAsanHeapLeftRedzoneMagic); + void *p = reinterpret_cast<void *>(m->AllocBeg()); + if (p != m) { + uptr *alloc_magic = reinterpret_cast<uptr *>(p); + CHECK_EQ(alloc_magic[0], kAllocBegMagic); + // Clear the magic value, as allocator internals may overwrite the + // contents of deallocated chunk, confusing GetAsanChunk lookup. + alloc_magic[0] = 0; + CHECK_EQ(alloc_magic[1], reinterpret_cast<uptr>(m)); + } + + // Statistics. + AsanStats &thread_stats = GetCurrentThreadStats(); + thread_stats.real_frees++; + thread_stats.really_freed += m->UsedSize(); + + get_allocator().Deallocate(cache_, p); + } + + void *Allocate(uptr size) { + void *res = get_allocator().Allocate(cache_, size, 1); + // TODO(alekseys): Consider making quarantine OOM-friendly. + if (UNLIKELY(!res)) + ReportOutOfMemory(size, stack_); + return res; + } + + void Deallocate(void *p) { + get_allocator().Deallocate(cache_, p); + } + + private: + AllocatorCache* const cache_; + BufferedStackTrace* const stack_; +}; + +typedef Quarantine<QuarantineCallback, AsanChunk> AsanQuarantine; +typedef AsanQuarantine::Cache QuarantineCache; + +void AsanMapUnmapCallback::OnMap(uptr p, uptr size) const { + PoisonShadow(p, size, kAsanHeapLeftRedzoneMagic); + // Statistics. + AsanStats &thread_stats = GetCurrentThreadStats(); + thread_stats.mmaps++; + thread_stats.mmaped += size; +} +void AsanMapUnmapCallback::OnUnmap(uptr p, uptr size) const { + PoisonShadow(p, size, 0); + // We are about to unmap a chunk of user memory. + // Mark the corresponding shadow memory as not needed. + FlushUnneededASanShadowMemory(p, size); + // Statistics. + AsanStats &thread_stats = GetCurrentThreadStats(); + thread_stats.munmaps++; + thread_stats.munmaped += size; +} + +// We can not use THREADLOCAL because it is not supported on some of the +// platforms we care about (OSX 10.6, Android). +// static THREADLOCAL AllocatorCache cache; +AllocatorCache *GetAllocatorCache(AsanThreadLocalMallocStorage *ms) { + CHECK(ms); + return &ms->allocator_cache; +} + +QuarantineCache *GetQuarantineCache(AsanThreadLocalMallocStorage *ms) { + CHECK(ms); + CHECK_LE(sizeof(QuarantineCache), sizeof(ms->quarantine_cache)); + return reinterpret_cast<QuarantineCache *>(ms->quarantine_cache); +} + +void AllocatorOptions::SetFrom(const Flags *f, const CommonFlags *cf) { + quarantine_size_mb = f->quarantine_size_mb; + thread_local_quarantine_size_kb = f->thread_local_quarantine_size_kb; + min_redzone = f->redzone; + max_redzone = f->max_redzone; + may_return_null = cf->allocator_may_return_null; + alloc_dealloc_mismatch = f->alloc_dealloc_mismatch; + release_to_os_interval_ms = cf->allocator_release_to_os_interval_ms; +} + +void AllocatorOptions::CopyTo(Flags *f, CommonFlags *cf) { + f->quarantine_size_mb = quarantine_size_mb; + f->thread_local_quarantine_size_kb = thread_local_quarantine_size_kb; + f->redzone = min_redzone; + f->max_redzone = max_redzone; + cf->allocator_may_return_null = may_return_null; + f->alloc_dealloc_mismatch = alloc_dealloc_mismatch; + cf->allocator_release_to_os_interval_ms = release_to_os_interval_ms; +} + +struct Allocator { + static const uptr kMaxAllowedMallocSize = + FIRST_32_SECOND_64(3UL << 30, 1ULL << 40); + + AsanAllocator allocator; + AsanQuarantine quarantine; + StaticSpinMutex fallback_mutex; + AllocatorCache fallback_allocator_cache; + QuarantineCache fallback_quarantine_cache; + + atomic_uint8_t rss_limit_exceeded; + + // ------------------- Options -------------------------- + atomic_uint16_t min_redzone; + atomic_uint16_t max_redzone; + atomic_uint8_t alloc_dealloc_mismatch; + + // ------------------- Initialization ------------------------ + explicit Allocator(LinkerInitialized) + : quarantine(LINKER_INITIALIZED), + fallback_quarantine_cache(LINKER_INITIALIZED) {} + + void CheckOptions(const AllocatorOptions &options) const { + CHECK_GE(options.min_redzone, 16); + CHECK_GE(options.max_redzone, options.min_redzone); + CHECK_LE(options.max_redzone, 2048); + CHECK(IsPowerOfTwo(options.min_redzone)); + CHECK(IsPowerOfTwo(options.max_redzone)); + } + + void SharedInitCode(const AllocatorOptions &options) { + CheckOptions(options); + quarantine.Init((uptr)options.quarantine_size_mb << 20, + (uptr)options.thread_local_quarantine_size_kb << 10); + atomic_store(&alloc_dealloc_mismatch, options.alloc_dealloc_mismatch, + memory_order_release); + atomic_store(&min_redzone, options.min_redzone, memory_order_release); + atomic_store(&max_redzone, options.max_redzone, memory_order_release); + } + + void InitLinkerInitialized(const AllocatorOptions &options) { + SetAllocatorMayReturnNull(options.may_return_null); + allocator.InitLinkerInitialized(options.release_to_os_interval_ms); + SharedInitCode(options); + } + + bool RssLimitExceeded() { + return atomic_load(&rss_limit_exceeded, memory_order_relaxed); + } + + void SetRssLimitExceeded(bool limit_exceeded) { + atomic_store(&rss_limit_exceeded, limit_exceeded, memory_order_relaxed); + } + + void RePoisonChunk(uptr chunk) { + // This could be a user-facing chunk (with redzones), or some internal + // housekeeping chunk, like TransferBatch. Start by assuming the former. + AsanChunk *ac = GetAsanChunk((void *)chunk); + uptr allocated_size = allocator.GetActuallyAllocatedSize((void *)ac); + uptr beg = ac->Beg(); + uptr end = ac->Beg() + ac->UsedSize(true); + uptr chunk_end = chunk + allocated_size; + if (chunk < beg && beg < end && end <= chunk_end && + ac->chunk_state == CHUNK_ALLOCATED) { + // Looks like a valid AsanChunk in use, poison redzones only. + PoisonShadow(chunk, beg - chunk, kAsanHeapLeftRedzoneMagic); + uptr end_aligned_down = RoundDownTo(end, SHADOW_GRANULARITY); + FastPoisonShadowPartialRightRedzone( + end_aligned_down, end - end_aligned_down, + chunk_end - end_aligned_down, kAsanHeapLeftRedzoneMagic); + } else { + // This is either not an AsanChunk or freed or quarantined AsanChunk. + // In either case, poison everything. + PoisonShadow(chunk, allocated_size, kAsanHeapLeftRedzoneMagic); + } + } + + void ReInitialize(const AllocatorOptions &options) { + SetAllocatorMayReturnNull(options.may_return_null); + allocator.SetReleaseToOSIntervalMs(options.release_to_os_interval_ms); + SharedInitCode(options); + + // Poison all existing allocation's redzones. + if (CanPoisonMemory()) { + allocator.ForceLock(); + allocator.ForEachChunk( + [](uptr chunk, void *alloc) { + ((Allocator *)alloc)->RePoisonChunk(chunk); + }, + this); + allocator.ForceUnlock(); + } + } + + void GetOptions(AllocatorOptions *options) const { + options->quarantine_size_mb = quarantine.GetSize() >> 20; + options->thread_local_quarantine_size_kb = quarantine.GetCacheSize() >> 10; + options->min_redzone = atomic_load(&min_redzone, memory_order_acquire); + options->max_redzone = atomic_load(&max_redzone, memory_order_acquire); + options->may_return_null = AllocatorMayReturnNull(); + options->alloc_dealloc_mismatch = + atomic_load(&alloc_dealloc_mismatch, memory_order_acquire); + options->release_to_os_interval_ms = allocator.ReleaseToOSIntervalMs(); + } + + // -------------------- Helper methods. ------------------------- + uptr ComputeRZLog(uptr user_requested_size) { + u32 rz_log = + user_requested_size <= 64 - 16 ? 0 : + user_requested_size <= 128 - 32 ? 1 : + user_requested_size <= 512 - 64 ? 2 : + user_requested_size <= 4096 - 128 ? 3 : + user_requested_size <= (1 << 14) - 256 ? 4 : + user_requested_size <= (1 << 15) - 512 ? 5 : + user_requested_size <= (1 << 16) - 1024 ? 6 : 7; + u32 min_rz = atomic_load(&min_redzone, memory_order_acquire); + u32 max_rz = atomic_load(&max_redzone, memory_order_acquire); + return Min(Max(rz_log, RZSize2Log(min_rz)), RZSize2Log(max_rz)); + } + + static uptr ComputeUserRequestedAlignmentLog(uptr user_requested_alignment) { + if (user_requested_alignment < 8) + return 0; + if (user_requested_alignment > 512) + user_requested_alignment = 512; + return Log2(user_requested_alignment) - 2; + } + + static uptr ComputeUserAlignment(uptr user_requested_alignment_log) { + if (user_requested_alignment_log == 0) + return 0; + return 1LL << (user_requested_alignment_log + 2); + } + + // We have an address between two chunks, and we want to report just one. + AsanChunk *ChooseChunk(uptr addr, AsanChunk *left_chunk, + AsanChunk *right_chunk) { + // Prefer an allocated chunk over freed chunk and freed chunk + // over available chunk. + if (left_chunk->chunk_state != right_chunk->chunk_state) { + if (left_chunk->chunk_state == CHUNK_ALLOCATED) + return left_chunk; + if (right_chunk->chunk_state == CHUNK_ALLOCATED) + return right_chunk; + if (left_chunk->chunk_state == CHUNK_QUARANTINE) + return left_chunk; + if (right_chunk->chunk_state == CHUNK_QUARANTINE) + return right_chunk; + } + // Same chunk_state: choose based on offset. + sptr l_offset = 0, r_offset = 0; + CHECK(AsanChunkView(left_chunk).AddrIsAtRight(addr, 1, &l_offset)); + CHECK(AsanChunkView(right_chunk).AddrIsAtLeft(addr, 1, &r_offset)); + if (l_offset < r_offset) + return left_chunk; + return right_chunk; + } + + // -------------------- Allocation/Deallocation routines --------------- + void *Allocate(uptr size, uptr alignment, BufferedStackTrace *stack, + AllocType alloc_type, bool can_fill) { + if (UNLIKELY(!asan_inited)) + AsanInitFromRtl(); + if (RssLimitExceeded()) { + if (AllocatorMayReturnNull()) + return nullptr; + ReportRssLimitExceeded(stack); + } + Flags &fl = *flags(); + CHECK(stack); + const uptr min_alignment = SHADOW_GRANULARITY; + const uptr user_requested_alignment_log = + ComputeUserRequestedAlignmentLog(alignment); + if (alignment < min_alignment) + alignment = min_alignment; + if (size == 0) { + // We'd be happy to avoid allocating memory for zero-size requests, but + // some programs/tests depend on this behavior and assume that malloc + // would not return NULL even for zero-size allocations. Moreover, it + // looks like operator new should never return NULL, and results of + // consecutive "new" calls must be different even if the allocated size + // is zero. + size = 1; + } + CHECK(IsPowerOfTwo(alignment)); + uptr rz_log = ComputeRZLog(size); + uptr rz_size = RZLog2Size(rz_log); + uptr rounded_size = RoundUpTo(Max(size, kChunkHeader2Size), alignment); + uptr needed_size = rounded_size + rz_size; + if (alignment > min_alignment) + needed_size += alignment; + bool using_primary_allocator = true; + // If we are allocating from the secondary allocator, there will be no + // automatic right redzone, so add the right redzone manually. + if (!PrimaryAllocator::CanAllocate(needed_size, alignment)) { + needed_size += rz_size; + using_primary_allocator = false; + } + CHECK(IsAligned(needed_size, min_alignment)); + if (size > kMaxAllowedMallocSize || needed_size > kMaxAllowedMallocSize) { + if (AllocatorMayReturnNull()) { + Report("WARNING: AddressSanitizer failed to allocate 0x%zx bytes\n", + (void*)size); + return nullptr; + } + ReportAllocationSizeTooBig(size, needed_size, kMaxAllowedMallocSize, + stack); + } + + AsanThread *t = GetCurrentThread(); + void *allocated; + if (t) { + AllocatorCache *cache = GetAllocatorCache(&t->malloc_storage()); + allocated = allocator.Allocate(cache, needed_size, 8); + } else { + SpinMutexLock l(&fallback_mutex); + AllocatorCache *cache = &fallback_allocator_cache; + allocated = allocator.Allocate(cache, needed_size, 8); + } + if (UNLIKELY(!allocated)) { + SetAllocatorOutOfMemory(); + if (AllocatorMayReturnNull()) + return nullptr; + ReportOutOfMemory(size, stack); + } + + if (*(u8 *)MEM_TO_SHADOW((uptr)allocated) == 0 && CanPoisonMemory()) { + // Heap poisoning is enabled, but the allocator provides an unpoisoned + // chunk. This is possible if CanPoisonMemory() was false for some + // time, for example, due to flags()->start_disabled. + // Anyway, poison the block before using it for anything else. + uptr allocated_size = allocator.GetActuallyAllocatedSize(allocated); + PoisonShadow((uptr)allocated, allocated_size, kAsanHeapLeftRedzoneMagic); + } + + uptr alloc_beg = reinterpret_cast<uptr>(allocated); + uptr alloc_end = alloc_beg + needed_size; + uptr beg_plus_redzone = alloc_beg + rz_size; + uptr user_beg = beg_plus_redzone; + if (!IsAligned(user_beg, alignment)) + user_beg = RoundUpTo(user_beg, alignment); + uptr user_end = user_beg + size; + CHECK_LE(user_end, alloc_end); + uptr chunk_beg = user_beg - kChunkHeaderSize; + AsanChunk *m = reinterpret_cast<AsanChunk *>(chunk_beg); + m->alloc_type = alloc_type; + m->rz_log = rz_log; + u32 alloc_tid = t ? t->tid() : 0; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201910231752.x9NHqMbX078149>