hanchenye-llvm-project/compiler-rt/lib/sanitizer_common
Kostya Kortchinsky 0d3439a29c [sanitizer] Do not over-dup string flags
Summary:
String flags values appear to be duped twice. Once in `FlagParser::parse_flag`
using the `LowLevelAllocator` via `ll_strndup`, once in
`FlagHandler<const char *>::Parse` using the `InternalAllocator` via
`internal_strdup`. It looks like the second one is redundant, as the memory
for the first one is never freed and not used for anything else.

Assigning the value to the flag instead of duping it has a few advantages:
- if it was the only use of the `InternalAllocator` (which is the case for
  Scudo), then the related code will not be compiled it, which saves us a
  whole instantiation of the CombinedAllocator worth of extra code;
- in the event a string flag is parsed, the `InternalAllocator` would have
  created a whole SizeClassAllocator32 region for a single allocation, which is
  kind of wasteful.
- also, the string is dup'ed twice for the whole lifetime of a process.

I tested check-{sanitizer,asan,tsan,ubsan,scudo} successfully, so as far as I
can tell this doesn't appear to have bad side effects.

Reviewers: eugenis, alekseyshl

Reviewed By: eugenis

Subscribers: kubamracek, llvm-commits

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

llvm-svn: 311386
2017-08-21 21:25:38 +00:00
..
scripts [asan] fix one more case where stack-use-after-return is not async-signal-safe (during thread startup). beef-up the test to give it a chance to catch regressions. Also relax the lint to make C++11 more usable. 2017-06-02 21:32:04 +00:00
symbolizer [sanitizer] Fix symbolizer build after r304864. 2017-06-07 17:24:58 +00:00
tests [sanitizers CMake] NFC Refactor the logic for compiling and generating tests 2017-08-15 22:56:10 +00:00
.clang-format
.clang-tidy [sanitizers] specifying style for global constant 2016-11-17 21:57:43 +00:00
CMakeLists.txt [sanitizer_common] Fuchsia-specific implementation of SanitizerCoverage 2017-08-02 07:51:38 +00:00
sancov_flags.cc General definition for weak functions 2017-01-29 05:44:59 +00:00
sancov_flags.h [sancov] Move __sancov_default_options declaration outside the namespace __sancov 2017-02-01 01:36:19 +00:00
sancov_flags.inc Revert "[sancov] moving sancov rt to sancov/ directory" 2017-01-12 01:37:35 +00:00
sanitizer_addrhashmap.h adding operator* to help working with primitive values 2016-11-16 19:35:37 +00:00
sanitizer_allocator.cc [Sanitizers] ASan/MSan/LSan allocators set errno on failure. 2017-07-18 19:11:04 +00:00
sanitizer_allocator.h [Sanitizers] ASan/MSan/LSan allocators set errno on failure. 2017-07-18 19:11:04 +00:00
sanitizer_allocator_bytemap.h [sanitizers] split sanitizer_allocator.h into a number of smaller .h files; NFC 2016-07-20 22:06:41 +00:00
sanitizer_allocator_checks.h [scudo] Check for pvalloc overflow 2017-07-25 21:18:02 +00:00
sanitizer_allocator_combined.h [Sanitizers] Move cached allocator_may_return_null flag to sanitizer_allocator 2017-06-20 21:23:02 +00:00
sanitizer_allocator_interface.h [asan] add one more argument to __sanitizer_print_memory_profile, remove a redundant weak definition. 2017-03-15 23:27:14 +00:00
sanitizer_allocator_internal.h [Sanitizers] Move cached allocator_may_return_null flag to sanitizer_allocator 2017-06-20 21:23:02 +00:00
sanitizer_allocator_local_cache.h [Sanitizers] 64 bit allocator respects allocator_may_return_null flag 2017-06-26 22:54:10 +00:00
sanitizer_allocator_primary32.h [sanitizer] Small tweaks and fixes to allocator related functions 2017-06-30 16:05:40 +00:00
sanitizer_allocator_primary64.h [sanitizer] Small tweaks and fixes to allocator related functions 2017-06-30 16:05:40 +00:00
sanitizer_allocator_secondary.h [Sanitizers] Move cached allocator_may_return_null flag to sanitizer_allocator 2017-06-20 21:23:02 +00:00
sanitizer_allocator_size_class_map.h [sanitizer] extend SizeClassMap to take more template parameters, add VeryCompactSizeClassMap for testing purposes 2016-08-31 17:52:55 +00:00
sanitizer_allocator_stats.h [sanitizers] split sanitizer_allocator.h into a number of smaller .h files; NFC 2016-07-20 22:06:41 +00:00
sanitizer_asm.h
sanitizer_atomic.h Return memory to OS right after free (not in the async thread). 2016-11-29 00:22:50 +00:00
sanitizer_atomic_clang.h [mips][compiler-rt] Fix build breakage. 2017-06-21 11:29:15 +00:00
sanitizer_atomic_clang_other.h [mips][compiler-rt] Fix build breakage. 2017-06-21 11:29:15 +00:00
sanitizer_atomic_clang_x86.h
sanitizer_atomic_msvc.h
sanitizer_bitvector.h
sanitizer_bvgraph.h
sanitizer_common.cc Only scan global sections containing data in LSan on darwin 2017-07-25 18:16:58 +00:00
sanitizer_common.h [sanitizers] Add a blocking boolean to GetRandom prototype 2017-08-14 14:53:47 +00:00
sanitizer_common_interceptors.inc [sanitizer_common] Rename SI_NOT_WINDOWS to SI_POSIX 2017-07-31 05:58:15 +00:00
sanitizer_common_interceptors_format.inc [asan] print the 'unexpected format specifier in printf interceptor' warning just once (came up in https://github.com/google/oss-fuzz/pull/562). Not touching a similar scanf warning -- for some reason it does not fire for me. 2017-05-03 18:38:34 +00:00
sanitizer_common_interceptors_ioctl.inc sanitizer_common: Fix warning 2016-08-16 18:28:55 +00:00
sanitizer_common_interface.inc [asan] add one more argument to __sanitizer_print_memory_profile, remove a redundant weak definition. 2017-03-15 23:27:14 +00:00
sanitizer_common_interface_posix.inc [sanitizer] Add list of symbols exported in sanitizers' interface. 2017-01-31 20:23:21 +00:00
sanitizer_common_libcdep.cc [sanitizer_common] Disable filesystem-related code for Fuchsia 2017-08-01 21:28:39 +00:00
sanitizer_common_nolibc.cc tsan: fix build after 287632 2016-11-22 11:09:35 +00:00
sanitizer_common_syscalls.inc
sanitizer_coverage_fuchsia.cc [sanitizer_common] Update sanitizers w.r.t. the new comparisons instrumentation API 2017-08-10 14:22:57 +00:00
sanitizer_coverage_interface.inc [sanitizer_common] Update sanitizers w.r.t. the new comparisons instrumentation API 2017-08-10 14:22:57 +00:00
sanitizer_coverage_libcdep_new.cc [sanitizer_common] Update sanitizers w.r.t. the new comparisons instrumentation API 2017-08-10 14:22:57 +00:00
sanitizer_coverage_win_dll_thunk.cc [sanitizer] Intercept weak functions in dll_thunks. 2017-02-02 23:01:34 +00:00
sanitizer_coverage_win_dynamic_runtime_thunk.cc [sanitizer] Add dynamic_runtime_thunk for different sanitizers. 2017-02-02 23:01:41 +00:00
sanitizer_coverage_win_sections.cc [sancov] Define delimiters for sanitizer coverage's binary section on Windows. 2017-02-02 23:02:15 +00:00
sanitizer_coverage_win_weak_interception.cc [sanitizer] Use interception to access to strong definitions in the executable. 2017-02-02 23:02:11 +00:00
sanitizer_dbghelp.h [asan/win] Delay load dbghelp.dll to delay ucrtbase.dll initialization 2016-11-14 17:37:50 +00:00
sanitizer_deadlock_detector.h
sanitizer_deadlock_detector1.cc
sanitizer_deadlock_detector2.cc
sanitizer_deadlock_detector_interface.h
sanitizer_errno.cc [Sanitizers] Consolidate internal errno definitions. 2017-07-06 00:50:57 +00:00
sanitizer_errno.h Add NetBSD support in sanitizer_errno.h 2017-08-05 18:10:51 +00:00
sanitizer_errno_codes.h [Sanitizers] Consolidate internal errno definitions. 2017-07-06 00:50:57 +00:00
sanitizer_file.cc [sanitizer_common] Disable filesystem-related code for Fuchsia 2017-08-01 21:28:39 +00:00
sanitizer_file.h [sanitizer_common] Move filesystem-related code out of sanitizer_common.cc 2017-07-22 01:46:40 +00:00
sanitizer_flag_parser.cc
sanitizer_flag_parser.h [sanitizer] Do not over-dup string flags 2017-08-21 21:25:38 +00:00
sanitizer_flags.cc [ASan] Report illegal instruction exceptions in ASan 2016-08-03 18:13:14 +00:00
sanitizer_flags.h [compiler-rt] Replace allow_user_segv_handler=0 with kHandleSignalExclusive 2017-05-25 23:42:33 +00:00
sanitizer_flags.inc [asan] Fix typo in doc string. 2017-06-15 00:31:59 +00:00
sanitizer_freebsd.h
sanitizer_fuchsia.cc [asan] Complete the Fuchsia port 2017-08-09 00:21:45 +00:00
sanitizer_fuchsia.h [sanitizer_common] Fuchsia OS support code 2017-08-01 22:22:25 +00:00
sanitizer_interface_internal.h [sanitizer_common] Update sanitizers w.r.t. the new comparisons instrumentation API 2017-08-10 14:22:57 +00:00
sanitizer_internal_defs.h Define OFF_T as 64-bit integer on NetBSD 2017-08-08 11:40:15 +00:00
sanitizer_lfstack.h
sanitizer_libc.cc [compiler-rt] Add internal wcslen to avoid crashing on windows 64-bits 2016-07-14 22:13:41 +00:00
sanitizer_libc.h Fix clang-cl warning and crash in sanitizers 2016-07-21 18:31:01 +00:00
sanitizer_libignore.cc Honour 80-character line limit 2017-07-20 14:15:00 +00:00
sanitizer_libignore.h [tsan] Implement a 'ignore_noninstrumented_modules' flag to better suppress false positive races 2017-01-11 00:54:26 +00:00
sanitizer_linux.cc [sanitizers] Add a blocking boolean to GetRandom prototype 2017-08-14 14:53:47 +00:00
sanitizer_linux.h Reuse sanitizer_linux for NetBSD 2017-08-08 20:36:10 +00:00
sanitizer_linux_libcdep.cc Add NetBSD support in sanitizer_linux_libcdep.cc 2017-08-04 22:32:46 +00:00
sanitizer_linux_mips64.S [ESan][MIPS] Adds support for MIPS64 2016-10-06 09:58:11 +00:00
sanitizer_linux_s390.cc [sanitizer] [SystemZ] Update CVE-2016-2143 check for Ubuntu 16.04 2017-05-24 15:06:33 +00:00
sanitizer_linux_x86_64.S
sanitizer_list.h Whenever reasonable, merge ASAN quarantine batches to save memory. 2017-01-19 22:15:54 +00:00
sanitizer_mac.cc [sanitizers] Add a blocking boolean to GetRandom prototype 2017-08-14 14:53:47 +00:00
sanitizer_mac.h [asan] For iOS/AArch64, if the dynamic shadow doesn't fit, restrict the VM space 2017-07-12 23:29:21 +00:00
sanitizer_mac_libcdep.cc [asan] For iOS/AArch64, if the dynamic shadow doesn't fit, restrict the VM space 2017-07-12 23:29:21 +00:00
sanitizer_malloc_mac.inc Free zone name when destroying malloc zone 2017-04-13 14:00:24 +00:00
sanitizer_mutex.h Remove strict tid checks from the mac implementation of BlockingMutex 2017-02-09 19:29:11 +00:00
sanitizer_persistent_allocator.cc
sanitizer_persistent_allocator.h
sanitizer_placement_new.h
sanitizer_platform.h [asan] Allocator support for Fuchsia 2017-08-03 02:22:11 +00:00
sanitizer_platform_interceptors.h [sanitizer_common] Fuchsia support for interceptors 2017-08-01 21:15:19 +00:00
sanitizer_platform_limits_linux.cc [sanitizer] Add a bunch of ifdefs for sparc targets to avoid build failures. 2016-12-02 08:07:35 +00:00
sanitizer_platform_limits_posix.cc [Sanitizers] Consolidate internal errno definitions. 2017-07-06 00:50:57 +00:00
sanitizer_platform_limits_posix.h [Sanitizers] Consolidate internal errno definitions. 2017-07-06 00:50:57 +00:00
sanitizer_posix.cc [sanitizer_common] Move filesystem-related code out of sanitizer_common.cc 2017-07-22 01:46:40 +00:00
sanitizer_posix.h Don't assume PTHREAD_CREATE_JOINABLE is 0 on all systems 2017-04-13 17:28:52 +00:00
sanitizer_posix_libcdep.cc Revert "[compiler-rt] Don't reset non-default user handler if allow_user_segv_handler is true." 2017-06-21 01:10:23 +00:00
sanitizer_printf.cc [sanitizer_common] Fuchsia OS support code 2017-08-01 22:22:25 +00:00
sanitizer_procmaps.h Add address ranges for individual macho sections on darwin 2017-07-25 15:27:32 +00:00
sanitizer_procmaps_common.cc Fix unused variable warning with MemoryMappedSegment private data 2017-07-25 17:28:41 +00:00
sanitizer_procmaps_freebsd.cc Add NetBSD support in sanitizer_procmaps_freebsd.cc 2017-08-04 20:17:24 +00:00
sanitizer_procmaps_linux.cc Use internal_strncpy to copy filename in linux procmaps 2017-07-11 19:40:54 +00:00
sanitizer_procmaps_mac.cc Only scan global sections containing data in LSan on darwin 2017-07-25 18:16:58 +00:00
sanitizer_quarantine.h Whenever reasonable, merge ASAN quarantine batches to save memory. 2017-01-19 22:15:54 +00:00
sanitizer_report_decorator.h
sanitizer_stackdepot.cc rename InternalBinarySearch to InternalLowerBound 2016-11-18 20:48:52 +00:00
sanitizer_stackdepot.h
sanitizer_stackdepotbase.h
sanitizer_stacktrace.cc Revert "[PowerPC] Fix sanitizer frame unwind on 32-bit ABIs" 2017-03-17 01:15:39 +00:00
sanitizer_stacktrace.h
sanitizer_stacktrace_libcdep.cc Do not crash with missing symbolication when running in DEDUP mode 2017-07-10 20:06:06 +00:00
sanitizer_stacktrace_printer.cc [sanitizer_common] Fuchsia-specific symbolizer 2017-08-01 22:54:51 +00:00
sanitizer_stacktrace_printer.h [sanitizer] Use architecture/slice information when symbolizing fat Mach-O files on Darwin 2017-01-06 21:45:05 +00:00
sanitizer_stoptheworld.h Update suspended threads info to be compatible with darwin 2017-04-17 20:29:38 +00:00
sanitizer_stoptheworld_linux_libcdep.cc Fix sanitizer build against latest glibc 2017-07-13 21:59:01 +00:00
sanitizer_stoptheworld_mac.cc [sanitizer] Remove use of task_for_pid from sanitizer_stoptheworld_mac.cc 2017-08-07 18:07:20 +00:00
sanitizer_suppressions.cc [sanitizer_common] Disable filesystem-related code for Fuchsia 2017-08-01 21:28:39 +00:00
sanitizer_suppressions.h
sanitizer_symbolizer.cc [sanitizer] Use architecture/slice information when symbolizing fat Mach-O files on Darwin 2017-01-06 21:45:05 +00:00
sanitizer_symbolizer.h [sanitizer] Use architecture/slice information when symbolizing fat Mach-O files on Darwin 2017-01-06 21:45:05 +00:00
sanitizer_symbolizer_fuchsia.cc [sanitizer_common] Fuchsia-specific symbolizer 2017-08-01 22:54:51 +00:00
sanitizer_symbolizer_internal.h [sanitizer_common] Move filesystem-related code out of sanitizer_common.cc 2017-07-22 01:46:40 +00:00
sanitizer_symbolizer_libbacktrace.cc
sanitizer_symbolizer_libbacktrace.h
sanitizer_symbolizer_libcdep.cc [compiler-rt] Check for empty buffer in Addr2LineProcess::ReadFromSymbolizer 2017-08-04 18:39:36 +00:00
sanitizer_symbolizer_mac.cc [compiler-rt] Remove the system includes from __sanitizer namespace 2016-09-15 21:02:22 +00:00
sanitizer_symbolizer_mac.h
sanitizer_symbolizer_posix_libcdep.cc [compiler-rt] Check for empty buffer in Addr2LineProcess::ReadFromSymbolizer 2017-08-04 18:39:36 +00:00
sanitizer_symbolizer_win.cc [asan/win] Delay load dbghelp.dll to delay ucrtbase.dll initialization 2016-11-14 17:37:50 +00:00
sanitizer_syscall_generic.inc Add NetBSD support in sanitizer_syscall_generic.inc 2017-08-04 22:23:52 +00:00
sanitizer_syscall_linux_aarch64.inc
sanitizer_syscall_linux_x86_64.inc
sanitizer_termination.cc
sanitizer_thread_registry.cc [asan] Refactor thread creation bookkeeping 2017-08-09 00:38:57 +00:00
sanitizer_thread_registry.h [sanitizer] Introduce tid_t as a typedef for OS-provided thread IDs 2017-04-17 18:17:38 +00:00
sanitizer_tls_get_addr.cc [compiler-rt] Replace VPrintf with VReport in sanitizer_tls_get_addr.cc 2017-07-20 01:36:16 +00:00
sanitizer_tls_get_addr.h [lsan] Avoid segfaults during threads destruction under high load 2017-04-06 07:42:27 +00:00
sanitizer_unwind_linux_libcdep.cc Add NetBSD support in sanitizer_unwind_linux_libcdep.cc 2017-08-05 13:36:49 +00:00
sanitizer_win.cc [sanitizers] Add a blocking boolean to GetRandom prototype 2017-08-14 14:53:47 +00:00
sanitizer_win.h [sanitizer] Move exception code to sanitizer_common. 2017-02-02 23:01:51 +00:00
sanitizer_win_defs.h [sanitizer] if WINAPI is already defined, do not redefine it 2017-02-08 18:34:05 +00:00
sanitizer_win_dll_thunk.cc [sanitizer] Intercept weak functions in dll_thunks. 2017-02-02 23:01:34 +00:00
sanitizer_win_dll_thunk.h [compiler-rt][asan] Fix incorrect macro preventing ICF with MSVC 2017-02-21 20:04:47 +00:00
sanitizer_win_dynamic_runtime_thunk.cc [sanitizer] Add dynamic_runtime_thunk for different sanitizers. 2017-02-02 23:01:41 +00:00
sanitizer_win_weak_interception.cc [sanitizer] Add weak hooks for Windows. 2017-02-08 06:31:56 +00:00
sanitizer_win_weak_interception.h [sanitizer] Use interception to access to strong definitions in the executable. 2017-02-02 23:02:11 +00:00
weak_symbols.txt [sanitizer] Define as weak, functions that are declared as weak. 2017-01-31 20:23:14 +00:00