| //===-- 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 |