Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Sep 2016 21:41:30 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r305364 - in projects/clang390-import: contrib/compiler-rt contrib/compiler-rt/include/sanitizer contrib/compiler-rt/lib/asan contrib/compiler-rt/lib/builtins contrib/compiler-rt/lib/bu...
Message-ID:  <201609032141.u83LfUZV058781@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Sat Sep  3 21:41:29 2016
New Revision: 305364
URL: https://svnweb.freebsd.org/changeset/base/305364

Log:
  Update compiler-rt to 3.9.0 release, and update the build glue for
  libcompiler_rt and libclang_rt.

Added:
  projects/clang390-import/contrib/compiler-rt/include/sanitizer/esan_interface.h
     - copied unchanged from r305361, vendor/compiler-rt/dist/include/sanitizer/esan_interface.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_memory_profile.cc
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/asan/asan_memory_profile.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_scariness_score.h
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/asan/asan_scariness_score.h
  projects/clang390-import/contrib/compiler-rt/lib/builtins/cpu_model.c
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/builtins/cpu_model.c
  projects/clang390-import/contrib/compiler-rt/lib/esan/
     - copied from r305361, vendor/compiler-rt/dist/lib/esan/
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingMerge.c
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/profile/InstrProfilingMerge.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingMergeFile.c
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/profile/InstrProfilingMergeFile.c
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux_s390.cc
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux_s390.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_linux_x86_64.S
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_termination.cc
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_termination.cc
  projects/clang390-import/contrib/compiler-rt/lib/scudo/
     - copied from r305361, vendor/compiler-rt/dist/lib/scudo/
  projects/clang390-import/contrib/compiler-rt/lib/stats/
     - copied from r305361, vendor/compiler-rt/dist/lib/stats/
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_debugging.cc
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/tsan/rtl/tsan_debugging.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_preinit.cc
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/tsan/rtl/tsan_preinit.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_proc.cc
     - copied unchanged from r305361, vendor/compiler-rt/dist/lib/tsan/rtl/tsan_rtl_proc.cc
  projects/clang390-import/lib/libclang_rt/stats/
  projects/clang390-import/lib/libclang_rt/stats/Makefile   (contents, props changed)
  projects/clang390-import/lib/libclang_rt/stats_client/
  projects/clang390-import/lib/libclang_rt/stats_client/Makefile   (contents, props changed)
Deleted:
  projects/clang390-import/contrib/compiler-rt/lib/esan/CMakeLists.txt
  projects/clang390-import/contrib/compiler-rt/lib/scudo/CMakeLists.txt
  projects/clang390-import/contrib/compiler-rt/lib/stats/CMakeLists.txt
Modified:
  projects/clang390-import/contrib/compiler-rt/LICENSE.TXT
  projects/clang390-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h
  projects/clang390-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h
  projects/clang390-import/contrib/compiler-rt/include/sanitizer/linux_syscall_hooks.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_activation.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.inc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_globals.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_init_version.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_internal.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_malloc_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_malloc_win.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_mapping.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_new_delete.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_poisoning.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_posix.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_report.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_report.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_rtl.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_stack.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_suppressions.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_thread.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_thread.h
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_win.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_win_dll_thunk.cc
  projects/clang390-import/contrib/compiler-rt/lib/asan/asan_win_dynamic_runtime_thunk.cc
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/adddf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/addsf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_dcmp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_fcmp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_idivmod.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_ldivmod.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_memcmp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_memcpy.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_memmove.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_memset.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_uidivmod.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/aeabi_uldivmod.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/bswapdi2.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/bswapsi2.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/clzdi2.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/clzsi2.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/comparesf2.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/divdf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/divmodsi4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/divsf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/divsi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/eqdf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/eqsf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/extendsfdf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/fixdfsivfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/fixsfsivfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/fixunsdfsivfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/fixunssfsivfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/floatsidfvfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/floatsisfvfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/floatunssidfvfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/floatunssisfvfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/gedf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/gesf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/gtdf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/gtsf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/ledf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/lesf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/ltdf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/ltsf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/modsi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/muldf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/mulsf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/nedf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/negdf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/negsf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/nesf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/restore_vfp_d8_d15_regs.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/save_vfp_d8_d15_regs.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/subdf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/subsf3vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/switch16.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/switch32.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/switch8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/switchu8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_add_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_add_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_and_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_and_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_max_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_max_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_min_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_min_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_nand_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_nand_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_or_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_or_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_sub_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_sub_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_umax_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_umax_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_umin_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_umin_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_xor_4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_fetch_and_xor_8.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/sync_synchronize.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/truncdfsf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/udivmodsi4.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/udivsi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/umodsi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/unorddf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/arm/unordsf2vfp.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/assembly.h
  projects/clang390-import/contrib/compiler-rt/lib/builtins/clear_cache.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/emutls.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/floatdidf.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/floattidf.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/floatundidf.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/floatuntidf.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/gcc_personality_v0.c
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/ashldi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/ashrdi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/divdi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/floatdidf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/floatdisf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/floatdixf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/floatundidf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/floatundisf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/floatundixf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/lshrdi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/moddi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/muldi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/udivdi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/i386/umoddi3.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/int_lib.h
  projects/clang390-import/contrib/compiler-rt/lib/builtins/ppc/restFP.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/ppc/saveFP.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/x86_64/floatundidf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/x86_64/floatundisf.S
  projects/clang390-import/contrib/compiler-rt/lib/builtins/x86_64/floatundixf.S
  projects/clang390-import/contrib/compiler-rt/lib/cfi/cfi.cc
  projects/clang390-import/contrib/compiler-rt/lib/dfsan/dfsan.cc
  projects/clang390-import/contrib/compiler-rt/lib/interception/interception_win.cc
  projects/clang390-import/contrib/compiler-rt/lib/interception/interception_win.h
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan.cc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan.h
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_allocator.cc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_common.cc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_common.h
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_common_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_flags.inc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_thread.cc
  projects/clang390-import/contrib/compiler-rt/lib/lsan/lsan_thread.h
  projects/clang390-import/contrib/compiler-rt/lib/msan/msan.cc
  projects/clang390-import/contrib/compiler-rt/lib/msan/msan.h
  projects/clang390-import/contrib/compiler-rt/lib/msan/msan_interceptors.cc
  projects/clang390-import/contrib/compiler-rt/lib/msan/msan_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/msan/msan_report.cc
  projects/clang390-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfData.inc
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfiling.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfiling.h
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingBuffer.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingFile.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingInternal.h
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingPlatformDarwin.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingPlatformOther.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingPort.h
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingUtil.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingUtil.h
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingValue.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/InstrProfilingWriter.c
  projects/clang390-import/contrib/compiler-rt/lib/profile/WindowsMMap.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_interface.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_internal.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_nolibc.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_deadlock_detector1.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_deadlock_detector_interface.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_interface_internal.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libc.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libc.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_list.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_common.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_quarantine.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
  projects/clang390-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_win.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/dd/dd_interceptors.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/go/test.c
  projects/clang390-import/contrib/compiler-rt/lib/tsan/go/tsan_go.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_defs.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_flags.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_flags.inc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_libdispatch_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_malloc_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_mman.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_mman.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_mutex.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_mutex.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_report.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_report.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_stat.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_stat.h
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_sync.cc
  projects/clang390-import/contrib/compiler-rt/lib/tsan/rtl/tsan_sync.h
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_diag.cc
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_flags.cc
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.h
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers_cxx.cc
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers_cxx.h
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_platform.h
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_type_hash.h
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cc
  projects/clang390-import/contrib/compiler-rt/lib/ubsan/ubsan_value.cc
  projects/clang390-import/lib/libclang_rt/Makefile
  projects/clang390-import/lib/libclang_rt/Makefile.inc
  projects/clang390-import/lib/libclang_rt/asan-preinit/Makefile
  projects/clang390-import/lib/libclang_rt/asan/Makefile
  projects/clang390-import/lib/libclang_rt/asan_cxx/Makefile
  projects/clang390-import/lib/libclang_rt/asan_dynamic/Makefile
  projects/clang390-import/lib/libclang_rt/include/Makefile
  projects/clang390-import/lib/libclang_rt/profile/Makefile
  projects/clang390-import/lib/libclang_rt/safestack/Makefile
  projects/clang390-import/lib/libclang_rt/ubsan_standalone/Makefile
  projects/clang390-import/lib/libclang_rt/ubsan_standalone_cxx/Makefile
  projects/clang390-import/lib/libcompiler_rt/Makefile
