1 //===-- wrappers_c.cpp ------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "platform.h" 10 11 // Skip this compilation unit if compiled as part of Bionic. 12 #if !SCUDO_ANDROID || !_BIONIC 13 14 #include "allocator_config.h" 15 #include "wrappers_c.h" 16 #include "wrappers_c_checks.h" 17 18 #include <stdint.h> 19 #include <stdio.h> 20 21 static scudo::Allocator<scudo::Config> Allocator; 22 // Pointer to the static allocator so that the C++ wrappers can access it. 23 // Technically we could have a completely separated heap for C & C++ but in 24 // reality the amount of cross pollination between the two is staggering. 25 scudo::Allocator<scudo::Config> *AllocatorPtr = &Allocator; 26 27 extern "C" { 28 29 #define SCUDO_PREFIX(name) name 30 #define SCUDO_ALLOCATOR Allocator 31 #include "wrappers_c.inc" 32 #undef SCUDO_ALLOCATOR 33 #undef SCUDO_PREFIX 34 35 INTERFACE void __scudo_print_stats(void) { Allocator.printStats(); } 36 37 } // extern "C" 38 39 #endif // !SCUDO_ANDROID || !_BIONIC 40