57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- scudo_unit_test_main.cpp --------------------------------*- C++ -*-===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "memtag.h"
 | |
| #include "tests/scudo_unit_test.h"
 | |
| 
 | |
| // Match Android's default configuration, which disables Scudo's mismatch
 | |
| // allocation check, as it is being triggered by some third party code.
 | |
| #if SCUDO_ANDROID
 | |
| #define DEALLOC_TYPE_MISMATCH "false"
 | |
| #else
 | |
| #define DEALLOC_TYPE_MISMATCH "true"
 | |
| #endif
 | |
| 
 | |
| static void EnableMemoryTaggingIfSupported() {
 | |
|   if (!scudo::archSupportsMemoryTagging())
 | |
|     return;
 | |
|   static bool Done = []() {
 | |
|     if (!scudo::systemDetectsMemoryTagFaultsTestOnly())
 | |
|       scudo::enableSystemMemoryTaggingTestOnly();
 | |
|     return true;
 | |
|   }();
 | |
|   (void)Done;
 | |
| }
 | |
| 
 | |
| // This allows us to turn on/off a Quarantine for specific tests. The Quarantine
 | |
| // parameters are on the low end, to avoid having to loop excessively in some
 | |
| // tests.
 | |
| bool UseQuarantine = true;
 | |
| extern "C" __attribute__((visibility("default"))) const char *
 | |
| __scudo_default_options() {
 | |
|   // The wrapper tests initialize the global allocator early, before main(). We
 | |
|   // need to have Memory Tagging enabled before that happens or the allocator
 | |
|   // will disable the feature entirely.
 | |
|   EnableMemoryTaggingIfSupported();
 | |
|   if (!UseQuarantine)
 | |
|     return "dealloc_type_mismatch=" DEALLOC_TYPE_MISMATCH;
 | |
|   return "quarantine_size_kb=256:thread_local_quarantine_size_kb=128:"
 | |
|          "quarantine_max_chunk_size=512:"
 | |
|          "dealloc_type_mismatch=" DEALLOC_TYPE_MISMATCH;
 | |
| }
 | |
| 
 | |
| // The zxtest library provides a default main function that does the same thing
 | |
| // for Fuchsia builds.
 | |
| #if !SCUDO_FUCHSIA
 | |
| int main(int argc, char **argv) {
 | |
|   EnableMemoryTaggingIfSupported();
 | |
|   testing::InitGoogleTest(&argc, argv);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | |
| #endif
 |