Date: Tue, 22 Jan 2019 19:20:25 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r343311 - in projects/clang800-import/contrib/compiler-rt: . include/sanitizer include/xray lib/asan lib/builtins lib/builtins/arm lib/builtins/arm64 lib/builtins/ppc lib/cfi lib/dfsan ... Message-ID: <201901221920.x0MJKPm7001021@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Tue Jan 22 19:20:24 2019 New Revision: 343311 URL: https://svnweb.freebsd.org/changeset/base/343311 Log: Merge compiler-rt trunk r351319, and resolve conflicts. Added: projects/clang800-import/contrib/compiler-rt/lib/builtins/ppc/fixunstfti.c - copied unchanged from r343310, vendor/compiler-rt/dist/lib/builtins/ppc/fixunstfti.c projects/clang800-import/contrib/compiler-rt/lib/builtins/ppc/floattitf.c - copied unchanged from r343310, vendor/compiler-rt/dist/lib/builtins/ppc/floattitf.c projects/clang800-import/contrib/compiler-rt/lib/esan/esan_sideline_bsd.cpp - copied unchanged from r343310, vendor/compiler-rt/dist/lib/esan/esan_sideline_bsd.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerBuiltins.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/fuzzer/FuzzerBuiltins.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerBuiltinsMsvc.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/fuzzer/FuzzerBuiltinsMsvc.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWindows.cpp - copied unchanged from r343310, vendor/compiler-rt/dist/lib/fuzzer/FuzzerExtFunctionsWindows.cpp projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_checks.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/hwasan/hwasan_checks.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_memintrinsics.cc - copied unchanged from r343310, vendor/compiler-rt/dist/lib/hwasan/hwasan_memintrinsics.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_thread_list.cc - copied unchanged from r343310, vendor/compiler-rt/dist/lib/hwasan/hwasan_thread_list.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_thread_list.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/hwasan/hwasan_thread_list.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_local_address_space_view.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_local_address_space_view.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cc - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_netbsd.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_freebsd.cc - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_freebsd.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_freebsd.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_platform_limits_freebsd.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_ring_buffer.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_ring_buffer.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_type_traits.cc - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_type_traits.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_type_traits.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_type_traits.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_fdr_controller.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/xray/xray_fdr_controller.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_fdr_log_writer.h - copied unchanged from r343310, vendor/compiler-rt/dist/lib/xray/xray_fdr_log_writer.h Deleted: projects/clang800-import/contrib/compiler-rt/lib/builtins/arm64/ projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerExtFunctionsDlsymWin.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeakAlias.cpp Modified: projects/clang800-import/contrib/compiler-rt/LICENSE.TXT projects/clang800-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h projects/clang800-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h projects/clang800-import/contrib/compiler-rt/include/sanitizer/hwasan_interface.h projects/clang800-import/contrib/compiler-rt/include/sanitizer/netbsd_syscall_hooks.h projects/clang800-import/contrib/compiler-rt/include/xray/xray_log_interface.h projects/clang800-import/contrib/compiler-rt/lib/asan/asan_allocator.h projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.h projects/clang800-import/contrib/compiler-rt/lib/asan/asan_flags.inc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_fuchsia.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals_win.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_internal.h projects/clang800-import/contrib/compiler-rt/lib/asan/asan_linux.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_linux.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_mac.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_win.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_new_delete.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_posix.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_report.h projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtems.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtl.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_thread.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win.cc projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win_dll_thunk.cc projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/addsf3.S projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S projects/clang800-import/contrib/compiler-rt/lib/builtins/clzdi2.c projects/clang800-import/contrib/compiler-rt/lib/builtins/cpu_model.c projects/clang800-import/contrib/compiler-rt/lib/builtins/ctzdi2.c projects/clang800-import/contrib/compiler-rt/lib/builtins/divdc3.c projects/clang800-import/contrib/compiler-rt/lib/builtins/divdf3.c projects/clang800-import/contrib/compiler-rt/lib/builtins/divsc3.c projects/clang800-import/contrib/compiler-rt/lib/builtins/divsf3.c projects/clang800-import/contrib/compiler-rt/lib/builtins/divtc3.c projects/clang800-import/contrib/compiler-rt/lib/builtins/emutls.c projects/clang800-import/contrib/compiler-rt/lib/builtins/fp_lib.h projects/clang800-import/contrib/compiler-rt/lib/builtins/gcc_personality_v0.c projects/clang800-import/contrib/compiler-rt/lib/builtins/int_lib.h projects/clang800-import/contrib/compiler-rt/lib/builtins/int_math.h projects/clang800-import/contrib/compiler-rt/lib/builtins/int_types.h projects/clang800-import/contrib/compiler-rt/lib/builtins/int_util.c projects/clang800-import/contrib/compiler-rt/lib/builtins/int_util.h projects/clang800-import/contrib/compiler-rt/lib/builtins/os_version_check.c projects/clang800-import/contrib/compiler-rt/lib/builtins/ppc/divtc3.c projects/clang800-import/contrib/compiler-rt/lib/cfi/cfi.cc projects/clang800-import/contrib/compiler-rt/lib/cfi/cfi_blacklist.txt projects/clang800-import/contrib/compiler-rt/lib/dfsan/dfsan.cc projects/clang800-import/contrib/compiler-rt/lib/esan/esan_interceptors.cpp projects/clang800-import/contrib/compiler-rt/lib/esan/esan_shadow.h projects/clang800-import/contrib/compiler-rt/lib/esan/esan_sideline.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerCommand.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerCorpus.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerDefs.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerDriver.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerFlags.def projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerIO.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerIO.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerIOPosix.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerIOWindows.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerInternal.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerLoop.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerMutate.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerMutate.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerOptions.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerTracePC.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerTracePC.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerUtil.h projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerUtilFuchsia.cpp projects/clang800-import/contrib/compiler-rt/lib/fuzzer/FuzzerUtilWindows.cpp projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_allocator.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_allocator.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_flags.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_flags.inc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_interceptors.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_interface_internal.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_linux.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_mapping.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_new_delete.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_poisoning.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_poisoning.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_report.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_report.h projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_thread.cc projects/clang800-import/contrib/compiler-rt/lib/hwasan/hwasan_thread.h projects/clang800-import/contrib/compiler-rt/lib/interception/interception.h projects/clang800-import/contrib/compiler-rt/lib/interception/interception_linux.h projects/clang800-import/contrib/compiler-rt/lib/interception/interception_win.cc projects/clang800-import/contrib/compiler-rt/lib/lsan/lsan_allocator.cc projects/clang800-import/contrib/compiler-rt/lib/lsan/lsan_allocator.h projects/clang800-import/contrib/compiler-rt/lib/lsan/lsan_common_mac.cc projects/clang800-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc projects/clang800-import/contrib/compiler-rt/lib/msan/msan.cc projects/clang800-import/contrib/compiler-rt/lib/msan/msan_allocator.cc projects/clang800-import/contrib/compiler-rt/lib/msan/msan_interceptors.cc projects/clang800-import/contrib/compiler-rt/lib/msan/msan_linux.cc projects/clang800-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c projects/clang800-import/contrib/compiler-rt/lib/profile/InstrProfData.inc projects/clang800-import/contrib/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c projects/clang800-import/contrib/compiler-rt/lib/profile/InstrProfilingPlatformOther.c projects/clang800-import/contrib/compiler-rt/lib/profile/InstrProfilingValue.c projects/clang800-import/contrib/compiler-rt/lib/profile/WindowsMMap.c projects/clang800-import/contrib/compiler-rt/lib/profile/WindowsMMap.h projects/clang800-import/contrib/compiler-rt/lib/safestack/safestack.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_bytemap.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_internal.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_secondary.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang_x86.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_fuchsia.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_win_sections.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_file.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_interceptors_ioctl_netbsd.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libc.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_mac.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_malloc_mac.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_openbsd.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_netbsd.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_netbsd.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_common.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_linux.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_mac.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_solaris.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_sparc.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_fuchsia.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_syscall_linux_aarch64.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_syscall_linux_arm.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_syscall_linux_x86_64.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_syscalls_netbsd.inc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_termination.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_win.cc projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_win_defs.h projects/clang800-import/contrib/compiler-rt/lib/sanitizer_common/symbolizer/scripts/global_symbols.txt projects/clang800-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp projects/clang800-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h projects/clang800-import/contrib/compiler-rt/lib/scudo/scudo_malloc.cpp projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_debugging.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_flags.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_flags.inc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.h projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors_mac.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_libdispatch_mac.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform.h projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_report.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.h projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc projects/clang800-import/contrib/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc projects/clang800-import/contrib/compiler-rt/lib/ubsan/ubsan_checks.inc projects/clang800-import/contrib/compiler-rt/lib/ubsan/ubsan_flags.inc projects/clang800-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc projects/clang800-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.h projects/clang800-import/contrib/compiler-rt/lib/ubsan/ubsan_interface.inc projects/clang800-import/contrib/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_allocator.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_basic_logging.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_buffer_queue.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_buffer_queue.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_defs.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_fdr_log_records.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_fdr_logging.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_function_call_trie.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_init.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_interface.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_profile_collector.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_profile_collector.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_profiling.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_profiling_flags.inc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_segmented_array.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_trampoline_x86_64.S projects/clang800-import/contrib/compiler-rt/lib/xray/xray_tsc.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_utils.cc projects/clang800-import/contrib/compiler-rt/lib/xray/xray_utils.h projects/clang800-import/contrib/compiler-rt/lib/xray/xray_x86_64.cc Directory Properties: projects/clang800-import/contrib/compiler-rt/ (props changed) projects/clang800-import/contrib/compiler-rt/lib/fuzzer/ (props changed) Modified: projects/clang800-import/contrib/compiler-rt/LICENSE.TXT ============================================================================== --- projects/clang800-import/contrib/compiler-rt/LICENSE.TXT Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/LICENSE.TXT Tue Jan 22 19:20:24 2019 (r343311) @@ -14,7 +14,7 @@ Full text of the relevant licenses is included below. University of Illinois/NCSA Open Source License -Copyright (c) 2009-2018 by the contributors listed in CREDITS.TXT +Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT All rights reserved. Modified: projects/clang800-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h Tue Jan 22 19:20:24 2019 (r343311) @@ -82,7 +82,6 @@ extern "C" { Currently available with ASan only. */ void __sanitizer_purge_allocator(void); - #ifdef __cplusplus } // extern "C" #endif Modified: projects/clang800-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h Tue Jan 22 19:20:24 2019 (r343311) @@ -124,6 +124,12 @@ extern "C" { // Symbolizes the supplied 'pc' using the format string 'fmt'. // Outputs at most 'out_buf_size' bytes into 'out_buf'. + // If 'out_buf' is not empty then output is zero or more non empty C strings + // followed by single empty C string. Multiple strings can be returned if PC + // corresponds to inlined function. Inlined frames are printed in the order + // from "most-inlined" to the "least-inlined", so the last frame should be the + // not inlined function. + // Inlined frames can be removed with 'symbolize_inline_frames=0'. // The format syntax is described in // lib/sanitizer_common/sanitizer_stacktrace_printer.h. void __sanitizer_symbolize_pc(void *pc, const char *fmt, char *out_buf, Modified: projects/clang800-import/contrib/compiler-rt/include/sanitizer/hwasan_interface.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/include/sanitizer/hwasan_interface.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/include/sanitizer/hwasan_interface.h Tue Jan 22 19:20:24 2019 (r343311) @@ -19,6 +19,12 @@ #ifdef __cplusplus extern "C" { #endif + // Initialize shadow but not the rest of the runtime. + // Does not call libc unless there is an error. + // Can be called multiple times, or not at all (in which case shadow will + // be initialized in compiler-inserted __hwasan_init() call). + void __hwasan_shadow_init(void); + // This function may be optionally provided by user and should return // a string containing HWASan runtime options. See asan_flags.h for details. const char* __hwasan_default_options(void); @@ -26,6 +32,51 @@ extern "C" { void __hwasan_enable_allocator_tagging(void); void __hwasan_disable_allocator_tagging(void); + // Mark region of memory with the given tag. Both address and size need to be + // 16-byte aligned. + void __hwasan_tag_memory(const volatile void *p, unsigned char tag, + size_t size); + + /// Set pointer tag. Previous tag is lost. + void *__hwasan_tag_pointer(const volatile void *p, unsigned char tag); + + // Set memory tag from the current SP address to the given address to zero. + // This is meant to annotate longjmp and other non-local jumps. + // This function needs to know the (almost) exact destination frame address; + // clearing shadow for the entire thread stack like __asan_handle_no_return + // does would cause false reports. + void __hwasan_handle_longjmp(const void *sp_dst); + + // Libc hook for thread creation. Should be called in the child thread before + // any instrumented code. + void __hwasan_thread_enter(); + + // Libc hook for thread destruction. No instrumented code should run after + // this call. + void __hwasan_thread_exit(); + + // Print shadow and origin for the memory range to stderr in a human-readable + // format. + void __hwasan_print_shadow(const volatile void *x, size_t size); + + // Print one-line report about the memory usage of the current process. + void __hwasan_print_memory_usage(); + + int __sanitizer_posix_memalign(void **memptr, size_t alignment, size_t size); + void * __sanitizer_memalign(size_t alignment, size_t size); + void * __sanitizer_aligned_alloc(size_t alignment, size_t size); + void * __sanitizer___libc_memalign(size_t alignment, size_t size); + void * __sanitizer_valloc(size_t size); + void * __sanitizer_pvalloc(size_t size); + void __sanitizer_free(void *ptr); + void __sanitizer_cfree(void *ptr); + size_t __sanitizer_malloc_usable_size(const void *ptr); + struct mallinfo __sanitizer_mallinfo(); + int __sanitizer_mallopt(int cmd, int value); + void __sanitizer_malloc_stats(void); + void * __sanitizer_calloc(size_t nmemb, size_t size); + void * __sanitizer_realloc(void *ptr, size_t size); + void * __sanitizer_malloc(size_t size); #ifdef __cplusplus } // extern "C" #endif Modified: projects/clang800-import/contrib/compiler-rt/include/sanitizer/netbsd_syscall_hooks.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/include/sanitizer/netbsd_syscall_hooks.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/include/sanitizer/netbsd_syscall_hooks.h Tue Jan 22 19:20:24 2019 (r343311) @@ -21,8 +21,8 @@ // DO NOT EDIT! THIS FILE HAS BEEN GENERATED! // // Generated with: generate_netbsd_syscalls.awk -// Generated date: 2018-03-03 -// Generated from: syscalls.master,v 1.291 2018/01/06 16:41:23 kamil Exp +// Generated date: 2018-10-30 +// Generated from: syscalls.master,v 1.293 2018/07/31 13:00:13 rjs Exp // //===----------------------------------------------------------------------===// #ifndef SANITIZER_NETBSD_SYSCALL_HOOKS_H @@ -986,7 +986,15 @@ #define __sanitizer_syscall_post_fpathconf(res, fd, name) \ __sanitizer_syscall_post_impl_fpathconf(res, (long long)(fd), \ (long long)(name)) -/* syscall 193 has been skipped */ +#define __sanitizer_syscall_pre_getsockopt2(s, level, name, val, avalsize) \ + __sanitizer_syscall_pre_impl_getsockopt2( \ + (long long)(s), (long long)(level), (long long)(name), (long long)(val), \ + (long long)(avalsize)) +#define __sanitizer_syscall_post_getsockopt2(res, s, level, name, val, \ + avalsize) \ + __sanitizer_syscall_post_impl_getsockopt2( \ + res, (long long)(s), (long long)(level), (long long)(name), \ + (long long)(val), (long long)(avalsize)) #define __sanitizer_syscall_pre_getrlimit(which, rlp) \ __sanitizer_syscall_pre_impl_getrlimit((long long)(which), (long long)(rlp)) #define __sanitizer_syscall_post_getrlimit(res, which, rlp) \ @@ -1752,18 +1760,8 @@ __sanitizer_syscall_post_impl___sigaction_sigtramp( \ res, (long long)(signum), (long long)(nsa), (long long)(osa), \ (long long)(tramp), (long long)(vers)) -#define __sanitizer_syscall_pre_pmc_get_info(ctr, op, args) \ - __sanitizer_syscall_pre_impl_pmc_get_info((long long)(ctr), (long long)(op), \ - (long long)(args)) -#define __sanitizer_syscall_post_pmc_get_info(res, ctr, op, args) \ - __sanitizer_syscall_post_impl_pmc_get_info( \ - res, (long long)(ctr), (long long)(op), (long long)(args)) -#define __sanitizer_syscall_pre_pmc_control(ctr, op, args) \ - __sanitizer_syscall_pre_impl_pmc_control((long long)(ctr), (long long)(op), \ - (long long)(args)) -#define __sanitizer_syscall_post_pmc_control(res, ctr, op, args) \ - __sanitizer_syscall_post_impl_pmc_control( \ - res, (long long)(ctr), (long long)(op), (long long)(args)) +/* syscall 341 has been skipped */ +/* syscall 342 has been skipped */ #define __sanitizer_syscall_pre_rasctl(addr, len, op) \ __sanitizer_syscall_pre_impl_rasctl((long long)(addr), (long long)(len), \ (long long)(op)) @@ -3444,7 +3442,13 @@ void __sanitizer_syscall_post_impl_pathconf(long long void __sanitizer_syscall_pre_impl_fpathconf(long long fd, long long name); void __sanitizer_syscall_post_impl_fpathconf(long long res, long long fd, long long name); -/* syscall 193 has been skipped */ +void __sanitizer_syscall_pre_impl_getsockopt2(long long s, long long level, + long long name, long long val, + long long avalsize); +void __sanitizer_syscall_post_impl_getsockopt2(long long res, long long s, + long long level, long long name, + long long val, + long long avalsize); void __sanitizer_syscall_pre_impl_getrlimit(long long which, long long rlp); void __sanitizer_syscall_post_impl_getrlimit(long long res, long long which, long long rlp); @@ -4001,14 +4005,8 @@ void __sanitizer_syscall_pre_impl___sigaction_sigtramp void __sanitizer_syscall_post_impl___sigaction_sigtramp( long long res, long long signum, long long nsa, long long osa, long long tramp, long long vers); -void __sanitizer_syscall_pre_impl_pmc_get_info(long long ctr, long long op, - long long args); -void __sanitizer_syscall_post_impl_pmc_get_info(long long res, long long ctr, - long long op, long long args); -void __sanitizer_syscall_pre_impl_pmc_control(long long ctr, long long op, - long long args); -void __sanitizer_syscall_post_impl_pmc_control(long long res, long long ctr, - long long op, long long args); +/* syscall 341 has been skipped */ +/* syscall 342 has been skipped */ void __sanitizer_syscall_pre_impl_rasctl(long long addr, long long len, long long op); void __sanitizer_syscall_post_impl_rasctl(long long res, long long addr, Modified: projects/clang800-import/contrib/compiler-rt/include/xray/xray_log_interface.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/include/xray/xray_log_interface.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/include/xray/xray_log_interface.h Tue Jan 22 19:20:24 2019 (r343311) @@ -158,8 +158,8 @@ struct XRayLogImpl { /// The log initialization routine provided by the implementation, always /// provided with the following parameters: /// - /// - buffer size - /// - maximum number of buffers + /// - buffer size (unused) + /// - maximum number of buffers (unused) /// - a pointer to an argument struct that the implementation MUST handle /// - the size of the argument struct /// @@ -354,26 +354,5 @@ XRayLogFlushStatus __xray_log_process_buffers(void (*P XRayBuffer)); } // extern "C" - -namespace __xray { - -/// DEPRECATED: Use __xray_log_init_mode(...) instead, and provide flag -/// configuration strings to set the options instead. -/// Options used by the LLVM XRay FDR logging implementation. -struct FDRLoggingOptions { - bool ReportErrors = false; - int Fd = -1; -}; - -/// DEPRECATED: Use __xray_log_init_mode(...) instead, and provide flag -/// configuration strings to set the options instead. -/// Options used by the LLVM XRay Basic (Naive) logging implementation. -struct BasicLoggingOptions { - int DurationFilterMicros = 0; - size_t MaxStackDepth = 0; - size_t ThreadBufferSize = 0; -}; - -} // namespace __xray #endif // XRAY_XRAY_LOG_INTERFACE_H Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_allocator.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_allocator.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_allocator.h Tue Jan 22 19:20:24 2019 (r343311) @@ -148,6 +148,7 @@ const uptr kAllocatorSpace = 0x600000000000ULL; const uptr kAllocatorSize = 0x40000000000ULL; // 4T. typedef DefaultSizeClassMap SizeClassMap; # endif +template <typename AddressSpaceViewTy> struct AP64 { // Allocator64 parameters. Deliberately using a short name. static const uptr kSpaceBeg = kAllocatorSpace; static const uptr kSpaceSize = kAllocatorSize; @@ -155,37 +156,57 @@ struct AP64 { // Allocator64 parameters. Deliberately typedef __asan::SizeClassMap SizeClassMap; typedef AsanMapUnmapCallback MapUnmapCallback; static const uptr kFlags = 0; + using AddressSpaceView = AddressSpaceViewTy; }; -typedef SizeClassAllocator64<AP64> PrimaryAllocator; +template <typename AddressSpaceView> +using PrimaryAllocatorASVT = SizeClassAllocator64<AP64<AddressSpaceView>>; +using PrimaryAllocator = PrimaryAllocatorASVT<LocalAddressSpaceView>; #else // Fallback to SizeClassAllocator32. static const uptr kRegionSizeLog = 20; static const uptr kNumRegions = SANITIZER_MMAP_RANGE_SIZE >> kRegionSizeLog; # if SANITIZER_WORDSIZE == 32 -typedef FlatByteMap<kNumRegions> ByteMap; +template <typename AddressSpaceView> +using ByteMapASVT = FlatByteMap<kNumRegions, AddressSpaceView>; # elif SANITIZER_WORDSIZE == 64 -typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap; +template <typename AddressSpaceView> +using ByteMapASVT = + TwoLevelByteMap<(kNumRegions >> 12), 1 << 12, AddressSpaceView>; # endif typedef CompactSizeClassMap SizeClassMap; +template <typename AddressSpaceViewTy> struct AP32 { static const uptr kSpaceBeg = 0; static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE; static const uptr kMetadataSize = 16; typedef __asan::SizeClassMap SizeClassMap; static const uptr kRegionSizeLog = __asan::kRegionSizeLog; - typedef __asan::ByteMap ByteMap; + using AddressSpaceView = AddressSpaceViewTy; + using ByteMap = __asan::ByteMapASVT<AddressSpaceView>; typedef AsanMapUnmapCallback MapUnmapCallback; static const uptr kFlags = 0; }; -typedef SizeClassAllocator32<AP32> PrimaryAllocator; +template <typename AddressSpaceView> +using PrimaryAllocatorASVT = SizeClassAllocator32<AP32<AddressSpaceView> >; +using PrimaryAllocator = PrimaryAllocatorASVT<LocalAddressSpaceView>; #endif // SANITIZER_CAN_USE_ALLOCATOR64 static const uptr kNumberOfSizeClasses = SizeClassMap::kNumClasses; -typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache; -typedef LargeMmapAllocator<AsanMapUnmapCallback> SecondaryAllocator; -typedef CombinedAllocator<PrimaryAllocator, AllocatorCache, - SecondaryAllocator> AsanAllocator; +template <typename AddressSpaceView> +using AllocatorCacheASVT = + SizeClassAllocatorLocalCache<PrimaryAllocatorASVT<AddressSpaceView>>; +using AllocatorCache = AllocatorCacheASVT<LocalAddressSpaceView>; +template <typename AddressSpaceView> +using SecondaryAllocatorASVT = + LargeMmapAllocator<AsanMapUnmapCallback, DefaultLargeMmapAllocatorPtrArray, + AddressSpaceView>; +template <typename AddressSpaceView> +using AsanAllocatorASVT = + CombinedAllocator<PrimaryAllocatorASVT<AddressSpaceView>, + AllocatorCacheASVT<AddressSpaceView>, + SecondaryAllocatorASVT<AddressSpaceView>>; +using AsanAllocator = AsanAllocatorASVT<LocalAddressSpaceView>; struct AsanThreadLocalMallocStorage { uptr quarantine_cache[16]; Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -125,9 +125,8 @@ void ErrorAllocTypeMismatch::Print() { Decorator d; Printf("%s", d.Error()); Report("ERROR: AddressSanitizer: %s (%s vs %s) on %p\n", - scariness.GetDescription(), - alloc_names[alloc_type], dealloc_names[dealloc_type], - addr_description.addr); + scariness.GetDescription(), alloc_names[alloc_type], + dealloc_names[dealloc_type], addr_description.Address()); Printf("%s", d.Default()); CHECK_GT(dealloc_stack->size, 0); scariness.Print(); Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_errors.h Tue Jan 22 19:20:24 2019 (r343311) @@ -110,8 +110,8 @@ struct ErrorFreeNotMalloced : ErrorBase { struct ErrorAllocTypeMismatch : ErrorBase { const BufferedStackTrace *dealloc_stack; - HeapAddressDescription addr_description; AllocType alloc_type, dealloc_type; + AddressDescription addr_description; ErrorAllocTypeMismatch() = default; // (*) ErrorAllocTypeMismatch(u32 tid, BufferedStackTrace *stack, uptr addr, @@ -119,9 +119,8 @@ struct ErrorAllocTypeMismatch : ErrorBase { : ErrorBase(tid, 10, "alloc-dealloc-mismatch"), dealloc_stack(stack), alloc_type(alloc_type_), - dealloc_type(dealloc_type_) { - GetHeapAddressInformation(addr, 1, &addr_description); - }; + dealloc_type(dealloc_type_), + addr_description(addr, 1, false) {} void Print(); }; Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_flags.inc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_flags.inc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_flags.inc Tue Jan 22 19:20:24 2019 (r343311) @@ -152,8 +152,6 @@ ASAN_FLAG(const char *, suppressions, "", "Suppression ASAN_FLAG(bool, halt_on_error, true, "Crash the program after printing the first error report " "(WARNING: USE AT YOUR OWN RISK!)") -ASAN_FLAG(bool, use_odr_indicator, false, - "Use special ODR indicator symbol for ODR violation detection") ASAN_FLAG(bool, allocator_frees_and_returns_null_on_realloc_zero, true, "realloc(p, 0) is equivalent to free(p) by default (Same as the " "POSIX standard). If set to false, realloc(p, 0) will return a " Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_fuchsia.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_fuchsia.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_fuchsia.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -190,6 +190,13 @@ static void ThreadExitHook(void *hook, uptr os_id) { AsanThread::TSDDtor(per_thread); } +bool HandleDlopenInit() { + // Not supported on this platform. + static_assert(!SANITIZER_SUPPORTS_INIT_FOR_DLOPEN, + "Expected SANITIZER_SUPPORTS_INIT_FOR_DLOPEN to be false"); + return false; +} + } // namespace __asan // These are declared (in extern "C") by <zircon/sanitizer.h>. Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -83,9 +83,11 @@ static bool IsAddressNearGlobal(uptr addr, const __asa } static void ReportGlobal(const Global &g, const char *prefix) { - Report("%s Global[%p]: beg=%p size=%zu/%zu name=%s module=%s dyn_init=%zu\n", - prefix, &g, (void *)g.beg, g.size, g.size_with_redzone, g.name, - g.module_name, g.has_dynamic_init); + Report( + "%s Global[%p]: beg=%p size=%zu/%zu name=%s module=%s dyn_init=%zu " + "odr_indicator=%p\n", + prefix, &g, (void *)g.beg, g.size, g.size_with_redzone, g.name, + g.module_name, g.has_dynamic_init, (void *)g.odr_indicator); if (g.location) { Report(" location (%p): name=%s[%p], %d %d\n", g.location, g.location->filename, g.location->filename, g.location->line_no, @@ -133,6 +135,9 @@ enum GlobalSymbolState { // this method in case compiler instruments global variables through their // local aliases. static void CheckODRViolationViaIndicator(const Global *g) { + // Instrumentation requests to skip ODR check. + if (g->odr_indicator == UINTPTR_MAX) + return; u8 *odr_indicator = reinterpret_cast<u8 *>(g->odr_indicator); if (*odr_indicator == UNREGISTERED) { *odr_indicator = REGISTERED; @@ -183,9 +188,7 @@ static void CheckODRViolationViaPoisoning(const Global // This routine chooses between two different methods of ODR violation // detection. static inline bool UseODRIndicator(const Global *g) { - // Use ODR indicator method iff use_odr_indicator flag is set and - // indicator symbol address is not 0. - return flags()->use_odr_indicator && g->odr_indicator > 0; + return g->odr_indicator > 0; } // Register a global variable. @@ -248,7 +251,7 @@ static void UnregisterGlobal(const Global *g) { // implementation. It might not be worth doing anyway. // Release ODR indicator. - if (UseODRIndicator(g)) { + if (UseODRIndicator(g) && g->odr_indicator != UINTPTR_MAX) { u8 *odr_indicator = reinterpret_cast<u8 *>(g->odr_indicator); *odr_indicator = UNREGISTERED; } Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals_win.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals_win.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_globals_win.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -29,7 +29,7 @@ static void call_on_globals(void (*hook)(__asan_global __asan_global *end = &__asan_globals_end; uptr bytediff = (uptr)end - (uptr)start; if (bytediff % sizeof(__asan_global) != 0) { -#ifdef SANITIZER_DLL_THUNK +#if defined(SANITIZER_DLL_THUNK) || defined(SANITIZER_DYNAMIC_RUNTIME_THUNK) __debugbreak(); #else CHECK("corrupt asan global array"); Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_internal.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_internal.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_internal.h Tue Jan 22 19:20:24 2019 (r343311) @@ -111,6 +111,11 @@ void *AsanDlSymNext(const char *sym); void ReserveShadowMemoryRange(uptr beg, uptr end, const char *name); +// Returns `true` iff most of ASan init process should be skipped due to the +// ASan library being loaded via `dlopen()`. Platforms may perform any +// `dlopen()` specific initialization inside this function. +bool HandleDlopenInit(); + // Add convenient macro for interface functions that may be represented as // weak hooks. #define ASAN_MALLOC_HOOK(ptr, size) \ Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_linux.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_linux.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_linux.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -248,6 +248,13 @@ void *AsanDlSymNext(const char *sym) { return dlsym(RTLD_NEXT, sym); } +bool HandleDlopenInit() { + // Not supported on this platform. + static_assert(!SANITIZER_SUPPORTS_INIT_FOR_DLOPEN, + "Expected SANITIZER_SUPPORTS_INIT_FOR_DLOPEN to be false"); + return false; +} + } // namespace __asan #endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_linux.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_linux.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_linux.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -209,7 +209,7 @@ INTERCEPTOR(struct fake_mallinfo, mallinfo, void) { } INTERCEPTOR(int, mallopt, int cmd, int value) { - return -1; + return 0; } #endif // SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_mac.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_mac.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_mac.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -61,4 +61,25 @@ using namespace __asan; #include "sanitizer_common/sanitizer_malloc_mac.inc" +namespace COMMON_MALLOC_NAMESPACE { +bool HandleDlopenInit() { + static_assert(SANITIZER_SUPPORTS_INIT_FOR_DLOPEN, + "Expected SANITIZER_SUPPORTS_INIT_FOR_DLOPEN to be true"); + // We have no reliable way of knowing how we are being loaded + // so make it a requirement on Apple platforms to set this environment + // variable to indicate that we want to perform initialization via + // dlopen(). + auto init_str = GetEnv("APPLE_ASAN_INIT_FOR_DLOPEN"); + if (!init_str) + return false; + if (internal_strncmp(init_str, "1", 1) != 0) + return false; + // When we are loaded via `dlopen()` path we still initialize the malloc zone + // so Symbolication clients (e.g. `leaks`) that load the ASan allocator can + // find an initialized malloc zone. + InitMallocZoneFields(); + return true; +} +} // namespace COMMON_MALLOC_NAMESPACE + #endif Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_win.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_win.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_malloc_win.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -14,9 +14,18 @@ #include "sanitizer_common/sanitizer_platform.h" #if SANITIZER_WINDOWS -#define WIN32_LEAN_AND_MEAN -#include <windows.h> +// Intentionally not including windows.h here, to avoid the risk of +// pulling in conflicting declarations of these functions. (With mingw-w64, +// there's a risk of windows.h pulling in stdint.h.) +typedef int BOOL; +typedef void *HANDLE; +typedef const void *LPCVOID; +typedef void *LPVOID; +#define HEAP_ZERO_MEMORY 0x00000008 +#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010 + + #include "asan_allocator.h" #include "asan_interceptors.h" #include "asan_internal.h" @@ -125,13 +134,18 @@ void *_recalloc_base(void *p, size_t n, size_t elem_si } ALLOCATION_FUNCTION_ATTRIBUTE -size_t _msize(const void *ptr) { +size_t _msize(void *ptr) { GET_CURRENT_PC_BP_SP; (void)sp; return asan_malloc_usable_size(ptr, pc, bp); } ALLOCATION_FUNCTION_ATTRIBUTE +size_t _msize_base(void *ptr) { + return _msize(ptr); +} + +ALLOCATION_FUNCTION_ATTRIBUTE void *_expand(void *memblock, size_t size) { // _expand is used in realloc-like functions to resize the buffer if possible. // We don't want memory to stand still while resizing buffers, so return 0. @@ -226,6 +240,7 @@ void ReplaceSystemMalloc() { TryToOverrideFunction("_recalloc_base", (uptr)_recalloc); TryToOverrideFunction("_recalloc_crt", (uptr)_recalloc); TryToOverrideFunction("_msize", (uptr)_msize); + TryToOverrideFunction("_msize_base", (uptr)_msize); TryToOverrideFunction("_expand", (uptr)_expand); TryToOverrideFunction("_expand_base", (uptr)_expand); Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_new_delete.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_new_delete.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_new_delete.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -26,7 +26,7 @@ // anyway by passing extra -export flags to the linker, which is exactly that // dllexport would normally do. We need to export them in order to make the // VS2015 dynamic CRT (MD) work. -#if SANITIZER_WINDOWS +#if SANITIZER_WINDOWS && defined(_MSC_VER) #define CXX_OPERATOR_ATTRIBUTE #define COMMENT_EXPORT(sym) __pragma(comment(linker, "/export:" sym)) #ifdef _WIN64 Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_posix.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_posix.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_posix.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -40,6 +40,51 @@ void AsanOnDeadlySignal(int signo, void *siginfo, void // ---------------------- TSD ---------------- {{{1 +#if SANITIZER_NETBSD || SANITIZER_FREEBSD +// Thread Static Data cannot be used in early init on NetBSD and FreeBSD. +// Reuse the Asan TSD API for compatibility with existing code +// with an alternative implementation. + +static void (*tsd_destructor)(void *tsd) = nullptr; + +struct tsd_key { + tsd_key() : key(nullptr) {} + ~tsd_key() { + CHECK(tsd_destructor); + if (key) + (*tsd_destructor)(key); + } + void *key; +}; + +static thread_local struct tsd_key key; + +void AsanTSDInit(void (*destructor)(void *tsd)) { + CHECK(!tsd_destructor); + tsd_destructor = destructor; +} + +void *AsanTSDGet() { + CHECK(tsd_destructor); + return key.key; +} + +void AsanTSDSet(void *tsd) { + CHECK(tsd_destructor); + CHECK(tsd); + CHECK(!key.key); + key.key = tsd; +} + +void PlatformTSDDtor(void *tsd) { + CHECK(tsd_destructor); + CHECK_EQ(key.key, tsd); + key.key = nullptr; + // Make sure that signal handler can not see a stale current thread pointer. + atomic_signal_fence(memory_order_seq_cst); + AsanThread::TSDDtor(tsd); +} +#else static pthread_key_t tsd_key; static bool tsd_key_inited = false; void AsanTSDInit(void (*destructor)(void *tsd)) { @@ -67,6 +112,7 @@ void PlatformTSDDtor(void *tsd) { } AsanThread::TSDDtor(tsd); } +#endif } // namespace __asan #endif // SANITIZER_POSIX Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_report.h ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_report.h Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_report.h Tue Jan 22 19:20:24 2019 (r343311) @@ -12,6 +12,9 @@ // ASan-private header for error reporting functions. //===----------------------------------------------------------------------===// +#ifndef ASAN_REPORT_H +#define ASAN_REPORT_H + #include "asan_allocator.h" #include "asan_internal.h" #include "asan_thread.h" @@ -92,3 +95,4 @@ void ReportMacCfReallocUnknown(uptr addr, uptr zone_pt BufferedStackTrace *stack); } // namespace __asan +#endif // ASAN_REPORT_H Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtems.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtems.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtems.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -213,6 +213,12 @@ static void HandleExit() { } } +bool HandleDlopenInit() { + // Not supported on this platform. + static_assert(!SANITIZER_SUPPORTS_INIT_FOR_DLOPEN, + "Expected SANITIZER_SUPPORTS_INIT_FOR_DLOPEN to be false"); + return false; +} } // namespace __asan // These are declared (in extern "C") by <some_path/sanitizer.h>. Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtl.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtl.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_rtl.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -383,6 +383,19 @@ void PrintAddressSpaceLayout() { kHighShadowBeg > kMidMemEnd); } +#if defined(__thumb__) && defined(__linux__) +#define START_BACKGROUND_THREAD_IN_ASAN_INTERNAL +#endif + +#ifndef START_BACKGROUND_THREAD_IN_ASAN_INTERNAL +static bool UNUSED __local_asan_dyninit = [] { + MaybeStartBackgroudThread(); + SetSoftRssLimitExceededCallback(AsanSoftRssLimitExceededCallback); + + return false; +}(); +#endif + static void AsanInitInternal() { if (LIKELY(asan_inited)) return; SanitizerToolName = "AddressSanitizer"; @@ -396,6 +409,14 @@ static void AsanInitInternal() { // initialization steps look at flags(). InitializeFlags(); + // Stop performing init at this point if we are being loaded via + // dlopen() and the platform supports it. + if (SANITIZER_SUPPORTS_INIT_FOR_DLOPEN && UNLIKELY(HandleDlopenInit())) { + asan_init_is_running = false; + VReport(1, "AddressSanitizer init is being performed for dlopen().\n"); + return; + } + AsanCheckIncompatibleRT(); AsanCheckDynamicRTPrereqs(); AvoidCVE_2016_2143(); @@ -420,6 +441,8 @@ static void AsanInitInternal() { __asan_option_detect_stack_use_after_return = flags()->detect_stack_use_after_return; + __sanitizer::InitializePlatformEarly(); + // Re-exec ourselves if we need to set additional env or command line args. MaybeReexec(); @@ -447,8 +470,10 @@ static void AsanInitInternal() { allocator_options.SetFrom(flags(), common_flags()); InitializeAllocator(allocator_options); +#ifdef START_BACKGROUND_THREAD_IN_ASAN_INTERNAL MaybeStartBackgroudThread(); SetSoftRssLimitExceededCallback(AsanSoftRssLimitExceededCallback); +#endif // On Linux AsanThread::ThreadStart() calls malloc() that's why asan_inited // should be set to 1 prior to initializing the threads. Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_thread.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_thread.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_thread.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -223,9 +223,11 @@ void AsanThread::Init(const InitOptions *options) { atomic_store(&stack_switching_, false, memory_order_release); CHECK_EQ(this->stack_size(), 0U); SetThreadStackAndTls(options); - CHECK_GT(this->stack_size(), 0U); - CHECK(AddrIsInMem(stack_bottom_)); - CHECK(AddrIsInMem(stack_top_ - 1)); + if (stack_top_ != stack_bottom_) { + CHECK_GT(this->stack_size(), 0U); + CHECK(AddrIsInMem(stack_bottom_)); + CHECK(AddrIsInMem(stack_top_ - 1)); + } ClearShadowForThreadStackAndTLS(); fake_stack_ = nullptr; if (__asan_option_detect_stack_use_after_return) @@ -289,20 +291,23 @@ void AsanThread::SetThreadStackAndTls(const InitOption DCHECK_EQ(options, nullptr); uptr tls_size = 0; uptr stack_size = 0; - GetThreadStackAndTls(tid() == 0, const_cast<uptr *>(&stack_bottom_), - const_cast<uptr *>(&stack_size), &tls_begin_, &tls_size); + GetThreadStackAndTls(tid() == 0, &stack_bottom_, &stack_size, &tls_begin_, + &tls_size); stack_top_ = stack_bottom_ + stack_size; tls_end_ = tls_begin_ + tls_size; dtls_ = DTLS_Get(); - int local; - CHECK(AddrIsInStack((uptr)&local)); + if (stack_top_ != stack_bottom_) { + int local; + CHECK(AddrIsInStack((uptr)&local)); + } } #endif // !SANITIZER_FUCHSIA && !SANITIZER_RTEMS void AsanThread::ClearShadowForThreadStackAndTLS() { - PoisonShadow(stack_bottom_, stack_top_ - stack_bottom_, 0); + if (stack_top_ != stack_bottom_) + PoisonShadow(stack_bottom_, stack_top_ - stack_bottom_, 0); if (tls_begin_ != tls_end_) { uptr tls_begin_aligned = RoundDownTo(tls_begin_, SHADOW_GRANULARITY); uptr tls_end_aligned = RoundUpTo(tls_end_, SHADOW_GRANULARITY); @@ -314,6 +319,9 @@ void AsanThread::ClearShadowForThreadStackAndTLS() { bool AsanThread::GetStackFrameAccessByAddr(uptr addr, StackFrameAccess *access) { + if (stack_top_ == stack_bottom_) + return false; + uptr bottom = 0; if (AddrIsInStack(addr)) { bottom = stack_bottom(); Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -159,6 +159,14 @@ INTERCEPTOR_WINAPI(DWORD, CreateThread, namespace __asan { void InitializePlatformInterceptors() { + // The interceptors were not designed to be removable, so we have to keep this + // module alive for the life of the process. + HMODULE pinned; + CHECK(GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_PIN, + (LPCWSTR)&InitializePlatformInterceptors, + &pinned)); + ASAN_INTERCEPT_FUNC(CreateThread); ASAN_INTERCEPT_FUNC(SetUnhandledExceptionFilter); @@ -312,6 +320,13 @@ int __asan_set_seh_filter() { if (prev_seh_handler != &SEHHandler) default_seh_handler = prev_seh_handler; return 0; +} + +bool HandleDlopenInit() { + // Not supported on this platform. + static_assert(!SANITIZER_SUPPORTS_INIT_FOR_DLOPEN, + "Expected SANITIZER_SUPPORTS_INIT_FOR_DLOPEN to be false"); + return false; } #if !ASAN_DYNAMIC Modified: projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win_dll_thunk.cc ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win_dll_thunk.cc Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/asan/asan_win_dll_thunk.cc Tue Jan 22 19:20:24 2019 (r343311) @@ -48,6 +48,7 @@ INTERCEPT_WRAP_W_WWW(_recalloc) INTERCEPT_WRAP_W_WWW(_recalloc_base) INTERCEPT_WRAP_W_W(_msize) +INTERCEPT_WRAP_W_W(_msize_base) INTERCEPT_WRAP_W_W(_expand) INTERCEPT_WRAP_W_W(_expand_dbg) Modified: projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/addsf3.S ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/addsf3.S Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/addsf3.S Tue Jan 22 19:20:24 2019 (r343311) @@ -178,7 +178,7 @@ LOCAL_LABEL(do_substraction): push {r0, r1, r2, r3} movs r0, r4 - bl __clzsi2 + bl SYMBOL_NAME(__clzsi2) movs r5, r0 pop {r0, r1, r2, r3} // shift = rep_clz(aSignificand) - rep_clz(implicitBit << 3); Modified: projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S Tue Jan 22 19:20:24 2019 (r343311) @@ -55,7 +55,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmpeq) mov ip, #APSR_C msr APSR_nzcvq, ip #else - msr CPSR_f, #APSR_C + msr APSR_nzcvq, #APSR_C #endif JMP(lr) #endif @@ -115,11 +115,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmple) movne ip, #(APSR_C) 1: -#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) msr APSR_nzcvq, ip -#else - msr CPSR_f, ip -#endif pop {r0-r3} POP_PC() #endif Modified: projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S Tue Jan 22 19:20:24 2019 (r343311) @@ -55,7 +55,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmpeq) mov ip, #APSR_C msr APSR_nzcvq, ip #else - msr CPSR_f, #APSR_C + msr APSR_nzcvq, #APSR_C #endif JMP(lr) #endif @@ -115,11 +115,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmple) movne ip, #(APSR_C) 1: -#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) msr APSR_nzcvq, ip -#else - msr CPSR_f, ip -#endif pop {r0-r3} POP_PC() #endif Modified: projects/clang800-import/contrib/compiler-rt/lib/builtins/clzdi2.c ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/builtins/clzdi2.c Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/builtins/clzdi2.c Tue Jan 22 19:20:24 2019 (r343311) @@ -16,8 +16,13 @@ /* Returns: the number of leading 0-bits */ -#if !defined(__clang__) && (defined(__sparc64__) || defined(__mips64) || defined(__riscv__)) -/* gcc resolves __builtin_clz -> __clzdi2 leading to infinite recursion */ +#if !defined(__clang__) && \ + ((defined(__sparc__) && defined(__arch64__)) || \ + defined(__mips64) || \ + (defined(__riscv) && __SIZEOF_POINTER__ >= 8)) +/* On 64-bit architectures with neither a native clz instruction nor a native + * ctz instruction, gcc resolves __builtin_clz to __clzdi2 rather than + * __clzsi2, leading to infinite recursion. */ #define __builtin_clz(a) __clzsi2(a) extern si_int __clzsi2(si_int); #endif Modified: projects/clang800-import/contrib/compiler-rt/lib/builtins/cpu_model.c ============================================================================== --- projects/clang800-import/contrib/compiler-rt/lib/builtins/cpu_model.c Tue Jan 22 19:03:51 2019 (r343310) +++ projects/clang800-import/contrib/compiler-rt/lib/builtins/cpu_model.c Tue Jan 22 19:20:24 2019 (r343311) @@ -55,6 +55,9 @@ enum ProcessorTypes { AMD_BTVER2, AMDFAM17H, INTEL_KNM, + INTEL_GOLDMONT, + INTEL_GOLDMONT_PLUS, + INTEL_TREMONT, CPU_TYPE_MAX }; @@ -76,6 +79,8 @@ enum ProcessorSubtypes { INTEL_COREI7_SKYLAKE, INTEL_COREI7_SKYLAKE_AVX512, INTEL_COREI7_CANNONLAKE, + INTEL_COREI7_ICELAKE_CLIENT, + INTEL_COREI7_ICELAKE_SERVER, CPU_SUBTYPE_MAX }; @@ -110,7 +115,12 @@ enum ProcessorFeatures { FEATURE_AVX512IFMA, FEATURE_AVX5124VNNIW, FEATURE_AVX5124FMAPS, - FEATURE_AVX512VPOPCNTDQ + FEATURE_AVX512VPOPCNTDQ, + FEATURE_AVX512VBMI2, + FEATURE_GFNI, + FEATURE_VPCLMULQDQ, + FEATURE_AVX512VNNI, + FEATURE_AVX512BITALG }; // The check below for i386 was copied from clang's cpuid.h (__get_cpuid_max). @@ -364,6 +374,14 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsig case 0x4c: // really airmont *Type = INTEL_SILVERMONT; break; // "silvermont" + // Goldmont: + case 0x5c: // Apollo Lake + case 0x5f: // Denverton + *Type = INTEL_GOLDMONT; + break; // "goldmont" + case 0x7a: + *Type = INTEL_GOLDMONT_PLUS; + break; case 0x57: *Type = INTEL_KNL; // knl @@ -438,35 +456,45 @@ static void getAMDProcessorTypeAndSubtype(unsigned Fam } static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf, - unsigned *FeaturesOut) { + unsigned *FeaturesOut, + unsigned *Features2Out) { unsigned Features = 0; + unsigned Features2 = 0; unsigned EAX, EBX; +#define setFeature(F) \ + do { \ + if (F < 32) \ + Features |= 1U << (F & 0x1f); \ + else if (F < 64) \ + Features2 |= 1U << ((F - 32) & 0x1f); \ + } while (0) + if ((EDX >> 15) & 1) - Features |= 1 << FEATURE_CMOV; + setFeature(FEATURE_CMOV); if ((EDX >> 23) & 1) - Features |= 1 << FEATURE_MMX; + setFeature(FEATURE_MMX); if ((EDX >> 25) & 1) - Features |= 1 << FEATURE_SSE; + setFeature(FEATURE_SSE); if ((EDX >> 26) & 1) - Features |= 1 << FEATURE_SSE2; + setFeature(FEATURE_SSE2); if ((ECX >> 0) & 1) - Features |= 1 << FEATURE_SSE3; + setFeature(FEATURE_SSE3); if ((ECX >> 1) & 1) - Features |= 1 << FEATURE_PCLMUL; + setFeature(FEATURE_PCLMUL); if ((ECX >> 9) & 1) - Features |= 1 << FEATURE_SSSE3; + setFeature(FEATURE_SSSE3); if ((ECX >> 12) & 1) - Features |= 1 << FEATURE_FMA; + setFeature(FEATURE_FMA); if ((ECX >> 19) & 1) - Features |= 1 << FEATURE_SSE4_1; + setFeature(FEATURE_SSE4_1); if ((ECX >> 20) & 1) - Features |= 1 << FEATURE_SSE4_2; + setFeature(FEATURE_SSE4_2); if ((ECX >> 23) & 1) - Features |= 1 << FEATURE_POPCNT; + setFeature(FEATURE_POPCNT); if ((ECX >> 25) & 1) - Features |= 1 << FEATURE_AES; + setFeature(FEATURE_AES); // If CPUID indicates support for XSAVE, XRESTORE and AVX, and XGETBV // indicates that the AVX registers will be saved and restored on context @@ -477,43 +505,53 @@ static void getAvailableFeatures(unsigned ECX, unsigne bool HasAVX512Save = HasAVX && ((EAX & 0xe0) == 0xe0); if (HasAVX) - Features |= 1 << FEATURE_AVX; + setFeature(FEATURE_AVX); bool HasLeaf7 = MaxLeaf >= 0x7 && !getX86CpuIDAndInfoEx(0x7, 0x0, &EAX, &EBX, &ECX, &EDX); if (HasLeaf7 && ((EBX >> 3) & 1)) *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201901221920.x0MJKPm7001021>