[compiler-rt] r311386 - [sanitizer] Do not over-dup string flags

Kostya Kortchinsky via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 21 14:25:38 PDT 2017


Author: cryptoad
Date: Mon Aug 21 14:25:38 2017
New Revision: 311386

URL: http://llvm.org/viewvc/llvm-project?rev=311386&view=rev
Log:
[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

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flag_parser.h

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flag_parser.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flag_parser.h?rev=311386&r1=311385&r2=311386&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flag_parser.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flag_parser.h Mon Aug 21 14:25:38 2017
@@ -75,7 +75,7 @@ inline bool FlagHandler<HandleSignalMode
 
 template <>
 inline bool FlagHandler<const char *>::Parse(const char *value) {
-  *t_ = internal_strdup(value);
+  *t_ = value;
   return true;
 }
 




More information about the llvm-commits mailing list