svn commit: r287626 - in projects/clang370-import: contrib/compiler-rt contrib/compiler-rt/include/sanitizer contrib/compiler-rt/lib/asan contrib/compiler-rt/lib/asan/scripts contrib/compiler-rt/li...
Dimitry Andric
dim at FreeBSD.org
Thu Sep 10 20:35:52 UTC 2015
Author: dim
Date: Thu Sep 10 20:35:47 2015
New Revision: 287626
URL: https://svnweb.freebsd.org/changeset/base/287626
Log:
Update compiler-rt to 3.7.0 release. This also includes the sanitizer
and profile libraries.
Added:
projects/clang370-import/contrib/compiler-rt/lib/builtins/atomic_flag_clear.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/atomic_flag_clear.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/atomic_flag_clear_explicit.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/atomic_flag_clear_explicit.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/atomic_flag_test_and_set.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/atomic_flag_test_and_set.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/atomic_flag_test_and_set_explicit.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/atomic_flag_test_and_set_explicit.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/atomic_signal_fence.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/atomic_signal_fence.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/atomic_thread_fence.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/atomic_thread_fence.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/extendhfsf2.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/extendhfsf2.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/i386/chkstk.S
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/i386/chkstk.S
projects/clang370-import/contrib/compiler-rt/lib/builtins/truncdfhf2.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/truncdfhf2.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/truncsfhf2.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/truncsfhf2.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/x86_64/chkstk.S
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/x86_64/chkstk.S
projects/clang370-import/contrib/compiler-rt/lib/profile/InstrProfilingUtil.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/profile/InstrProfilingUtil.c
projects/clang370-import/contrib/compiler-rt/lib/profile/InstrProfilingUtil.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/profile/InstrProfilingUtil.h
projects/clang370-import/contrib/compiler-rt/lib/safestack/
- copied from r287599, vendor/compiler-rt/dist/lib/safestack/
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_posix.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_internal.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_mac.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_mac.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_mac.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_mac.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_symbolizer_win.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_symbolizer_test.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/sanitizer_common/tests/sanitizer_symbolizer_test.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/tsan/rtl/tsan_interceptors.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/tsan/rtl/tsan_new_delete.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_init_standalone.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/ubsan/ubsan_init_standalone.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_platform.h
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/ubsan/ubsan_platform.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash_itanium.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_type_hash_win.cc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/ubsan/ubsan_type_hash_win.cc
projects/clang370-import/lib/libclang_rt/asan-preinit/
projects/clang370-import/lib/libclang_rt/asan-preinit/Makefile (contents, props changed)
projects/clang370-import/lib/libclang_rt/ubsan_standalone/
- copied from r287599, projects/clang370-import/lib/libclang_rt/ubsan/
projects/clang370-import/lib/libclang_rt/ubsan_standalone_cxx/
- copied from r287599, projects/clang370-import/lib/libclang_rt/ubsan_cxx/
Replaced:
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixtfdi.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fixtfdi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixtfsi.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fixtfsi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixtfti.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fixtfti.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixunstfdi.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fixunstfdi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixunstfsi.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fixunstfsi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixunstfti.c
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fixunstfti.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fp_fixint_impl.inc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fp_fixint_impl.inc
projects/clang370-import/contrib/compiler-rt/lib/builtins/fp_fixuint_impl.inc
- copied unchanged from r287599, vendor/compiler-rt/dist/lib/builtins/fp_fixuint_impl.inc
Deleted:
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc
projects/clang370-import/lib/libclang_rt/san/
projects/clang370-import/lib/libclang_rt/ubsan/
projects/clang370-import/lib/libclang_rt/ubsan_cxx/
Modified:
projects/clang370-import/contrib/compiler-rt/LICENSE.TXT
projects/clang370-import/contrib/compiler-rt/include/sanitizer/coverage_interface.h
projects/clang370-import/contrib/compiler-rt/include/sanitizer/dfsan_interface.h
projects/clang370-import/contrib/compiler-rt/include/sanitizer/lsan_interface.h
projects/clang370-import/contrib/compiler-rt/include/sanitizer/msan_interface.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_flags.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_globals.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_internal.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_linux.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_mac.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_mapping.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_poisoning.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_poisoning.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_posix.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_report.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_report.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_rtl.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_stats.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_stats.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_suppressions.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_suppressions.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_thread.h
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_win.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_win_dll_thunk.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/asan_win_dynamic_runtime_thunk.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/scripts/asan_symbolize.py
projects/clang370-import/contrib/compiler-rt/lib/asan/tests/asan_asm_test.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/tests/asan_str_test.cc
projects/clang370-import/contrib/compiler-rt/lib/asan/tests/asan_test.cc
projects/clang370-import/contrib/compiler-rt/lib/builtins/clear_cache.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/enable_execute_stack.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixdfdi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixsfdi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixunsdfdi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixunsdfti.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fixunssfdi.c
projects/clang370-import/contrib/compiler-rt/lib/builtins/fp_extend.h
projects/clang370-import/contrib/compiler-rt/lib/builtins/fp_extend_impl.inc
projects/clang370-import/contrib/compiler-rt/lib/builtins/fp_trunc.h
projects/clang370-import/contrib/compiler-rt/lib/builtins/fp_trunc_impl.inc
projects/clang370-import/contrib/compiler-rt/lib/builtins/int_endianness.h
projects/clang370-import/contrib/compiler-rt/lib/builtins/int_lib.h
projects/clang370-import/contrib/compiler-rt/lib/dfsan/dfsan.cc
projects/clang370-import/contrib/compiler-rt/lib/dfsan/dfsan_custom.cc
projects/clang370-import/contrib/compiler-rt/lib/dfsan/done_abilist.txt
projects/clang370-import/contrib/compiler-rt/lib/dfsan/scripts/check_custom_wrappers.sh
projects/clang370-import/contrib/compiler-rt/lib/interception/interception.h
projects/clang370-import/contrib/compiler-rt/lib/interception/interception_win.cc
projects/clang370-import/contrib/compiler-rt/lib/lsan/lsan_common.cc
projects/clang370-import/contrib/compiler-rt/lib/lsan/lsan_common.h
projects/clang370-import/contrib/compiler-rt/lib/lsan/lsan_common_linux.cc
projects/clang370-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc
projects/clang370-import/contrib/compiler-rt/lib/lsan/lsan_thread.h
projects/clang370-import/contrib/compiler-rt/lib/msan/msan.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan.h
projects/clang370-import/contrib/compiler-rt/lib/msan/msan.syms.extra
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_allocator.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_interceptors.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_interface_internal.h
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_linux.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_new_delete.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_origin.h
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_poisoning.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_report.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/msan_thread.cc
projects/clang370-import/contrib/compiler-rt/lib/msan/tests/msan_test.cc
projects/clang370-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c
projects/clang370-import/contrib/compiler-rt/lib/profile/InstrProfiling.h
projects/clang370-import/contrib/compiler-rt/lib/profile/InstrProfilingFile.c
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_atomic.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_deadlock_detector1.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libc.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_mac.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_printf.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_common.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_mac.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.h
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_win.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/scripts/check_lint.sh
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/scripts/cpplint.py
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/scripts/litlint.py
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/scripts/sancov.py
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_posix_test.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_procmaps_test.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_printer_test.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_test.cc
projects/clang370-import/contrib/compiler-rt/lib/sanitizer_common/tests/sanitizer_stoptheworld_test.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/dd/dd_rtl.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/go/buildgo.sh
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan.syms.extra
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_defs.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_fd.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_fd.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_flags.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface_inl.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_mman.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_report.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_suppressions.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_symbolize.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_symbolize.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_sync.cc
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_sync.h
projects/clang370-import/contrib/compiler-rt/lib/tsan/rtl/tsan_update_shadow_word_inl.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_diag.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_diag.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_flags.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_flags.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers_cxx.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers_cxx.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_init.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_init.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_type_hash.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_type_hash.h
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_value.cc
projects/clang370-import/contrib/compiler-rt/lib/ubsan/ubsan_value.h
projects/clang370-import/lib/libclang_rt/Makefile
projects/clang370-import/lib/libclang_rt/Makefile.inc
projects/clang370-import/lib/libclang_rt/asan/Makefile
projects/clang370-import/lib/libclang_rt/asan_cxx/Makefile
projects/clang370-import/lib/libclang_rt/profile/Makefile
projects/clang370-import/lib/libclang_rt/ubsan_standalone/Makefile
projects/clang370-import/lib/libclang_rt/ubsan_standalone_cxx/Makefile
projects/clang370-import/lib/libcompiler_rt/Makefile
Directory Properties:
projects/clang370-import/contrib/compiler-rt/ (props changed)
Modified: projects/clang370-import/contrib/compiler-rt/LICENSE.TXT
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/LICENSE.TXT Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/LICENSE.TXT Thu Sep 10 20:35:47 2015 (r287626)
@@ -14,7 +14,7 @@ Full text of the relevant licenses is in
University of Illinois/NCSA
Open Source License
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
All rights reserved.
@@ -55,7 +55,7 @@ SOFTWARE.
==============================================================================
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Modified: projects/clang370-import/contrib/compiler-rt/include/sanitizer/coverage_interface.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/include/sanitizer/coverage_interface.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/include/sanitizer/coverage_interface.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -39,6 +39,23 @@ extern "C" {
// Some of the entries in *data will be zero.
uintptr_t __sanitizer_get_coverage_guards(uintptr_t **data);
+ // The coverage instrumentation may optionally provide imprecise counters.
+ // Rather than exposing the counter values to the user we instead map
+ // the counters to a bitset.
+ // Every counter is associated with 8 bits in the bitset.
+ // We define 8 value ranges: 1, 2, 3, 4-7, 8-15, 16-31, 32-127, 128+
+ // The i-th bit is set to 1 if the counter value is in the i-th range.
+ // This counter-based coverage implementation is *not* thread-safe.
+
+ // Returns the number of registered coverage counters.
+ uintptr_t __sanitizer_get_number_of_counters();
+ // Updates the counter 'bitset', clears the counters and returns the number of
+ // new bits in 'bitset'.
+ // If 'bitset' is nullptr, only clears the counters.
+ // Otherwise 'bitset' should be at least
+ // __sanitizer_get_number_of_counters bytes long and 8-aligned.
+ uintptr_t
+ __sanitizer_update_counter_bitset_and_clear_counters(uint8_t *bitset);
#ifdef __cplusplus
} // extern "C"
#endif
Modified: projects/clang370-import/contrib/compiler-rt/include/sanitizer/dfsan_interface.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/include/sanitizer/dfsan_interface.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/include/sanitizer/dfsan_interface.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -91,6 +91,16 @@ void dfsan_set_write_callback(dfsan_writ
/// <label> <parent label 1> <parent label 2> <label description if any>
void dfsan_dump_labels(int fd);
+/// Whenever a dfsan's custom function is called the corresponding
+/// hook is called it non-zero. The hooks should be defined by the user.
+/// The primary use case is taint-guided fuzzing, where the fuzzer
+/// needs to see the parameters of the function and the labels.
+/// FIXME: implement more hooks.
+
+/// memcmp hook.
+void dfsan_weak_hook_memcmp(void *caller_pc, const void *s1, const void *s2,
+ size_t n, dfsan_label s1_label,
+ dfsan_label s2_label, dfsan_label n_label);
#ifdef __cplusplus
} // extern "C"
Modified: projects/clang370-import/contrib/compiler-rt/include/sanitizer/lsan_interface.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/include/sanitizer/lsan_interface.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/include/sanitizer/lsan_interface.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -41,14 +41,25 @@ extern "C" {
void __lsan_register_root_region(const void *p, size_t size);
void __lsan_unregister_root_region(const void *p, size_t size);
- // Calling this function makes LSan enter the leak checking phase immediately.
- // Use this if normal end-of-process leak checking happens too late (e.g. if
- // you have intentional memory leaks in your shutdown code). Calling this
- // function overrides end-of-process leak checking; it must be called at
- // most once per process. This function will terminate the process if there
- // are memory leaks and the exit_code flag is non-zero.
+ // Check for leaks now. This function behaves identically to the default
+ // end-of-process leak check. In particular, it will terminate the process if
+ // leaks are found and the exit_code flag is non-zero.
+ // Subsequent calls to this function will have no effect and end-of-process
+ // leak check will not run. Effectively, end-of-process leak check is moved to
+ // the time of first invocation of this function.
+ // By calling this function early during process shutdown, you can instruct
+ // LSan to ignore shutdown-only leaks which happen later on.
void __lsan_do_leak_check();
+ // Check for leaks now. Returns zero if no leaks have been found or if leak
+ // detection is disabled, non-zero otherwise.
+ // This function may be called repeatedly, e.g. to periodically check a
+ // long-running process. It prints a leak report if appropriate, but does not
+ // terminate the process. It does not affect the behavior of
+ // __lsan_do_leak_check() or the end-of-process leak check, and is not
+ // affected by them.
+ int __lsan_do_recoverable_leak_check();
+
// The user may optionally provide this function to disallow leak checking
// for the program it is linked into (if the return value is non-zero). This
// function must be defined as returning a constant value; any behavior beyond
Modified: projects/clang370-import/contrib/compiler-rt/include/sanitizer/msan_interface.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/include/sanitizer/msan_interface.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/include/sanitizer/msan_interface.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -25,6 +25,11 @@ extern "C" {
/* Get raw origin for an address. */
uint32_t __msan_get_origin(const volatile void *a);
+ /* Test that this_id is a descendant of prev_id (or they are simply equal).
+ * "descendant" here means they are part of the same chain, created with
+ * __msan_chain_origin. */
+ int __msan_origin_is_descendant_or_same(uint32_t this_id, uint32_t prev_id);
+
/* Returns non-zero if tracking origins. */
int __msan_get_track_origins();
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -223,7 +223,7 @@ void AllocatorOptions::CopyTo(Flags *f,
struct Allocator {
static const uptr kMaxAllowedMallocSize =
- FIRST_32_SECOND_64(3UL << 30, 64UL << 30);
+ FIRST_32_SECOND_64(3UL << 30, 1UL << 40);
static const uptr kMaxThreadLocalQuarantine =
FIRST_32_SECOND_64(1 << 18, 1 << 20);
@@ -354,7 +354,7 @@ struct Allocator {
}
CHECK(IsAligned(needed_size, min_alignment));
if (size > kMaxAllowedMallocSize || needed_size > kMaxAllowedMallocSize) {
- Report("WARNING: AddressSanitizer failed to allocate %p bytes\n",
+ Report("WARNING: AddressSanitizer failed to allocate 0x%zx bytes\n",
(void*)size);
return allocator.ReturnNullOrDie();
}
@@ -437,11 +437,10 @@ struct Allocator {
thread_stats.mallocs++;
thread_stats.malloced += size;
thread_stats.malloced_redzones += needed_size - size;
- uptr class_id =
- Min(kNumberOfSizeClasses, SizeClassMap::ClassID(needed_size));
- thread_stats.malloced_by_size[class_id]++;
if (needed_size > SizeClassMap::kMaxSize)
thread_stats.malloc_large++;
+ else
+ thread_stats.malloced_by_size[SizeClassMap::ClassID(needed_size)]++;
void *res = reinterpret_cast<void *>(user_beg);
if (can_fill && fl.max_malloc_fill_size) {
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_allocator.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -29,7 +29,6 @@ enum AllocType {
FROM_NEW_BR = 3 // Memory block came from operator new [ ]
};
-static const uptr kNumberOfSizeClasses = 255;
struct AsanChunk;
struct AllocatorOptions {
@@ -137,6 +136,7 @@ typedef SizeClassAllocator32<0, SANITIZE
AsanMapUnmapCallback> PrimaryAllocator;
#endif // SANITIZER_CAN_USE_ALLOCATOR64
+static const uptr kNumberOfSizeClasses = SizeClassMap::kNumClasses;
typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
typedef LargeMmapAllocator<AsanMapUnmapCallback> SecondaryAllocator;
typedef CombinedAllocator<PrimaryAllocator, AllocatorCache,
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_fake_stack.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -22,6 +22,9 @@ static const u64 kMagic2 = (kMagic1 << 8
static const u64 kMagic4 = (kMagic2 << 16) | kMagic2;
static const u64 kMagic8 = (kMagic4 << 32) | kMagic4;
+static const u64 kAllocaRedzoneSize = 32UL;
+static const u64 kAllocaRedzoneMask = 31UL;
+
// For small size classes inline PoisonShadow for better performance.
ALWAYS_INLINE void SetShadow(uptr ptr, uptr size, uptr class_id, u64 magic) {
CHECK_EQ(SHADOW_SCALE, 3); // This code expects SHADOW_SCALE=3.
@@ -253,4 +256,24 @@ void *__asan_addr_is_in_fake_stack(void
if (end) *end = reinterpret_cast<void*>(frame_end);
return reinterpret_cast<void*>(frame->real_stack);
}
+
+SANITIZER_INTERFACE_ATTRIBUTE
+void __asan_alloca_poison(uptr addr, uptr size) {
+ uptr LeftRedzoneAddr = addr - kAllocaRedzoneSize;
+ uptr PartialRzAddr = addr + size;
+ uptr RightRzAddr = (PartialRzAddr + kAllocaRedzoneMask) & ~kAllocaRedzoneMask;
+ uptr PartialRzAligned = PartialRzAddr & ~(SHADOW_GRANULARITY - 1);
+ FastPoisonShadow(LeftRedzoneAddr, kAllocaRedzoneSize, kAsanAllocaLeftMagic);
+ FastPoisonShadowPartialRightRedzone(
+ PartialRzAligned, PartialRzAddr % SHADOW_GRANULARITY,
+ RightRzAddr - PartialRzAligned, kAsanAllocaRightMagic);
+ FastPoisonShadow(RightRzAddr, kAllocaRedzoneSize, kAsanAllocaRightMagic);
+}
+
+SANITIZER_INTERFACE_ATTRIBUTE
+void __asan_allocas_unpoison(uptr top, uptr bottom) {
+ if ((!top) || (top > bottom)) return;
+ REAL(memset)(reinterpret_cast<void*>(MemToShadow(top)), 0,
+ (bottom - top) / SHADOW_GRANULARITY);
+}
} // extern "C"
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_flags.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_flags.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_flags.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -20,6 +20,8 @@
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_flags.h"
#include "sanitizer_common/sanitizer_flag_parser.h"
+#include "ubsan/ubsan_flags.h"
+#include "ubsan/ubsan_platform.h"
namespace __asan {
@@ -72,8 +74,8 @@ void InitializeFlags() {
RegisterAsanFlags(&asan_parser, f);
RegisterCommonFlags(&asan_parser);
- // Set the default values and prepare for parsing LSan flags (which can also
- // overwrite common flags).
+ // Set the default values and prepare for parsing LSan and UBSan flags
+ // (which can also overwrite common flags).
#if CAN_SANITIZE_LEAKS
__lsan::Flags *lf = __lsan::flags();
lf->SetDefaults();
@@ -83,6 +85,15 @@ void InitializeFlags() {
RegisterCommonFlags(&lsan_parser);
#endif
+#if CAN_SANITIZE_UB
+ __ubsan::Flags *uf = __ubsan::flags();
+ uf->SetDefaults();
+
+ FlagParser ubsan_parser;
+ __ubsan::RegisterUbsanFlags(&ubsan_parser, uf);
+ RegisterCommonFlags(&ubsan_parser);
+#endif
+
// Override from ASan compile definition.
const char *asan_compile_def = MaybeUseAsanDefaultOptionsCompileDefinition();
asan_parser.ParseString(asan_compile_def);
@@ -90,12 +101,19 @@ void InitializeFlags() {
// Override from user-specified string.
const char *asan_default_options = MaybeCallAsanDefaultOptions();
asan_parser.ParseString(asan_default_options);
+#if CAN_SANITIZE_UB
+ const char *ubsan_default_options = __ubsan::MaybeCallUbsanDefaultOptions();
+ ubsan_parser.ParseString(ubsan_default_options);
+#endif
// Override from command line.
asan_parser.ParseString(GetEnv("ASAN_OPTIONS"));
#if CAN_SANITIZE_LEAKS
lsan_parser.ParseString(GetEnv("LSAN_OPTIONS"));
#endif
+#if CAN_SANITIZE_UB
+ ubsan_parser.ParseString(GetEnv("UBSAN_OPTIONS"));
+#endif
// Let activation flags override current settings. On Android they come
// from a system property. On other platforms this is no-op.
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_globals.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_globals.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_globals.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -18,6 +18,7 @@
#include "asan_report.h"
#include "asan_stack.h"
#include "asan_stats.h"
+#include "asan_suppressions.h"
#include "asan_thread.h"
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_mutex.h"
@@ -73,7 +74,7 @@ ALWAYS_INLINE void PoisonRedZones(const
const uptr kMinimalDistanceFromAnotherGlobal = 64;
-bool IsAddressNearGlobal(uptr addr, const __asan_global &g) {
+static bool IsAddressNearGlobal(uptr addr, const __asan_global &g) {
if (addr <= g.beg - kMinimalDistanceFromAnotherGlobal) return false;
if (addr >= g.beg + g.size_with_redzone) return false;
return true;
@@ -90,36 +91,40 @@ static void ReportGlobal(const Global &g
}
}
-static bool DescribeOrGetInfoIfGlobal(uptr addr, uptr size, bool print,
- Global *output_global) {
- if (!flags()->report_globals) return false;
+static u32 FindRegistrationSite(const Global *g) {
+ mu_for_globals.CheckLocked();
+ CHECK(global_registration_site_vector);
+ for (uptr i = 0, n = global_registration_site_vector->size(); i < n; i++) {
+ GlobalRegistrationSite &grs = (*global_registration_site_vector)[i];
+ if (g >= grs.g_first && g <= grs.g_last)
+ return grs.stack_id;
+ }
+ return 0;
+}
+
+int GetGlobalsForAddress(uptr addr, Global *globals, u32 *reg_sites,
+ int max_globals) {
+ if (!flags()->report_globals) return 0;
BlockingMutexLock lock(&mu_for_globals);
- bool res = false;
+ int res = 0;
for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
const Global &g = *l->g;
- if (print) {
- if (flags()->report_globals >= 2)
- ReportGlobal(g, "Search");
- res |= DescribeAddressRelativeToGlobal(addr, size, g);
- } else {
- if (IsAddressNearGlobal(addr, g)) {
- CHECK(output_global);
- *output_global = g;
- return true;
- }
+ if (flags()->report_globals >= 2)
+ ReportGlobal(g, "Search");
+ if (IsAddressNearGlobal(addr, g)) {
+ globals[res] = g;
+ if (reg_sites)
+ reg_sites[res] = FindRegistrationSite(&g);
+ res++;
+ if (res == max_globals) break;
}
}
return res;
}
-bool DescribeAddressIfGlobal(uptr addr, uptr size) {
- return DescribeOrGetInfoIfGlobal(addr, size, /* print */ true,
- /* output_global */ nullptr);
-}
-
bool GetInfoForAddressIfGlobal(uptr addr, AddressDescription *descr) {
Global g = {};
- if (DescribeOrGetInfoIfGlobal(addr, /* size */ 1, /* print */ false, &g)) {
+ if (GetGlobalsForAddress(addr, &g, nullptr, 1)) {
internal_strncpy(descr->name, g.name, descr->name_size);
descr->region_address = g.beg;
descr->region_size = g.size;
@@ -129,16 +134,6 @@ bool GetInfoForAddressIfGlobal(uptr addr
return false;
}
-u32 FindRegistrationSite(const Global *g) {
- CHECK(global_registration_site_vector);
- for (uptr i = 0, n = global_registration_site_vector->size(); i < n; i++) {
- GlobalRegistrationSite &grs = (*global_registration_site_vector)[i];
- if (g >= grs.g_first && g <= grs.g_last)
- return grs.stack_id;
- }
- return 0;
-}
-
// Register a global variable.
// This function may be called more than once for every global
// so we store the globals in a map.
@@ -158,7 +153,8 @@ static void RegisterGlobal(const Global
// 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))
+ (flags()->detect_odr_violation >= 2 || g->size != l->g->size) &&
+ !IsODRViolationSuppressed(g->name))
ReportODRViolation(g, FindRegistrationSite(g),
l->g, FindRegistrationSite(l->g));
}
@@ -210,20 +206,6 @@ void StopInitOrderChecking() {
}
}
-#if SANITIZER_WINDOWS // Should only be called on Windows.
-SANITIZER_INTERFACE_ATTRIBUTE
-void UnregisterGlobalsInRange(void *beg, void *end) {
- if (!flags()->report_globals)
- return;
- BlockingMutexLock lock(&mu_for_globals);
- for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
- void *address = (void *)l->g->beg;
- if (beg <= address && address < end)
- UnregisterGlobal(l->g);
- }
-}
-#endif
-
} // namespace __asan
// ---------------------- Interface ---------------- {{{1
@@ -232,7 +214,7 @@ using namespace __asan; // NOLINT
// Register an array of globals.
void __asan_register_globals(__asan_global *globals, uptr n) {
if (!flags()->report_globals) return;
- GET_STACK_TRACE_FATAL_HERE;
+ GET_STACK_TRACE_MALLOC;
u32 stack_id = StackDepotPut(stack);
BlockingMutexLock lock(&mu_for_globals);
if (!global_registration_site_vector)
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -23,6 +23,10 @@
#include "asan_suppressions.h"
#include "sanitizer_common/sanitizer_libc.h"
+#if SANITIZER_POSIX
+#include "sanitizer_common/sanitizer_posix.h"
+#endif
+
namespace __asan {
// Return true if we can quickly decide that the region is unpoisoned.
@@ -65,7 +69,7 @@ struct AsanInterceptorContext {
} \
if (!suppressed) { \
GET_CURRENT_PC_BP_SP; \
- __asan_report_error(pc, bp, sp, __bad, isWrite, __size); \
+ __asan_report_error(pc, bp, sp, __bad, isWrite, __size, 0); \
} \
} \
} while (0)
@@ -75,6 +79,13 @@ struct AsanInterceptorContext {
#define ASAN_WRITE_RANGE(ctx, offset, size) \
ACCESS_MEMORY_RANGE(ctx, offset, size, true)
+#define ASAN_READ_STRING_OF_LEN(ctx, s, len, n) \
+ ASAN_READ_RANGE((ctx), (s), \
+ common_flags()->strict_string_checks ? (len) + 1 : (n))
+
+#define ASAN_READ_STRING(ctx, s, n) \
+ ASAN_READ_STRING_OF_LEN((ctx), (s), REAL(strlen)(s), (n))
+
// Behavior of functions like "memcpy" or "strcpy" is undefined
// if memory intervals overlap. We report error in this case.
// Macro is used to avoid creation of new frames.
@@ -120,17 +131,6 @@ using namespace __asan; // NOLINT
DECLARE_REAL_AND_INTERCEPTOR(void *, malloc, uptr)
DECLARE_REAL_AND_INTERCEPTOR(void, free, void *)
-#if !SANITIZER_MAC
-#define ASAN_INTERCEPT_FUNC(name) \
- do { \
- if ((!INTERCEPT_FUNCTION(name) || !REAL(name))) \
- VReport(1, "AddressSanitizer: failed to intercept '" #name "'\n"); \
- } while (0)
-#else
-// OS X interceptors don't need to be initialized with INTERCEPT_FUNCTION.
-#define ASAN_INTERCEPT_FUNC(name)
-#endif // SANITIZER_MAC
-
#define ASAN_INTERCEPTOR_ENTER(ctx, func) \
AsanInterceptorContext _ctx = {#func}; \
ctx = (void *)&_ctx; \
@@ -171,11 +171,24 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free,
do { \
} while (false)
#define COMMON_INTERCEPTOR_BLOCK_REAL(name) REAL(name)
+// Strict init-order checking is dlopen-hostile:
+// https://code.google.com/p/address-sanitizer/issues/detail?id=178
+#define COMMON_INTERCEPTOR_ON_DLOPEN(filename, flag) \
+ if (flags()->strict_init_order) { \
+ StopInitOrderChecking(); \
+ }
#define COMMON_INTERCEPTOR_ON_EXIT(ctx) OnExit()
#define COMMON_INTERCEPTOR_LIBRARY_LOADED(filename, handle) \
CoverageUpdateMapping()
#define COMMON_INTERCEPTOR_LIBRARY_UNLOADED() CoverageUpdateMapping()
#define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (!asan_inited)
+#define COMMON_INTERCEPTOR_GET_TLS_RANGE(begin, end) \
+ if (AsanThread *t = GetCurrentThread()) { \
+ *begin = t->tls_begin(); \
+ *end = t->tls_end(); \
+ } else { \
+ *begin = *end = 0; \
+ }
#include "sanitizer_common/sanitizer_common_interceptors.inc"
// Syscall interceptors don't have contexts, we don't support suppressions
@@ -200,12 +213,6 @@ struct ThreadStartParam {
};
static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) {
-#if SANITIZER_WINDOWS
- // FIXME: this is a bandaid fix for PR22025.
- AsanThread *t = (AsanThread*)arg;
- SetCurrentThread(t);
- return t->ThreadStart(GetTid(), /* signal_thread_is_registered */ nullptr);
-#else
ThreadStartParam *param = reinterpret_cast<ThreadStartParam *>(arg);
AsanThread *t = nullptr;
while ((t = reinterpret_cast<AsanThread *>(
@@ -213,7 +220,6 @@ static thread_return_t THREAD_CALLING_CO
internal_sched_yield();
SetCurrentThread(t);
return t->ThreadStart(GetTid(), ¶m->is_registered);
-#endif
}
#if ASAN_INTERCEPT_PTHREAD_CREATE
@@ -302,7 +308,7 @@ static void ClearShadowMemoryForContextS
ssize += stack - bottom;
ssize = RoundUpTo(ssize, PageSize);
static const uptr kMaxSaneContextStackSize = 1 << 22; // 4 Mb
- if (ssize && ssize <= kMaxSaneContextStackSize) {
+ if (AddrIsInMem(bottom) && ssize && ssize <= kMaxSaneContextStackSize) {
PoisonShadow(bottom, ssize, 0);
}
}
@@ -357,30 +363,6 @@ INTERCEPTOR(void, __cxa_throw, void *a,
}
#endif
-#if SANITIZER_WINDOWS
-INTERCEPTOR_WINAPI(void, RaiseException, void *a, void *b, void *c, void *d) {
- CHECK(REAL(RaiseException));
- __asan_handle_no_return();
- REAL(RaiseException)(a, b, c, d);
-}
-
-INTERCEPTOR(int, _except_handler3, void *a, void *b, void *c, void *d) {
- CHECK(REAL(_except_handler3));
- __asan_handle_no_return();
- return REAL(_except_handler3)(a, b, c, d);
-}
-
-#if ASAN_DYNAMIC
-// This handler is named differently in -MT and -MD CRTs.
-#define _except_handler4 _except_handler4_common
-#endif
-INTERCEPTOR(int, _except_handler4, void *a, void *b, void *c, void *d) {
- CHECK(REAL(_except_handler4));
- __asan_handle_no_return();
- return REAL(_except_handler4)(a, b, c, d);
-}
-#endif
-
static inline int CharCmp(unsigned char c1, unsigned char c2) {
return (c1 == c2) ? 0 : (c1 < c2) ? -1 : 1;
}
@@ -511,8 +493,9 @@ INTERCEPTOR(char*, strchr, const char *s
ENSURE_ASAN_INITED();
char *result = REAL(strchr)(str, c);
if (flags()->replace_str) {
- uptr bytes_read = (result ? result - str : REAL(strlen)(str)) + 1;
- ASAN_READ_RANGE(ctx, str, bytes_read);
+ 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;
}
@@ -541,7 +524,7 @@ INTERCEPTOR(char*, strcat, char *to, con
uptr from_length = REAL(strlen)(from);
ASAN_READ_RANGE(ctx, from, from_length + 1);
uptr to_length = REAL(strlen)(to);
- ASAN_READ_RANGE(ctx, to, to_length);
+ ASAN_READ_STRING_OF_LEN(ctx, to, to_length, to_length);
ASAN_WRITE_RANGE(ctx, to + to_length, from_length + 1);
// If the copying actually happens, the |from| string should not overlap
// with the resulting string starting at |to|, which has a length of
@@ -563,7 +546,7 @@ INTERCEPTOR(char*, strncat, char *to, co
uptr copy_length = Min(size, from_length + 1);
ASAN_READ_RANGE(ctx, from, copy_length);
uptr to_length = REAL(strlen)(to);
- ASAN_READ_RANGE(ctx, to, to_length);
+ ASAN_READ_STRING_OF_LEN(ctx, to, to_length, to_length);
ASAN_WRITE_RANGE(ctx, to + to_length, from_length + 1);
if (from_length > 0) {
CHECK_RANGES_OVERLAP("strncat", to, to_length + copy_length + 1,
@@ -665,23 +648,6 @@ INTERCEPTOR(uptr, strnlen, const char *s
}
#endif // ASAN_INTERCEPT_STRNLEN
-static inline bool IsValidStrtolBase(int base) {
- return (base == 0) || (2 <= base && base <= 36);
-}
-
-static inline void FixRealStrtolEndptr(const char *nptr, char **endptr) {
- CHECK(endptr);
- if (nptr == *endptr) {
- // No digits were found at strtol call, we need to find out the last
- // symbol accessed by strtoll on our own.
- // We get this symbol by skipping leading blanks and optional +/- sign.
- while (IsSpace(*nptr)) nptr++;
- if (*nptr == '+' || *nptr == '-') nptr++;
- *endptr = const_cast<char *>(nptr);
- }
- CHECK(*endptr >= nptr);
-}
-
INTERCEPTOR(long, strtol, const char *nptr, // NOLINT
char **endptr, int base) {
void *ctx;
@@ -692,13 +658,7 @@ INTERCEPTOR(long, strtol, const char *np
}
char *real_endptr;
long result = REAL(strtol)(nptr, &real_endptr, base); // NOLINT
- if (endptr != 0) {
- *endptr = real_endptr;
- }
- if (IsValidStrtolBase(base)) {
- FixRealStrtolEndptr(nptr, &real_endptr);
- ASAN_READ_RANGE(ctx, nptr, (real_endptr - nptr) + 1);
- }
+ StrtolFixAndCheck(ctx, nptr, endptr, real_endptr, base);
return result;
}
@@ -719,7 +679,7 @@ INTERCEPTOR(int, atoi, const char *nptr)
// different from int). So, we just imitate this behavior.
int result = REAL(strtol)(nptr, &real_endptr, 10);
FixRealStrtolEndptr(nptr, &real_endptr);
- ASAN_READ_RANGE(ctx, nptr, (real_endptr - nptr) + 1);
+ ASAN_READ_STRING(ctx, nptr, (real_endptr - nptr) + 1);
return result;
}
@@ -736,7 +696,7 @@ INTERCEPTOR(long, atol, const char *nptr
char *real_endptr;
long result = REAL(strtol)(nptr, &real_endptr, 10); // NOLINT
FixRealStrtolEndptr(nptr, &real_endptr);
- ASAN_READ_RANGE(ctx, nptr, (real_endptr - nptr) + 1);
+ ASAN_READ_STRING(ctx, nptr, (real_endptr - nptr) + 1);
return result;
}
@@ -751,16 +711,7 @@ INTERCEPTOR(long long, strtoll, const ch
}
char *real_endptr;
long long result = REAL(strtoll)(nptr, &real_endptr, base); // NOLINT
- if (endptr != 0) {
- *endptr = real_endptr;
- }
- // If base has unsupported value, strtoll can exit with EINVAL
- // without reading any characters. So do additional checks only
- // if base is valid.
- if (IsValidStrtolBase(base)) {
- FixRealStrtolEndptr(nptr, &real_endptr);
- ASAN_READ_RANGE(ctx, nptr, (real_endptr - nptr) + 1);
- }
+ StrtolFixAndCheck(ctx, nptr, endptr, real_endptr, base);
return result;
}
@@ -774,7 +725,7 @@ INTERCEPTOR(long long, atoll, const char
char *real_endptr;
long long result = REAL(strtoll)(nptr, &real_endptr, 10); // NOLINT
FixRealStrtolEndptr(nptr, &real_endptr);
- ASAN_READ_RANGE(ctx, nptr, (real_endptr - nptr) + 1);
+ ASAN_READ_STRING(ctx, nptr, (real_endptr - nptr) + 1);
return result;
}
#endif // ASAN_INTERCEPT_ATOLL_AND_STRTOLL
@@ -807,36 +758,6 @@ INTERCEPTOR(int, fork, void) {
}
#endif // ASAN_INTERCEPT_FORK
-#if SANITIZER_WINDOWS
-INTERCEPTOR_WINAPI(DWORD, CreateThread,
- void* security, uptr stack_size,
- DWORD (__stdcall *start_routine)(void*), void* arg,
- DWORD thr_flags, void* tid) {
- // Strict init-order checking is thread-hostile.
- if (flags()->strict_init_order)
- StopInitOrderChecking();
- GET_STACK_TRACE_THREAD;
- // FIXME: The CreateThread interceptor is not the same as a pthread_create
- // one. This is a bandaid fix for PR22025.
- bool detached = false; // FIXME: how can we determine it on Windows?
- u32 current_tid = GetCurrentTidOrInvalid();
- AsanThread *t =
- AsanThread::Create(start_routine, arg, current_tid, &stack, detached);
- return REAL(CreateThread)(security, stack_size,
- asan_thread_start, t, thr_flags, tid);
-}
-
-namespace __asan {
-void InitializeWindowsInterceptors() {
- ASAN_INTERCEPT_FUNC(CreateThread);
- ASAN_INTERCEPT_FUNC(RaiseException);
- ASAN_INTERCEPT_FUNC(_except_handler3);
- ASAN_INTERCEPT_FUNC(_except_handler4);
-}
-
-} // namespace __asan
-#endif
-
// ---------------------- InitializeAsanInterceptors ---------------- {{{1
namespace __asan {
void InitializeAsanInterceptors() {
@@ -919,10 +840,7 @@ void InitializeAsanInterceptors() {
ASAN_INTERCEPT_FUNC(fork);
#endif
- // Some Windows-specific interceptors.
-#if SANITIZER_WINDOWS
- InitializeWindowsInterceptors();
-#endif
+ InitializePlatformInterceptors();
VReport(1, "AddressSanitizer: libc interceptors initialized\n");
}
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interceptors.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -92,9 +92,21 @@ struct sigaction;
DECLARE_REAL(int, sigaction, int signum, const struct sigaction *act,
struct sigaction *oldact)
+#if !SANITIZER_MAC
+#define ASAN_INTERCEPT_FUNC(name) \
+ do { \
+ if ((!INTERCEPT_FUNCTION(name) || !REAL(name))) \
+ VReport(1, "AddressSanitizer: failed to intercept '" #name "'\n"); \
+ } while (0)
+#else
+// OS X interceptors don't need to be initialized with INTERCEPT_FUNCTION.
+#define ASAN_INTERCEPT_FUNC(name)
+#endif // SANITIZER_MAC
+
namespace __asan {
void InitializeAsanInterceptors();
+void InitializePlatformInterceptors();
#define ENSURE_ASAN_INITED() do { \
CHECK(!asan_init_is_running); \
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -128,7 +128,7 @@ extern "C" {
SANITIZER_INTERFACE_ATTRIBUTE
void __asan_report_error(uptr pc, uptr bp, uptr sp,
- uptr addr, int is_write, uptr access_size);
+ uptr addr, int is_write, uptr access_size, u32 exp);
SANITIZER_INTERFACE_ATTRIBUTE
int __asan_set_error_exit_code(int exit_code);
@@ -165,6 +165,21 @@ extern "C" {
SANITIZER_INTERFACE_ATTRIBUTE void __asan_loadN(uptr p, uptr size);
SANITIZER_INTERFACE_ATTRIBUTE void __asan_storeN(uptr p, uptr size);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load1(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load2(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load4(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load8(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load16(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store1(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store2(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store4(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store8(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store16(uptr p, u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_loadN(uptr p, uptr size,
+ u32 exp);
+ SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_storeN(uptr p, uptr size,
+ u32 exp);
+
SANITIZER_INTERFACE_ATTRIBUTE
void* __asan_memcpy(void *dst, const void *src, uptr size);
SANITIZER_INTERFACE_ATTRIBUTE
@@ -180,6 +195,10 @@ extern "C" {
void __asan_poison_intra_object_redzone(uptr p, uptr size);
SANITIZER_INTERFACE_ATTRIBUTE
void __asan_unpoison_intra_object_redzone(uptr p, uptr size);
+ SANITIZER_INTERFACE_ATTRIBUTE
+ void __asan_alloca_poison(uptr addr, uptr size);
+ SANITIZER_INTERFACE_ATTRIBUTE
+ void __asan_allocas_unpoison(uptr top, uptr bottom);
} // extern "C"
#endif // ASAN_INTERFACE_INTERNAL_H
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_internal.h
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_internal.h Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_internal.h Thu Sep 10 20:35:47 2015 (r287626)
@@ -62,21 +62,6 @@ namespace __asan {
class AsanThread;
using __sanitizer::StackTrace;
-struct SignalContext {
- void *context;
- uptr addr;
- uptr pc;
- uptr sp;
- uptr bp;
-
- SignalContext(void *context, uptr addr, uptr pc, uptr sp, uptr bp) :
- context(context), addr(addr), pc(pc), sp(sp), bp(bp) {
- }
-
- // Creates signal context in a platform-specific manner.
- static SignalContext Create(void *siginfo, void *context);
-};
-
void AsanInitFromRtl();
// asan_rtl.cc
@@ -90,7 +75,6 @@ void *AsanDoesNotSupportStaticLinkage();
void AsanCheckDynamicRTPrereqs();
void AsanCheckIncompatibleRT();
-void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp);
void AsanOnSIGSEGV(int, void *siginfo, void *context);
void DisableReexec();
@@ -109,7 +93,7 @@ void AppendToErrorMessageBuffer(const ch
void *AsanDlSymNext(const char *sym);
-void ReserveShadowMemoryRange(uptr beg, uptr end);
+void ReserveShadowMemoryRange(uptr beg, uptr end, const char *name);
// Platform-specific options.
#if SANITIZER_MAC
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_linux.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_linux.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_linux.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -68,6 +68,8 @@ asan_rt_version_t __asan_rt_version;
namespace __asan {
+void InitializePlatformInterceptors() {}
+
void DisableReexec() {
// No need to re-exec on Linux.
}
@@ -111,6 +113,9 @@ static void ReportIncompatibleRT() {
}
void AsanCheckDynamicRTPrereqs() {
+ if (!ASAN_DYNAMIC)
+ return;
+
// Ensure that dynamic RT is the first DSO in the list
const char *first_dso_name = 0;
dl_iterate_phdr(FindFirstDSOCallback, &first_dso_name);
@@ -152,78 +157,6 @@ void AsanCheckIncompatibleRT() {
}
#endif // SANITIZER_ANDROID
-void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
-#if defined(__arm__)
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.arm_pc;
- *bp = ucontext->uc_mcontext.arm_fp;
- *sp = ucontext->uc_mcontext.arm_sp;
-#elif defined(__aarch64__)
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.pc;
- *bp = ucontext->uc_mcontext.regs[29];
- *sp = ucontext->uc_mcontext.sp;
-#elif defined(__hppa__)
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.sc_iaoq[0];
- /* GCC uses %r3 whenever a frame pointer is needed. */
- *bp = ucontext->uc_mcontext.sc_gr[3];
- *sp = ucontext->uc_mcontext.sc_gr[30];
-#elif defined(__x86_64__)
-# if SANITIZER_FREEBSD
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.mc_rip;
- *bp = ucontext->uc_mcontext.mc_rbp;
- *sp = ucontext->uc_mcontext.mc_rsp;
-# else
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.gregs[REG_RIP];
- *bp = ucontext->uc_mcontext.gregs[REG_RBP];
- *sp = ucontext->uc_mcontext.gregs[REG_RSP];
-# endif
-#elif defined(__i386__)
-# if SANITIZER_FREEBSD
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.mc_eip;
- *bp = ucontext->uc_mcontext.mc_ebp;
- *sp = ucontext->uc_mcontext.mc_esp;
-# else
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.gregs[REG_EIP];
- *bp = ucontext->uc_mcontext.gregs[REG_EBP];
- *sp = ucontext->uc_mcontext.gregs[REG_ESP];
-# endif
-#elif defined(__powerpc__) || defined(__powerpc64__)
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.regs->nip;
- *sp = ucontext->uc_mcontext.regs->gpr[PT_R1];
- // The powerpc{,64}-linux ABIs do not specify r31 as the frame
- // pointer, but GCC always uses r31 when we need a frame pointer.
- *bp = ucontext->uc_mcontext.regs->gpr[PT_R31];
-#elif defined(__sparc__)
- ucontext_t *ucontext = (ucontext_t*)context;
- uptr *stk_ptr;
-# if defined (__arch64__)
- *pc = ucontext->uc_mcontext.mc_gregs[MC_PC];
- *sp = ucontext->uc_mcontext.mc_gregs[MC_O6];
- stk_ptr = (uptr *) (*sp + 2047);
- *bp = stk_ptr[15];
-# else
- *pc = ucontext->uc_mcontext.gregs[REG_PC];
- *sp = ucontext->uc_mcontext.gregs[REG_O6];
- stk_ptr = (uptr *) *sp;
- *bp = stk_ptr[15];
-# endif
-#elif defined(__mips__)
- ucontext_t *ucontext = (ucontext_t*)context;
- *pc = ucontext->uc_mcontext.gregs[31];
- *bp = ucontext->uc_mcontext.gregs[30];
- *sp = ucontext->uc_mcontext.gregs[29];
-#else
-# error "Unsupported arch"
-#endif
-}
-
void AsanPlatformThreadInit() {
// Nothing here for now.
}
Modified: projects/clang370-import/contrib/compiler-rt/lib/asan/asan_mac.cc
==============================================================================
--- projects/clang370-import/contrib/compiler-rt/lib/asan/asan_mac.cc Thu Sep 10 17:46:48 2015 (r287625)
+++ projects/clang370-import/contrib/compiler-rt/lib/asan/asan_mac.cc Thu Sep 10 20:35:47 2015 (r287626)
@@ -24,7 +24,14 @@
#include "sanitizer_common/sanitizer_libc.h"
#include "sanitizer_common/sanitizer_mac.h"
-#include <crt_externs.h> // for _NSGetArgv
+#if !SANITIZER_IOS
+#include <crt_externs.h> // for _NSGetArgv and _NSGetEnviron
+#else
+extern "C" {
+ extern char ***_NSGetArgv(void);
+}
+#endif
+
#include <dlfcn.h> // for dladdr()
#include <mach-o/dyld.h>
#include <mach-o/loader.h>
@@ -40,19 +47,7 @@
namespace __asan {
-void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
- ucontext_t *ucontext = (ucontext_t*)context;
-# if SANITIZER_WORDSIZE == 64
- *pc = ucontext->uc_mcontext->__ss.__rip;
- *bp = ucontext->uc_mcontext->__ss.__rbp;
- *sp = ucontext->uc_mcontext->__ss.__rsp;
-# else
- *pc = ucontext->uc_mcontext->__ss.__eip;
- *bp = ucontext->uc_mcontext->__ss.__ebp;
- *sp = ucontext->uc_mcontext->__ss.__esp;
-# endif // SANITIZER_WORDSIZE
-}
-
+void InitializePlatformInterceptors() {}
bool PlatformHasDifferentMemcpyAndMemmove() {
// On OS X 10.7 memcpy() and memmove() are both resolved
@@ -74,30 +69,27 @@ LowLevelAllocator allocator_for_env;
// otherwise the corresponding "NAME=value" string is replaced with
// |name_value|.
void LeakyResetEnv(const char *name, const char *name_value) {
- char ***env_ptr = _NSGetEnviron();
- CHECK(env_ptr);
- char **environ = *env_ptr;
- CHECK(environ);
+ char **env = GetEnviron();
uptr name_len = internal_strlen(name);
- while (*environ != 0) {
- uptr len = internal_strlen(*environ);
+ while (*env != 0) {
+ uptr len = internal_strlen(*env);
if (len > name_len) {
- const char *p = *environ;
+ const char *p = *env;
if (!internal_memcmp(p, name, name_len) && p[name_len] == '=') {
// Match.
if (name_value) {
// Replace the old value with the new one.
- *environ = const_cast<char*>(name_value);
+ *env = const_cast<char*>(name_value);
} else {
// Shift the subsequent pointers back.
- char **del = environ;
+ char **del = env;
do {
del[0] = del[1];
} while (*del++);
}
}
}
- environ++;
+ env++;
}
}
@@ -107,6 +99,23 @@ void DisableReexec() {
reexec_disabled = true;
}
+bool DyldNeedsEnvVariable() {
+// If running on OS X 10.11+ or iOS 9.0+, dyld will interpose even if
+// DYLD_INSERT_LIBRARIES is not set.
+
+#if SANITIZER_IOSSIM
+ // GetMacosVersion will not work for the simulator, whose kernel version
+ // is tied to the host. Use a weak linking hack for the simulator.
+ // This API was introduced in the same version of the OS as the dyld
+ // optimization.
+
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list