xref: /openbsd-src/gnu/llvm/compiler-rt/lib/scudo/standalone/wrappers_c_bionic.cpp (revision d89ec533011f513df1010f142a111086a0785f09)
13cab2bb3Spatrick //===-- wrappers_c_bionic.cpp -----------------------------------*- C++ -*-===//
23cab2bb3Spatrick //
33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information.
53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63cab2bb3Spatrick //
73cab2bb3Spatrick //===----------------------------------------------------------------------===//
83cab2bb3Spatrick 
93cab2bb3Spatrick #include "platform.h"
103cab2bb3Spatrick 
113cab2bb3Spatrick // This is only used when compiled as part of Bionic.
123cab2bb3Spatrick #if SCUDO_ANDROID && _BIONIC
133cab2bb3Spatrick 
143cab2bb3Spatrick #include "allocator_config.h"
153cab2bb3Spatrick #include "wrappers_c.h"
163cab2bb3Spatrick #include "wrappers_c_checks.h"
173cab2bb3Spatrick 
183cab2bb3Spatrick #include <stdint.h>
193cab2bb3Spatrick #include <stdio.h>
203cab2bb3Spatrick 
213cab2bb3Spatrick // Regular MallocDispatch definitions.
223cab2bb3Spatrick #define SCUDO_PREFIX(name) CONCATENATE(scudo_, name)
233cab2bb3Spatrick #define SCUDO_ALLOCATOR Allocator
243cab2bb3Spatrick 
253cab2bb3Spatrick extern "C" void SCUDO_PREFIX(malloc_postinit)();
26*d89ec533Spatrick SCUDO_REQUIRE_CONSTANT_INITIALIZATION
273cab2bb3Spatrick static scudo::Allocator<scudo::AndroidConfig, SCUDO_PREFIX(malloc_postinit)>
283cab2bb3Spatrick     SCUDO_ALLOCATOR;
293cab2bb3Spatrick 
303cab2bb3Spatrick #include "wrappers_c.inc"
313cab2bb3Spatrick 
323cab2bb3Spatrick #undef SCUDO_ALLOCATOR
333cab2bb3Spatrick #undef SCUDO_PREFIX
343cab2bb3Spatrick 
353cab2bb3Spatrick // Svelte MallocDispatch definitions.
363cab2bb3Spatrick #define SCUDO_PREFIX(name) CONCATENATE(scudo_svelte_, name)
373cab2bb3Spatrick #define SCUDO_ALLOCATOR SvelteAllocator
383cab2bb3Spatrick 
393cab2bb3Spatrick extern "C" void SCUDO_PREFIX(malloc_postinit)();
40*d89ec533Spatrick SCUDO_REQUIRE_CONSTANT_INITIALIZATION
413cab2bb3Spatrick static scudo::Allocator<scudo::AndroidSvelteConfig,
423cab2bb3Spatrick                         SCUDO_PREFIX(malloc_postinit)>
433cab2bb3Spatrick     SCUDO_ALLOCATOR;
443cab2bb3Spatrick 
453cab2bb3Spatrick #include "wrappers_c.inc"
463cab2bb3Spatrick 
473cab2bb3Spatrick #undef SCUDO_ALLOCATOR
483cab2bb3Spatrick #undef SCUDO_PREFIX
493cab2bb3Spatrick 
501f9cb04fSpatrick // TODO(kostyak): support both allocators.
__scudo_print_stats(void)511f9cb04fSpatrick INTERFACE void __scudo_print_stats(void) { Allocator.printStats(); }
521f9cb04fSpatrick 
53*d89ec533Spatrick INTERFACE void
__scudo_get_error_info(struct scudo_error_info * error_info,uintptr_t fault_addr,const char * stack_depot,const char * region_info,const char * ring_buffer,const char * memory,const char * memory_tags,uintptr_t memory_addr,size_t memory_size)54*d89ec533Spatrick __scudo_get_error_info(struct scudo_error_info *error_info,
55*d89ec533Spatrick                        uintptr_t fault_addr, const char *stack_depot,
56*d89ec533Spatrick                        const char *region_info, const char *ring_buffer,
57*d89ec533Spatrick                        const char *memory, const char *memory_tags,
58*d89ec533Spatrick                        uintptr_t memory_addr, size_t memory_size) {
591f9cb04fSpatrick   Allocator.getErrorInfo(error_info, fault_addr, stack_depot, region_info,
60*d89ec533Spatrick                          ring_buffer, memory, memory_tags, memory_addr,
61*d89ec533Spatrick                          memory_size);
621f9cb04fSpatrick }
631f9cb04fSpatrick 
__scudo_get_stack_depot_addr()641f9cb04fSpatrick INTERFACE const char *__scudo_get_stack_depot_addr() {
651f9cb04fSpatrick   return Allocator.getStackDepotAddress();
661f9cb04fSpatrick }
671f9cb04fSpatrick 
__scudo_get_stack_depot_size()681f9cb04fSpatrick INTERFACE size_t __scudo_get_stack_depot_size() {
691f9cb04fSpatrick   return sizeof(scudo::StackDepot);
701f9cb04fSpatrick }
711f9cb04fSpatrick 
__scudo_get_region_info_addr()721f9cb04fSpatrick INTERFACE const char *__scudo_get_region_info_addr() {
731f9cb04fSpatrick   return Allocator.getRegionInfoArrayAddress();
741f9cb04fSpatrick }
751f9cb04fSpatrick 
__scudo_get_region_info_size()761f9cb04fSpatrick INTERFACE size_t __scudo_get_region_info_size() {
771f9cb04fSpatrick   return Allocator.getRegionInfoArraySize();
783cab2bb3Spatrick }
793cab2bb3Spatrick 
__scudo_get_ring_buffer_addr()80*d89ec533Spatrick INTERFACE const char *__scudo_get_ring_buffer_addr() {
81*d89ec533Spatrick   return Allocator.getRingBufferAddress();
82*d89ec533Spatrick }
83*d89ec533Spatrick 
__scudo_get_ring_buffer_size()84*d89ec533Spatrick INTERFACE size_t __scudo_get_ring_buffer_size() {
85*d89ec533Spatrick   return Allocator.getRingBufferSize();
86*d89ec533Spatrick }
87*d89ec533Spatrick 
883cab2bb3Spatrick #endif // SCUDO_ANDROID && _BIONIC
89