Directory Properties:
  projects/clang390-import/contrib/compiler-rt/   (props changed)

Modified: projects/clang390-import/contrib/compiler-rt/LICENSE.TXT
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/LICENSE.TXT	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/LICENSE.TXT	Sat Sep  3 21:41:29 2016	(r305364)
@@ -14,7 +14,7 @@ Full text of the relevant licenses is in
 University of Illinois/NCSA
 Open Source License
 
-Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
+Copyright (c) 2009-2016 by the contributors listed in CREDITS.TXT
 
 All rights reserved.
 

Modified: projects/clang390-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/include/sanitizer/allocator_interface.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -59,6 +59,23 @@ extern "C" {
        deallocation of "ptr". */
   void __sanitizer_malloc_hook(const volatile void *ptr, size_t size);
   void __sanitizer_free_hook(const volatile void *ptr);
+
+  /* Installs a pair of hooks for malloc/free.
+     Several (currently, 5) hook pairs may be installed, they are executed
+     in the order they were installed and after calling
+     __sanitizer_malloc_hook/__sanitizer_free_hook.
+     Unlike __sanitizer_malloc_hook/__sanitizer_free_hook these hooks can be
+     chained and do not rely on weak symbols working on the platform, but
+     require __sanitizer_install_malloc_and_free_hooks to be called at startup
+     and thus will not be called on malloc/free very early in the process.
+     Returns the number of hooks currently installed or 0 on failure.
+     Not thread-safe, should be called in the main thread before starting
+     other threads.
+  */
+  int __sanitizer_install_malloc_and_free_hooks(
+      void (*malloc_hook)(const volatile void *, size_t),
+      void (*free_hook)(const volatile void *));
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif

Modified: projects/clang390-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/include/sanitizer/common_interface_defs.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -41,6 +41,9 @@ extern "C" {
 
   // Tell the tools to write their reports to "path.<pid>" instead of stderr.
   void __sanitizer_set_report_path(const char *path);
+  // Tell the tools to write their reports to the provided file descriptor
+  // (casted to void *).
+  void __sanitizer_set_report_fd(void *fd);
 
   // Notify the tools that the sandbox is going to be turned on. The reserved
   // parameter will be used in the future to hold a structure with functions
@@ -128,8 +131,45 @@ extern "C" {
                                     const void *s2, size_t n, int result);
   void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1,
                                     const char *s2, size_t n, int result);
+  void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1,
+                                         const char *s2, size_t n, int result);
   void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1,
                                     const char *s2, int result);
+  void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1,
+                                        const char *s2, int result);
+  void __sanitizer_weak_hook_strstr(void *called_pc, const char *s1,
+                                    const char *s2, char *result);
+  void __sanitizer_weak_hook_strcasestr(void *called_pc, const char *s1,
+                                        const char *s2, char *result);
+  void __sanitizer_weak_hook_memmem(void *called_pc,
+                                    const void *s1, size_t len1,
+                                    const void *s2, size_t len2, void *result);
+
+  // Prints stack traces for all live heap allocations ordered by total
+  // allocation size until `top_percent` of total live heap is shown.
+  // `top_percent` should be between 1 and 100.
+  // Experimental feature currently available only with asan on Linux/x86_64.
+  void __sanitizer_print_memory_profile(size_t top_percent);
+
+  // Fiber annotation interface.
+  // Before switching to a different stack, one must call
+  // __sanitizer_start_switch_fiber with a pointer to the bottom of the
+  // destination stack and its size. When code starts running on the new stack,
+  // it must call __sanitizer_finish_switch_fiber to finalize the switch.
+  // The start_switch function takes a void** to store the current fake stack if
+  // there is one (it is needed when detect_stack_use_after_return is enabled).
+  // When restoring a stack, this pointer must be given to the finish_switch
+  // function. In most cases, this void* can be stored on the stack just before
+  // switching.  When leaving a fiber definitely, null must be passed as first
+  // argument to the start_switch function so that the fake stack is destroyed.
+  // If you do not want support for stack use-after-return detection, you can
+  // always pass null to these two functions.
+  // Note that the fake stack mechanism is disabled during fiber switch, so if a
+  // signal callback runs during the switch, it will not benefit from the stack
+  // use-after-return detection.
+  void __sanitizer_start_switch_fiber(void **fake_stack_save,
+                                      const void *bottom, size_t size);
+  void __sanitizer_finish_switch_fiber(void *fake_stack_save);
 #ifdef __cplusplus
 }  // extern "C"
 #endif

