Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: base/allocator/allocator_shim.cc

Issue 212643015: Use SYZYASAN instead of ADDRESS_SANITIZER. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/process/process_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/allocator/allocator_shim.h" 5 #include "base/allocator/allocator_shim.h"
6 6
7 #include <config.h> 7 #include <config.h>
8 #include "base/allocator/allocator_extension_thunks.h" 8 #include "base/allocator/allocator_extension_thunks.h"
9 #include "base/profiler/alternate_timer.h" 9 #include "base/profiler/alternate_timer.h"
10 #include "base/sysinfo.h" 10 #include "base/sysinfo.h"
(...skipping 23 matching lines...) Expand all
34 TCMALLOC, // TCMalloc is the default allocator. 34 TCMALLOC, // TCMalloc is the default allocator.
35 WINHEAP, // Windows Heap (standard Windows allocator). 35 WINHEAP, // Windows Heap (standard Windows allocator).
36 WINLFH, // Windows LFH Heap. 36 WINLFH, // Windows LFH Heap.
37 } Allocator; 37 } Allocator;
38 38
39 // This is the default allocator. This value can be changed at startup by 39 // This is the default allocator. This value can be changed at startup by
40 // specifying environment variables shown below it. 40 // specifying environment variables shown below it.
41 // See SetupSubprocessAllocator() to specify a default secondary (subprocess) 41 // See SetupSubprocessAllocator() to specify a default secondary (subprocess)
42 // allocator. 42 // allocator.
43 // TODO(jar): Switch to using TCMALLOC for the renderer as well. 43 // TODO(jar): Switch to using TCMALLOC for the renderer as well.
44 #if (defined(ADDRESS_SANITIZER) && defined(OS_WIN)) 44 #if defined(SYZYASAN)
45 // The Windows implementation of Asan requires the use of "WINHEAP". 45 // SyzyASan requires the use of "WINHEAP".
46 static Allocator allocator = WINHEAP; 46 static Allocator allocator = WINHEAP;
47 #else 47 #else
48 static Allocator allocator = TCMALLOC; 48 static Allocator allocator = TCMALLOC;
49 #endif 49 #endif
50 // The names of the environment variables that can optionally control the 50 // The names of the environment variables that can optionally control the
51 // selection of the allocator. The primary may be used to control overall 51 // selection of the allocator. The primary may be used to control overall
52 // allocator selection, and the secondary can be used to specify an allocator 52 // allocator selection, and the secondary can be used to specify an allocator
53 // to use in sub-processes. 53 // to use in sub-processes.
54 static const char primary_name[] = "CHROME_ALLOCATOR"; 54 static const char primary_name[] = "CHROME_ALLOCATOR";
55 static const char secondary_name[] = "CHROME_ALLOCATOR_2"; 55 static const char secondary_name[] = "CHROME_ALLOCATOR_2";
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 static void get_stats_thunk(char* buffer, int buffer_length) { 221 static void get_stats_thunk(char* buffer, int buffer_length) {
222 MallocExtension::instance()->GetStats(buffer, buffer_length); 222 MallocExtension::instance()->GetStats(buffer, buffer_length);
223 } 223 }
224 224
225 static void release_free_memory_thunk() { 225 static void release_free_memory_thunk() {
226 MallocExtension::instance()->ReleaseFreeMemory(); 226 MallocExtension::instance()->ReleaseFreeMemory();
227 } 227 }
228 228
229 // The CRT heap initialization stub. 229 // The CRT heap initialization stub.
230 extern "C" int _heap_init() { 230 extern "C" int _heap_init() {
231 // Don't use the environment variable if ADDRESS_SANITIZER is defined on 231 // Don't use the environment variable if SYZYASAN is defined, as the
232 // Windows, as the implementation requires Winheap to be the allocator. 232 // implementation requires Winheap to be the allocator.
233 #if !(defined(ADDRESS_SANITIZER) && defined(OS_WIN)) 233 #if !defined(SYZYASAN)
234 const char* environment_value = GetenvBeforeMain(primary_name); 234 const char* environment_value = GetenvBeforeMain(primary_name);
235 if (environment_value) { 235 if (environment_value) {
236 if (!stricmp(environment_value, "winheap")) 236 if (!stricmp(environment_value, "winheap"))
237 allocator = WINHEAP; 237 allocator = WINHEAP;
238 else if (!stricmp(environment_value, "winlfh")) 238 else if (!stricmp(environment_value, "winlfh"))
239 allocator = WINLFH; 239 allocator = WINLFH;
240 else if (!stricmp(environment_value, "tcmalloc")) 240 else if (!stricmp(environment_value, "tcmalloc"))
241 allocator = TCMALLOC; 241 allocator = TCMALLOC;
242 } 242 }
243 #endif 243 #endif
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 size_t primary_length = 0; 349 size_t primary_length = 0;
350 getenv_s(&primary_length, NULL, 0, primary_name); 350 getenv_s(&primary_length, NULL, 0, primary_name);
351 351
352 size_t secondary_length = 0; 352 size_t secondary_length = 0;
353 char buffer[20]; 353 char buffer[20];
354 getenv_s(&secondary_length, buffer, sizeof(buffer), secondary_name); 354 getenv_s(&secondary_length, buffer, sizeof(buffer), secondary_name);
355 DCHECK_GT(sizeof(buffer), secondary_length); 355 DCHECK_GT(sizeof(buffer), secondary_length);
356 buffer[sizeof(buffer) - 1] = '\0'; 356 buffer[sizeof(buffer) - 1] = '\0';
357 357
358 if (secondary_length || !primary_length) { 358 if (secondary_length || !primary_length) {
359 // Don't use the environment variable if ADDRESS_SANITIZER is defined on 359 // Don't use the environment variable if SYZYASAN is defined, as the
360 // Windows, as the implementation require Winheap to be the allocator. 360 // implementation require Winheap to be the allocator.
361 #if !(defined(ADDRESS_SANITIZER) && defined(OS_WIN)) 361 #if !defined(SYZYASAN)
362 const char* secondary_value = secondary_length ? buffer : "TCMALLOC"; 362 const char* secondary_value = secondary_length ? buffer : "TCMALLOC";
363 // Force renderer (or other subprocesses) to use secondary_value. 363 // Force renderer (or other subprocesses) to use secondary_value.
364 #else 364 #else
365 const char* secondary_value = "WINHEAP"; 365 const char* secondary_value = "WINHEAP";
366 #endif 366 #endif
367 int ret_val = _putenv_s(primary_name, secondary_value); 367 int ret_val = _putenv_s(primary_name, secondary_value);
368 DCHECK_EQ(0, ret_val); 368 DCHECK_EQ(0, ret_val);
369 } 369 }
370 } 370 }
371 371
372 void* TCMallocDoMallocForTest(size_t size) { 372 void* TCMallocDoMallocForTest(size_t size) {
373 return do_malloc(size); 373 return do_malloc(size);
374 } 374 }
375 375
376 void TCMallocDoFreeForTest(void* ptr) { 376 void TCMallocDoFreeForTest(void* ptr) {
377 do_free(ptr); 377 do_free(ptr);
378 } 378 }
379 379
380 size_t ExcludeSpaceForMarkForTest(size_t size) { 380 size_t ExcludeSpaceForMarkForTest(size_t size) {
381 return ExcludeSpaceForMark(size); 381 return ExcludeSpaceForMark(size);
382 } 382 }
383 383
384 } // namespace allocator. 384 } // namespace allocator.
385 } // namespace base. 385 } // namespace base.
OLDNEW
« no previous file with comments | « no previous file | base/process/process_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698