wrappers_c_bionic.cpp revision 360784
1//===-- wrappers_c_bionic.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// This is only used when 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// Regular MallocDispatch definitions.
22#define SCUDO_PREFIX(name) CONCATENATE(scudo_, name)
23#define SCUDO_ALLOCATOR Allocator
24
25extern "C" void SCUDO_PREFIX(malloc_postinit)();
26static scudo::Allocator<scudo::AndroidConfig, SCUDO_PREFIX(malloc_postinit)>
27    SCUDO_ALLOCATOR;
28// Pointer to the static allocator so that the C++ wrappers can access it.
29// Technically we could have a completely separated heap for C & C++ but in
30// reality the amount of cross pollination between the two is staggering.
31scudo::Allocator<scudo::AndroidConfig, SCUDO_PREFIX(malloc_postinit)> *
32    CONCATENATE(SCUDO_ALLOCATOR, Ptr) = &SCUDO_ALLOCATOR;
33
34#include "wrappers_c.inc"
35
36#undef SCUDO_ALLOCATOR
37#undef SCUDO_PREFIX
38
39// Svelte MallocDispatch definitions.
40#define SCUDO_PREFIX(name) CONCATENATE(scudo_svelte_, name)
41#define SCUDO_ALLOCATOR SvelteAllocator
42
43extern "C" void SCUDO_PREFIX(malloc_postinit)();
44static scudo::Allocator<scudo::AndroidSvelteConfig,
45                        SCUDO_PREFIX(malloc_postinit)>
46    SCUDO_ALLOCATOR;
47// Pointer to the static allocator so that the C++ wrappers can access it.
48// Technically we could have a completely separated heap for C & C++ but in
49// reality the amount of cross pollination between the two is staggering.
50scudo::Allocator<scudo::AndroidSvelteConfig, SCUDO_PREFIX(malloc_postinit)> *
51    CONCATENATE(SCUDO_ALLOCATOR, Ptr) = &SCUDO_ALLOCATOR;
52
53#include "wrappers_c.inc"
54
55#undef SCUDO_ALLOCATOR
56#undef SCUDO_PREFIX
57
58// The following is the only function that will end up initializing both
59// allocators, which will result in a slight increase in memory footprint.
60INTERFACE void __scudo_print_stats(void) {
61  Allocator.printStats();
62  SvelteAllocator.printStats();
63}
64
65#endif // SCUDO_ANDROID && _BIONIC
66