Copied: projects/clang390-import/contrib/compiler-rt/include/sanitizer/esan_interface.h (from r305361, vendor/compiler-rt/dist/include/sanitizer/esan_interface.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/clang390-import/contrib/compiler-rt/include/sanitizer/esan_interface.h	Sat Sep  3 21:41:29 2016	(r305364, copy of r305361, vendor/compiler-rt/dist/include/sanitizer/esan_interface.h)
@@ -0,0 +1,50 @@
+//===-- sanitizer/esan_interface.h ------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of EfficiencySanitizer, a family of performance tuners.
+//
+// Public interface header.
+//===----------------------------------------------------------------------===//
+#ifndef SANITIZER_ESAN_INTERFACE_H
+#define SANITIZER_ESAN_INTERFACE_H
+
+#include <sanitizer/common_interface_defs.h>
+
+// We declare our interface routines as weak to allow the user to avoid
+// ifdefs and instead use this pattern to allow building the same sources
+// with and without our runtime library:
+//     if (__esan_report)
+//       __esan_report();
+#ifdef _MSC_VER
+/* selectany is as close to weak as we'll get. */
+#define COMPILER_RT_WEAK __declspec(selectany)
+#elif __GNUC__
+#define COMPILER_RT_WEAK __attribute__((weak))
+#else
+#define COMPILER_RT_WEAK
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// This function can be called mid-run (or at the end of a run for
+// a server process that doesn't shut down normally) to request that
+// data for that point in the run be reported from the tool.
+void COMPILER_RT_WEAK __esan_report();
+
+// This function returns the number of samples that the esan tool has collected
+// to this point.  This is useful for testing.
+unsigned int COMPILER_RT_WEAK __esan_get_sample_count();
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // SANITIZER_ESAN_INTERFACE_H

Modified: projects/clang390-import/contrib/compiler-rt/include/sanitizer/linux_syscall_hooks.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/include/sanitizer/linux_syscall_hooks.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/include/sanitizer/linux_syscall_hooks.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -1835,6 +1835,17 @@
   __sanitizer_syscall_pre_impl_vfork()
 #define __sanitizer_syscall_post_vfork(res) \
   __sanitizer_syscall_post_impl_vfork(res)
+#define __sanitizer_syscall_pre_sigaction(signum, act, oldact)                 \
+  __sanitizer_syscall_pre_impl_sigaction((long)signum, (long)act, (long)oldact)
+#define __sanitizer_syscall_post_sigaction(res, signum, act, oldact)           \
+  __sanitizer_syscall_post_impl_sigaction(res, (long)signum, (long)act,        \
+                                          (long)oldact)
+#define __sanitizer_syscall_pre_rt_sigaction(signum, act, oldact, sz)          \
+  __sanitizer_syscall_pre_impl_rt_sigaction((long)signum, (long)act,           \
+                                            (long)oldact, (long)sz)
+#define __sanitizer_syscall_post_rt_sigaction(res, signum, act, oldact, sz)    \
+  __sanitizer_syscall_post_impl_rt_sigaction(res, (long)signum, (long)act,     \
+                                             (long)oldact, (long)sz)
 
 // And now a few syscalls we don't handle yet.
 #define __sanitizer_syscall_pre_afs_syscall(...)
@@ -1889,7 +1900,6 @@
 #define __sanitizer_syscall_pre_query_module(...)
 #define __sanitizer_syscall_pre_readahead(...)
 #define __sanitizer_syscall_pre_readdir(...)
-#define __sanitizer_syscall_pre_rt_sigaction(...)
 #define __sanitizer_syscall_pre_rt_sigreturn(...)
 #define __sanitizer_syscall_pre_rt_sigsuspend(...)
 #define __sanitizer_syscall_pre_security(...)
@@ -1903,7 +1913,6 @@
 #define __sanitizer_syscall_pre_setreuid32(...)
 #define __sanitizer_syscall_pre_set_thread_area(...)
 #define __sanitizer_syscall_pre_setuid32(...)
-#define __sanitizer_syscall_pre_sigaction(...)
 #define __sanitizer_syscall_pre_sigaltstack(...)
 #define __sanitizer_syscall_pre_sigreturn(...)
 #define __sanitizer_syscall_pre_sigsuspend(...)
@@ -1971,7 +1980,6 @@
 #define __sanitizer_syscall_post_query_module(res, ...)
 #define __sanitizer_syscall_post_readahead(res, ...)
 #define __sanitizer_syscall_post_readdir(res, ...)
-#define __sanitizer_syscall_post_rt_sigaction(res, ...)
 #define __sanitizer_syscall_post_rt_sigreturn(res, ...)
 #define __sanitizer_syscall_post_rt_sigsuspend(res, ...)
 #define __sanitizer_syscall_post_security(res, ...)
@@ -1985,7 +1993,6 @@
 #define __sanitizer_syscall_post_setreuid32(res, ...)
 #define __sanitizer_syscall_post_set_thread_area(res, ...)
 #define __sanitizer_syscall_post_setuid32(res, ...)
-#define __sanitizer_syscall_post_sigaction(res, ...)
 #define __sanitizer_syscall_post_sigaltstack(res, ...)
 #define __sanitizer_syscall_post_sigreturn(res, ...)
 #define __sanitizer_syscall_post_sigsuspend(res, ...)
@@ -3062,7 +3069,13 @@ void __sanitizer_syscall_pre_impl_fork()
 void __sanitizer_syscall_post_impl_fork(long res);
 void __sanitizer_syscall_pre_impl_vfork();
 void __sanitizer_syscall_post_impl_vfork(long res);
-
+void __sanitizer_syscall_pre_impl_sigaction(long signum, long act, long oldact);
+void __sanitizer_syscall_post_impl_sigaction(long res, long signum, long act,
+                                             long oldact);
+void __sanitizer_syscall_pre_impl_rt_sigaction(long signum, long act,
+                                               long oldact, long sz);
+void __sanitizer_syscall_post_impl_rt_sigaction(long res, long signum, long act,
+                                                long oldact, long sz);
 #ifdef __cplusplus
 }  // extern "C"
 #endif

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_activation.cc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_activation.cc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_activation.cc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -47,6 +47,7 @@ static struct AsanDeactivatedFlags {
     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;
@@ -61,7 +62,7 @@ static struct AsanDeactivatedFlags {
       parser.ParseString(env);
     }
 
-    SetVerbosity(cf.verbosity);
+    InitializeCommonFlags(&cf);
 
     if (Verbosity()) ReportUnrecognizedFlags();
 

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.cc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.cc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.cc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -223,7 +223,7 @@ void AllocatorOptions::CopyTo(Flags *f, 
 
 struct Allocator {
   static const uptr kMaxAllowedMallocSize =
-      FIRST_32_SECOND_64(3UL << 30, 1UL << 40);
+      FIRST_32_SECOND_64(3UL << 30, 1ULL << 40);
   static const uptr kMaxThreadLocalQuarantine =
       FIRST_32_SECOND_64(1 << 18, 1 << 20);
 
@@ -457,29 +457,28 @@ struct Allocator {
     return res;
   }
 
-  void AtomicallySetQuarantineFlag(AsanChunk *m, void *ptr,
+  // Set quarantine flag if chunk is allocated, issue ASan error report on
+  // available and quarantined chunks. Return true on success, false otherwise.
+  bool AtomicallySetQuarantineFlagIfAllocated(AsanChunk *m, void *ptr,
                                    BufferedStackTrace *stack) {
     u8 old_chunk_state = CHUNK_ALLOCATED;
     // Flip the chunk_state atomically to avoid race on double-free.
-    if (!atomic_compare_exchange_strong((atomic_uint8_t*)m, &old_chunk_state,
-                                        CHUNK_QUARANTINE, memory_order_acquire))
+    if (!atomic_compare_exchange_strong((atomic_uint8_t *)m, &old_chunk_state,
+                                        CHUNK_QUARANTINE,
+                                        memory_order_acquire)) {
       ReportInvalidFree(ptr, old_chunk_state, stack);
+      // It's not safe to push a chunk in quarantine on invalid free.
+      return false;
+    }
     CHECK_EQ(CHUNK_ALLOCATED, old_chunk_state);
+    return true;
   }
 
   // Expects the chunk to already be marked as quarantined by using
-  // AtomicallySetQuarantineFlag.
+  // AtomicallySetQuarantineFlagIfAllocated.
   void QuarantineChunk(AsanChunk *m, void *ptr, BufferedStackTrace *stack,
                        AllocType alloc_type) {
     CHECK_EQ(m->chunk_state, CHUNK_QUARANTINE);
-
-    if (m->alloc_type != alloc_type) {
-      if (atomic_load(&alloc_dealloc_mismatch, memory_order_acquire)) {
-        ReportAllocTypeMismatch((uptr)ptr, stack, (AllocType)m->alloc_type,
-                                (AllocType)alloc_type);
-      }
-    }
-
     CHECK_GE(m->alloc_tid, 0);
     if (SANITIZER_WORDSIZE == 64)  // On 32-bits this resides in user area.
       CHECK_EQ(m->free_tid, kInvalidTid);
@@ -516,13 +515,24 @@ struct Allocator {
 
     uptr chunk_beg = p - kChunkHeaderSize;
     AsanChunk *m = reinterpret_cast<AsanChunk *>(chunk_beg);
+
+    ASAN_FREE_HOOK(ptr);
+    // Must mark the chunk as quarantined before any changes to its metadata.
+    // Do not quarantine given chunk if we failed to set CHUNK_QUARANTINE flag.
+    if (!AtomicallySetQuarantineFlagIfAllocated(m, ptr, stack)) return;
+
+    if (m->alloc_type != alloc_type) {
+      if (atomic_load(&alloc_dealloc_mismatch, memory_order_acquire)) {
+        ReportAllocTypeMismatch((uptr)ptr, stack, (AllocType)m->alloc_type,
+                                (AllocType)alloc_type);
+      }
+    }
+
     if (delete_size && flags()->new_delete_type_mismatch &&
         delete_size != m->UsedSize()) {
-      ReportNewDeleteSizeMismatch(p, delete_size, stack);
+      ReportNewDeleteSizeMismatch(p, m->UsedSize(), delete_size, stack);
     }
-    ASAN_FREE_HOOK(ptr);
-    // Must mark the chunk as quarantined before any changes to its metadata.
-    AtomicallySetQuarantineFlag(m, ptr, stack);
+
     QuarantineChunk(m, ptr, stack, alloc_type);
   }
 
@@ -655,6 +665,9 @@ static AsanAllocator &get_allocator() {
 bool AsanChunkView::IsValid() {
   return chunk_ && chunk_->chunk_state != CHUNK_AVAILABLE;
 }
+bool AsanChunkView::IsAllocated() {
+  return chunk_ && chunk_->chunk_state == CHUNK_ALLOCATED;
+}
 uptr AsanChunkView::Beg() { return chunk_->Beg(); }
 uptr AsanChunkView::End() { return Beg() + UsedSize(); }
 uptr AsanChunkView::UsedSize() { return chunk_->UsedSize(); }
@@ -668,12 +681,15 @@ static StackTrace GetStackTraceFromId(u3
   return res;
 }
 
+u32 AsanChunkView::GetAllocStackId() { return chunk_->alloc_context_id; }
+u32 AsanChunkView::GetFreeStackId() { return chunk_->free_context_id; }
+
 StackTrace AsanChunkView::GetAllocStack() {
-  return GetStackTraceFromId(chunk_->alloc_context_id);
+  return GetStackTraceFromId(GetAllocStackId());
 }
 
 StackTrace AsanChunkView::GetFreeStack() {
-  return GetStackTraceFromId(chunk_->free_context_id);
+  return GetStackTraceFromId(GetFreeStackId());
 }
 
 void InitializeAllocator(const AllocatorOptions &options) {
@@ -754,7 +770,7 @@ int asan_posix_memalign(void **memptr, u
   return 0;
 }
 
-uptr asan_malloc_usable_size(void *ptr, uptr pc, uptr bp) {
+uptr asan_malloc_usable_size(const void *ptr, uptr pc, uptr bp) {
   if (!ptr) return 0;
   uptr usable_size = instance.AllocationSize(reinterpret_cast<uptr>(ptr));
   if (flags()->check_malloc_usable_size && (usable_size == 0)) {

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_allocator.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -49,14 +49,17 @@ void GetAllocatorOptions(AllocatorOption
 class AsanChunkView {
  public:
   explicit AsanChunkView(AsanChunk *chunk) : chunk_(chunk) {}
-  bool IsValid();   // Checks if AsanChunkView points to a valid allocated
-                    // or quarantined chunk.
-  uptr Beg();       // First byte of user memory.
-  uptr End();       // Last byte of user memory.
-  uptr UsedSize();  // Size requested by the user.
+  bool IsValid();        // Checks if AsanChunkView points to a valid allocated
+                         // or quarantined chunk.
+  bool IsAllocated();    // Checks if the memory is currently allocated.
+  uptr Beg();            // First byte of user memory.
+  uptr End();            // Last byte of user memory.
+  uptr UsedSize();       // Size requested by the user.
   uptr AllocTid();
   uptr FreeTid();
   bool Eq(const AsanChunkView &c) const { return chunk_ == c.chunk_; }
+  u32 GetAllocStackId();
+  u32 GetFreeStackId();
   StackTrace GetAllocStack();
   StackTrace GetFreeStack();
   bool AddrIsInside(uptr addr, uptr access_size, sptr *offset) {
@@ -171,7 +174,7 @@ void *asan_pvalloc(uptr size, BufferedSt
 
 int asan_posix_memalign(void **memptr, uptr alignment, uptr size,
                         BufferedStackTrace *stack);
-uptr asan_malloc_usable_size(void *ptr, uptr pc, uptr bp);
+uptr asan_malloc_usable_size(const void *ptr, uptr pc, uptr bp);
 
 uptr asan_mz_size(const void *ptr);
 void asan_mz_force_lock();

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -31,7 +31,7 @@ ALWAYS_INLINE void SetShadow(uptr ptr, u
   CHECK_EQ(SHADOW_SCALE, 3);  // This code expects SHADOW_SCALE=3.
   u64 *shadow = reinterpret_cast<u64*>(MemToShadow(ptr));
   if (class_id <= 6) {
-    for (uptr i = 0; i < (1U << class_id); i++) {
+    for (uptr i = 0; i < (((uptr)1) << class_id); i++) {
       shadow[i] = magic;
       // Make sure this does not become memset.
       SanitizerBreakOptimization(nullptr);
@@ -121,7 +121,7 @@ uptr FakeStack::AddrIsInFakeStack(uptr p
   uptr class_id = (ptr - beg) >> stack_size_log;
   uptr base = beg + (class_id << stack_size_log);
   CHECK_LE(base, ptr);
-  CHECK_LT(ptr, base + (1UL << stack_size_log));
+  CHECK_LT(ptr, base + (((uptr)1) << stack_size_log));
   uptr pos = (ptr - base) >> (kMinStackFrameSizeLog + class_id);
   uptr res = base + pos * BytesInSizeClass(class_id);
   *frame_end = res + BytesInSizeClass(class_id);

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_fake_stack.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -69,12 +69,12 @@ class FakeStack {
 
   // stack_size_log is at least 15 (stack_size >= 32K).
   static uptr SizeRequiredForFlags(uptr stack_size_log) {
-    return 1UL << (stack_size_log + 1 - kMinStackFrameSizeLog);
+    return ((uptr)1) << (stack_size_log + 1 - kMinStackFrameSizeLog);
   }
 
   // Each size class occupies stack_size bytes.
   static uptr SizeRequiredForFrames(uptr stack_size_log) {
-    return (1ULL << stack_size_log) * kNumberOfSizeClasses;
+    return (((uptr)1) << stack_size_log) * kNumberOfSizeClasses;
   }
 
   // Number of bytes requires for the whole object.
@@ -91,12 +91,12 @@ class FakeStack {
   // and so on.
   static uptr FlagsOffset(uptr stack_size_log, uptr class_id) {
     uptr t = kNumberOfSizeClasses - 1 - class_id;
-    const uptr all_ones = (1 << (kNumberOfSizeClasses - 1)) - 1;
+    const uptr all_ones = (((uptr)1) << (kNumberOfSizeClasses - 1)) - 1;
     return ((all_ones >> t) << t) << (stack_size_log - 15);
   }
 
   static uptr NumberOfFrames(uptr stack_size_log, uptr class_id) {
-    return 1UL << (stack_size_log - kMinStackFrameSizeLog - class_id);
+    return ((uptr)1) << (stack_size_log - kMinStackFrameSizeLog - class_id);
   }
 
   // Divide n by the numbe of frames in size class.
@@ -114,7 +114,8 @@ class FakeStack {
   u8 *GetFrame(uptr stack_size_log, uptr class_id, uptr pos) {
     return reinterpret_cast<u8 *>(this) + kFlagsOffset +
            SizeRequiredForFlags(stack_size_log) +
-           (1 << stack_size_log) * class_id + BytesInSizeClass(class_id) * pos;
+           (((uptr)1) << stack_size_log) * class_id +
+           BytesInSizeClass(class_id) * pos;
   }
 
   // Allocate the fake frame.
@@ -137,7 +138,7 @@ class FakeStack {
 
   // Number of bytes in a fake frame of this size class.
   static uptr BytesInSizeClass(uptr class_id) {
-    return 1UL << (class_id + kMinStackFrameSizeLog);
+    return ((uptr)1) << (class_id + kMinStackFrameSizeLog);
   }
 
   // The fake frame is guaranteed to have a right redzone.
@@ -159,7 +160,7 @@ class FakeStack {
   static const uptr kFlagsOffset = 4096;  // This is were the flags begin.
   // Must match the number of uses of DEFINE_STACK_MALLOC_FREE_WITH_CLASS_ID
   COMPILER_CHECK(kNumberOfSizeClasses == 11);
-  static const uptr kMaxStackMallocSize = 1 << kMaxStackFrameSizeLog;
+  static const uptr kMaxStackMallocSize = ((uptr)1) << kMaxStackFrameSizeLog;
 
   uptr hint_position_[kNumberOfSizeClasses];
   uptr stack_size_log_;

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.cc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.cc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.cc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -116,7 +116,7 @@ void InitializeFlags() {
   ubsan_parser.ParseString(GetEnv("UBSAN_OPTIONS"));
 #endif
 
-  SetVerbosity(common_flags()->verbosity);
+  InitializeCommonFlags();
 
   // TODO(eugenis): dump all flags at verbosity>=2?
   if (Verbosity()) ReportUnrecognizedFlags();
@@ -159,6 +159,14 @@ void InitializeFlags() {
         (ASAN_LOW_MEMORY) ? 1UL << 6 : 1UL << 8;
     f->quarantine_size_mb = kDefaultQuarantineSizeMb;
   }
+  if (!f->replace_str && common_flags()->intercept_strlen) {
+    Report("WARNING: strlen interceptor is enabled even though replace_str=0. "
+           "Use intercept_strlen=0 to disable it.");
+  }
+  if (!f->replace_str && common_flags()->intercept_strchr) {
+    Report("WARNING: strchr* interceptors are enabled even though "
+           "replace_str=0. Use intercept_strchr=0 to disable them.");
+  }
 }
 
 }  // namespace __asan

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.inc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.inc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_flags.inc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -43,7 +43,7 @@ ASAN_FLAG(
     "If set, uses custom wrappers and replacements for libc string functions "
     "to find more errors.")
 ASAN_FLAG(bool, replace_intrin, true,
-          "If set, uses custom wrappers for memset/memcpy/memmove intinsics.")
+          "If set, uses custom wrappers for memset/memcpy/memmove intrinsics.")
 ASAN_FLAG(bool, detect_stack_use_after_return, false,
           "Enables stack-use-after-return checking at run-time.")
 ASAN_FLAG(int, min_uar_stack_size_log, 16, // We can't do smaller anyway.
@@ -77,6 +77,8 @@ ASAN_FLAG(bool, print_stats, false,
           "Print various statistics after printing an error message or if "
           "atexit=1.")
 ASAN_FLAG(bool, print_legend, true, "Print the legend for the shadow bytes.")
+ASAN_FLAG(bool, print_scariness, false,
+          "Print the scariness score. Experimental.")
 ASAN_FLAG(bool, atexit, false,
           "If set, prints ASan exit stats even after program terminates "
           "successfully.")
@@ -104,7 +106,7 @@ ASAN_FLAG(bool, alloc_dealloc_mismatch,
           "Report errors on malloc/delete, new/free, new/delete[], etc.")
 
 ASAN_FLAG(bool, new_delete_type_mismatch, true,
-          "Report errors on mismatch betwen size of new and delete.")
+          "Report errors on mismatch between size of new and delete.")
 ASAN_FLAG(
     bool, strict_init_order, false,
     "If true, assume that dynamic initializers can never access globals from "
@@ -135,3 +137,5 @@ ASAN_FLAG(const char *, suppressions, ""
 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")

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_globals.cc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_globals.cc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_globals.cc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -135,6 +135,70 @@ bool GetInfoForAddressIfGlobal(uptr addr
   return false;
 }
 
+enum GlobalSymbolState {
+  UNREGISTERED = 0,
+  REGISTERED = 1
+};
+
+// Check ODR violation for given global G via special ODR indicator. We use
+// this method in case compiler instruments global variables through their
+// local aliases.
+static void CheckODRViolationViaIndicator(const Global *g) {
+  u8 *odr_indicator = reinterpret_cast<u8 *>(g->odr_indicator);
+  if (*odr_indicator == UNREGISTERED) {
+    *odr_indicator = REGISTERED;
+    return;
+  }
+  // If *odr_indicator is DEFINED, some module have already registered
+  // externally visible symbol with the same name. This is an ODR violation.
+  for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
+    if (g->odr_indicator == l->g->odr_indicator &&
+        (flags()->detect_odr_violation >= 2 || g->size != l->g->size) &&
+        !IsODRViolationSuppressed(g->name))
+      ReportODRViolation(g, FindRegistrationSite(g),
+                         l->g, FindRegistrationSite(l->g));
+  }
+}
+
+// Check ODR violation for given global G by checking if it's already poisoned.
+// We use this method in case compiler doesn't use private aliases for global
+// variables.
+static void CheckODRViolationViaPoisoning(const Global *g) {
+  if (__asan_region_is_poisoned(g->beg, g->size_with_redzone)) {
+    // This check may not be enough: if the first global is much larger
+    // the entire redzone of the second global may be within the first global.
+    for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
+      if (g->beg == l->g->beg &&
+          (flags()->detect_odr_violation >= 2 || g->size != l->g->size) &&
+          !IsODRViolationSuppressed(g->name))
+        ReportODRViolation(g, FindRegistrationSite(g),
+                           l->g, FindRegistrationSite(l->g));
+    }
+  }
+}
+
+// Clang provides two different ways for global variables protection:
+// it can poison the global itself or its private alias. In former
+// case we may poison same symbol multiple times, that can help us to
+// cheaply detect ODR violation: if we try to poison an already poisoned
+// global, we have ODR violation error.
+// In latter case, we poison each symbol exactly once, so we use special
+// indicator symbol to perform similar check.
+// In either case, compiler provides a special odr_indicator field to Global
+// structure, that can contain two kinds of values:
+//   1) Non-zero value. In this case, odr_indicator is an address of
+//      corresponding indicator variable for given global.
+//   2) Zero. This means that we don't use private aliases for global variables
+//      and can freely check ODR violation with the first method.
+//
+// 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;
+}
+
 // Register a global variable.
 // This function may be called more than once for every global
 // so we store the globals in a map.
@@ -144,22 +208,24 @@ static void RegisterGlobal(const Global 
     ReportGlobal(*g, "Added");
   CHECK(flags()->report_globals);
   CHECK(AddrIsInMem(g->beg));
-  CHECK(AddrIsAlignedByGranularity(g->beg));
+  if (!AddrIsAlignedByGranularity(g->beg)) {
+    Report("The following global variable is not properly aligned.\n");
+    Report("This may happen if another global with the same name\n");
+    Report("resides in another non-instrumented module.\n");
+    Report("Or the global comes from a C file built w/o -fno-common.\n");
+    Report("In either case this is likely an ODR violation bug,\n");
+    Report("but AddressSanitizer can not provide more details.\n");
+    ReportODRViolation(g, FindRegistrationSite(g), g, FindRegistrationSite(g));
+    CHECK(AddrIsAlignedByGranularity(g->beg));
+  }
   CHECK(AddrIsAlignedByGranularity(g->size_with_redzone));
   if (flags()->detect_odr_violation) {
     // Try detecting ODR (One Definition Rule) violation, i.e. the situation
     // where two globals with the same name are defined in different modules.
-    if (__asan_region_is_poisoned(g->beg, g->size_with_redzone)) {
-      // This check may not be enough: if the first global is much larger
-      // the entire redzone of the second global may be within the first global.
-      for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
-        if (g->beg == l->g->beg &&
-            (flags()->detect_odr_violation >= 2 || g->size != l->g->size) &&
-            !IsODRViolationSuppressed(g->name))
-          ReportODRViolation(g, FindRegistrationSite(g),
-                             l->g, FindRegistrationSite(l->g));
-      }
-    }
+    if (UseODRIndicator(g))
+      CheckODRViolationViaIndicator(g);
+    else
+      CheckODRViolationViaPoisoning(g);
   }
   if (CanPoisonMemory())
     PoisonRedZones(*g);
@@ -190,6 +256,12 @@ static void UnregisterGlobal(const Globa
   // We unpoison the shadow memory for the global but we do not remove it from
   // the list because that would require O(n^2) time with the current list
   // implementation. It might not be worth doing anyway.
+
+  // Release ODR indicator.
+  if (UseODRIndicator(g)) {
+    u8 *odr_indicator = reinterpret_cast<u8 *>(g->odr_indicator);
+    *odr_indicator = UNREGISTERED;
+  }
 }
 
 void StopInitOrderChecking() {
@@ -212,6 +284,25 @@ void StopInitOrderChecking() {
 // ---------------------- Interface ---------------- {{{1
 using namespace __asan;  // NOLINT
 
+
+// Apply __asan_register_globals to all globals found in the same loaded
+// executable or shared library as `flag'. The flag tracks whether globals have
+// already been registered or not for this image.
+void __asan_register_image_globals(uptr *flag) {
+  if (*flag)
+    return;
+  AsanApplyToGlobals(__asan_register_globals, flag);
+  *flag = 1;
+}
+
+// This mirrors __asan_register_image_globals.
+void __asan_unregister_image_globals(uptr *flag) {
+  if (!*flag)
+    return;
+  AsanApplyToGlobals(__asan_unregister_globals, flag);
+  *flag = 0;
+}
+
 // Register an array of globals.
 void __asan_register_globals(__asan_global *globals, uptr n) {
   if (!flags()->report_globals) return;

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_init_version.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_init_version.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_init_version.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -19,16 +19,20 @@ extern "C" {
   // Every time the ASan ABI changes we also change the version number in the
   // __asan_init function name.  Objects built with incompatible ASan ABI
   // versions will not link with run-time.
+  //
   // Changes between ABI versions:
   // v1=>v2: added 'module_name' to __asan_global
   // v2=>v3: stack frame description (created by the compiler)
-  //         contains the function PC as the 3-rd field (see
-  //         DescribeAddressIfStack).
-  // v3=>v4: added '__asan_global_source_location' to __asan_global.
+  //         contains the function PC as the 3rd field (see
+  //         DescribeAddressIfStack)
+  // v3=>v4: added '__asan_global_source_location' to __asan_global
   // v4=>v5: changed the semantics and format of __asan_stack_malloc_ and
-  //         __asan_stack_free_ functions.
+  //         __asan_stack_free_ functions
   // v5=>v6: changed the name of the version check symbol
-  #define __asan_version_mismatch_check __asan_version_mismatch_check_v6
+  // v6=>v7: added 'odr_indicator' to __asan_global
+  // v7=>v8: added '__asan_(un)register_image_globals' functions for dead
+  //         stripping support on Mach-O platforms
+  #define __asan_version_mismatch_check __asan_version_mismatch_check_v8
 }
 
 #endif  // ASAN_INIT_VERSION_H

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc	Sat Sep  3 21:41:29 2016	(r305364)
@@ -21,6 +21,7 @@
 #include "asan_stack.h"
 #include "asan_stats.h"
 #include "asan_suppressions.h"
+#include "lsan/lsan_common.h"
 #include "sanitizer_common/sanitizer_libc.h"
 
 #if SANITIZER_POSIX
@@ -110,7 +111,7 @@ static inline bool RangesOverlap(const c
 } while (0)
 
 static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) {
-#if ASAN_INTERCEPT_STRNLEN
+#if SANITIZER_INTERCEPT_STRNLEN
   if (REAL(strnlen)) {
     return REAL(strnlen)(s, maxlen);
   }
@@ -143,6 +144,8 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free,
   (void) ctx;                                                                  \
 
 #define COMMON_INTERCEPT_FUNCTION(name) ASAN_INTERCEPT_FUNC(name)
+#define COMMON_INTERCEPT_FUNCTION_VER(name, ver)                          \
+  ASAN_INTERCEPT_FUNC_VER(name, ver)
 #define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \
   ASAN_WRITE_RANGE(ctx, ptr, size)
 #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) \
@@ -195,6 +198,10 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free,
   } else {                                                                     \
     *begin = *end = 0;                                                         \
   }
+// Asan needs custom handling of these:
+#undef SANITIZER_INTERCEPT_MEMSET
+#undef SANITIZER_INTERCEPT_MEMMOVE
+#undef SANITIZER_INTERCEPT_MEMCPY
 #include "sanitizer_common/sanitizer_common_interceptors.inc"
 
 // Syscall interceptors don't have contexts, we don't support suppressions
@@ -218,6 +225,7 @@ struct ThreadStartParam {
   atomic_uintptr_t is_registered;
 };
 
+#if ASAN_INTERCEPT_PTHREAD_CREATE
 static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) {
   ThreadStartParam *param = reinterpret_cast<ThreadStartParam *>(arg);
   AsanThread *t = nullptr;
@@ -228,7 +236,6 @@ static thread_return_t THREAD_CALLING_CO
   return t->ThreadStart(GetTid(), &param->is_registered);
 }
 
-#if ASAN_INTERCEPT_PTHREAD_CREATE
 INTERCEPTOR(int, pthread_create, void *thread,
     void *attr, void *(*start_routine)(void*), void *arg) {
   EnsureMainThreadIDIsCorrect();
@@ -242,7 +249,17 @@ INTERCEPTOR(int, pthread_create, void *t
   ThreadStartParam param;
   atomic_store(&param.t, 0, memory_order_relaxed);
   atomic_store(&param.is_registered, 0, memory_order_relaxed);
-  int result = REAL(pthread_create)(thread, attr, asan_thread_start, &param);
+  int result;
+  {
+    // Ignore all allocations made by pthread_create: thread stack/TLS may be
+    // stored by pthread for future reuse even after thread destruction, and
+    // the linked list it's stored in doesn't even hold valid pointers to the
+    // objects, the latter are calculated by obscure pointer arithmetic.
+#if CAN_SANITIZE_LEAKS
+    __lsan::ScopedInterceptorDisabler disabler;
+#endif
+    result = REAL(pthread_create)(thread, attr, asan_thread_start, &param);
+  }
   if (result == 0) {
     u32 current_tid = GetCurrentTidOrInvalid();
     AsanThread *t =
@@ -271,7 +288,8 @@ DEFINE_REAL_PTHREAD_FUNCTIONS
 
 #if SANITIZER_ANDROID
 INTERCEPTOR(void*, bsd_signal, int signum, void *handler) {
-  if (!IsDeadlySignal(signum) || common_flags()->allow_user_segv_handler) {
+  if (!IsHandledDeadlySignal(signum) ||
+      common_flags()->allow_user_segv_handler) {
     return REAL(bsd_signal)(signum, handler);
   }
   return 0;
@@ -279,7 +297,8 @@ INTERCEPTOR(void*, bsd_signal, int signu
 #endif
 
 INTERCEPTOR(void*, signal, int signum, void *handler) {
-  if (!IsDeadlySignal(signum) || common_flags()->allow_user_segv_handler) {
+  if (!IsHandledDeadlySignal(signum) ||
+      common_flags()->allow_user_segv_handler) {
     return REAL(signal)(signum, handler);
   }
   return nullptr;
@@ -287,7 +306,8 @@ INTERCEPTOR(void*, signal, int signum, v
 
 INTERCEPTOR(int, sigaction, int signum, const struct sigaction *act,
                             struct sigaction *oldact) {
-  if (!IsDeadlySignal(signum) || common_flags()->allow_user_segv_handler) {
+  if (!IsHandledDeadlySignal(signum) ||
+      common_flags()->allow_user_segv_handler) {
     return REAL(sigaction)(signum, act, oldact);
   }
   return 0;
@@ -453,25 +473,6 @@ INTERCEPTOR(void*, memset, void *block, 
   ASAN_MEMSET_IMPL(ctx, block, c, size);
 }
 
-INTERCEPTOR(char*, strchr, const char *str, int c) {
-  void *ctx;
-  ASAN_INTERCEPTOR_ENTER(ctx, strchr);
-  if (UNLIKELY(!asan_inited)) return internal_strchr(str, c);
-  // strchr is called inside create_purgeable_zone() when MallocGuardEdges=1 is
-  // used.
-  if (asan_init_is_running) {
-    return REAL(strchr)(str, c);
-  }
-  ENSURE_ASAN_INITED();
-  char *result = REAL(strchr)(str, c);
-  if (flags()->replace_str) {
-    uptr len = REAL(strlen)(str);
-    uptr bytes_read = (result ? result - str : len) + 1;
-    ASAN_READ_STRING_OF_LEN(ctx, str, len, bytes_read);
-  }
-  return result;
-}
-
 #if ASAN_INTERCEPT_INDEX
 # if ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX
 INTERCEPTOR(char*, index, const char *string, int c)
@@ -549,7 +550,6 @@ INTERCEPTOR(char*, strcpy, char *to, con
   return REAL(strcpy)(to, from);  // NOLINT
 }
 
-#if ASAN_INTERCEPT_STRDUP
 INTERCEPTOR(char*, strdup, const char *s) {
   void *ctx;
   ASAN_INTERCEPTOR_ENTER(ctx, strdup);
@@ -564,29 +564,28 @@ INTERCEPTOR(char*, strdup, const char *s
   REAL(memcpy)(new_mem, s, length + 1);
   return reinterpret_cast<char*>(new_mem);
 }
-#endif
 
-INTERCEPTOR(SIZE_T, strlen, const char *s) {
+#if ASAN_INTERCEPT___STRDUP
+INTERCEPTOR(char*, __strdup, const char *s) {
   void *ctx;
-  ASAN_INTERCEPTOR_ENTER(ctx, strlen);
-  if (UNLIKELY(!asan_inited)) return internal_strlen(s);
-  // strlen is called from malloc_default_purgeable_zone()
-  // in __asan::ReplaceSystemAlloc() on Mac.
-  if (asan_init_is_running) {
-    return REAL(strlen)(s);
-  }
+  ASAN_INTERCEPTOR_ENTER(ctx, strdup);
+  if (UNLIKELY(!asan_inited)) return internal_strdup(s);
   ENSURE_ASAN_INITED();
-  SIZE_T length = REAL(strlen)(s);
+  uptr length = REAL(strlen)(s);
   if (flags()->replace_str) {
     ASAN_READ_RANGE(ctx, s, length + 1);
   }
-  return length;
+  GET_STACK_TRACE_MALLOC;
+  void *new_mem = asan_malloc(length + 1, &stack);
+  REAL(memcpy)(new_mem, s, length + 1);
+  return reinterpret_cast<char*>(new_mem);
 }
+#endif // ASAN_INTERCEPT___STRDUP
 
 INTERCEPTOR(SIZE_T, wcslen, const wchar_t *s) {
   void *ctx;
   ASAN_INTERCEPTOR_ENTER(ctx, wcslen);
-  SIZE_T length = REAL(wcslen)(s);
+  SIZE_T length = internal_wcslen(s);
   if (!asan_init_is_running) {
     ENSURE_ASAN_INITED();
     ASAN_READ_RANGE(ctx, s, (length + 1) * sizeof(wchar_t));
@@ -607,19 +606,6 @@ INTERCEPTOR(char*, strncpy, char *to, co
   return REAL(strncpy)(to, from, size);
 }
 
-#if ASAN_INTERCEPT_STRNLEN
-INTERCEPTOR(uptr, strnlen, const char *s, uptr maxlen) {
-  void *ctx;
-  ASAN_INTERCEPTOR_ENTER(ctx, strnlen);
-  ENSURE_ASAN_INITED();
-  uptr length = REAL(strnlen)(s, maxlen);
-  if (flags()->replace_str) {
-    ASAN_READ_RANGE(ctx, s, Min(length + 1, maxlen));
-  }
-  return length;
-}
-#endif  // ASAN_INTERCEPT_STRNLEN
-
 INTERCEPTOR(long, strtol, const char *nptr,  // NOLINT
             char **endptr, int base) {
   void *ctx;
@@ -702,12 +688,12 @@ INTERCEPTOR(long long, atoll, const char
 }
 #endif  // ASAN_INTERCEPT_ATOLL_AND_STRTOLL
 
+#if ASAN_INTERCEPT___CXA_ATEXIT
 static void AtCxaAtexit(void *unused) {
   (void)unused;
   StopInitOrderChecking();
 }
 
-#if ASAN_INTERCEPT___CXA_ATEXIT
 INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg,
             void *dso_handle) {
 #if SANITIZER_MAC
@@ -739,25 +725,23 @@ void InitializeAsanInterceptors() {
   InitializeCommonInterceptors();
 
   // Intercept mem* functions.
-  ASAN_INTERCEPT_FUNC(memmove);
+  ASAN_INTERCEPT_FUNC(memcpy);
   ASAN_INTERCEPT_FUNC(memset);
   if (PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE) {
-    ASAN_INTERCEPT_FUNC(memcpy);
+    // In asan, REAL(memmove) is not used, but it is used in msan.
+    ASAN_INTERCEPT_FUNC(memmove);
   }
+  CHECK(REAL(memcpy));
 
   // Intercept str* functions.
   ASAN_INTERCEPT_FUNC(strcat);  // NOLINT
-  ASAN_INTERCEPT_FUNC(strchr);
   ASAN_INTERCEPT_FUNC(strcpy);  // NOLINT
-  ASAN_INTERCEPT_FUNC(strlen);
   ASAN_INTERCEPT_FUNC(wcslen);
   ASAN_INTERCEPT_FUNC(strncat);
   ASAN_INTERCEPT_FUNC(strncpy);
-#if ASAN_INTERCEPT_STRDUP
   ASAN_INTERCEPT_FUNC(strdup);
-#endif
-#if ASAN_INTERCEPT_STRNLEN
-  ASAN_INTERCEPT_FUNC(strnlen);
+#if ASAN_INTERCEPT___STRDUP
+  ASAN_INTERCEPT_FUNC(__strdup);
 #endif
 #if ASAN_INTERCEPT_INDEX && ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX
   ASAN_INTERCEPT_FUNC(index);

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interceptors.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -23,14 +23,12 @@
 #if !SANITIZER_WINDOWS
 # define ASAN_INTERCEPT_ATOLL_AND_STRTOLL 1
 # define ASAN_INTERCEPT__LONGJMP 1
-# define ASAN_INTERCEPT_STRDUP 1
 # define ASAN_INTERCEPT_INDEX 1
 # define ASAN_INTERCEPT_PTHREAD_CREATE 1
 # define ASAN_INTERCEPT_FORK 1
 #else
 # define ASAN_INTERCEPT_ATOLL_AND_STRTOLL 0
 # define ASAN_INTERCEPT__LONGJMP 0
-# define ASAN_INTERCEPT_STRDUP 0
 # define ASAN_INTERCEPT_INDEX 0
 # define ASAN_INTERCEPT_PTHREAD_CREATE 0
 # define ASAN_INTERCEPT_FORK 0
@@ -42,12 +40,6 @@
 # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 0
 #endif
 
-#if !SANITIZER_MAC
-# define ASAN_INTERCEPT_STRNLEN 1
-#else
-# define ASAN_INTERCEPT_STRNLEN 0
-#endif
-
 #if SANITIZER_LINUX && !SANITIZER_ANDROID
 # define ASAN_INTERCEPT_SWAPCONTEXT 1
 #else
@@ -80,6 +72,12 @@
 # define ASAN_INTERCEPT___CXA_ATEXIT 0
 #endif
 
+#if SANITIZER_LINUX && !SANITIZER_ANDROID
+# define ASAN_INTERCEPT___STRDUP 1
+#else
+# define ASAN_INTERCEPT___STRDUP 0
+#endif
+
 DECLARE_REAL(int, memcmp, const void *a1, const void *a2, uptr size)
 DECLARE_REAL(void*, memcpy, void *to, const void *from, uptr size)
 DECLARE_REAL(void*, memset, void *block, int c, uptr size)

Modified: projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h
==============================================================================
--- projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h	Sat Sep  3 20:43:59 2016	(r305363)
+++ projects/clang390-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h	Sat Sep  3 21:41:29 2016	(r305364)
@@ -54,8 +54,17 @@ extern "C" {
     uptr has_dynamic_init;   // Non-zero if the global has dynamic initializer.
     __asan_global_source_location *location;  // Source location of a global,
                                               // or NULL if it is unknown.
+    uptr odr_indicator;      // The address of the ODR indicator symbol.
   };

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201609032141.u83LfUZV058781>