1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to
6 * deal in the Software without restriction, including without limitation the
7 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8 * sell copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 * IN THE SOFTWARE.
21 */
22
23#ifndef _MUSL_MALLOC_DISPATCH_H
24#define _MUSL_MALLOC_DISPATCH_H
25
26#include <stddef.h>
27#include <stdint.h>
28#include <stdio.h>
29#include <stdbool.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34typedef void* (*MallocMmapType) (void*, size_t, int, int, int, off_t);
35typedef int (*MallocMunmapType) (void*, size_t);
36typedef void* (*MallocMallocType)(size_t);
37typedef void* (*MallocReallocType)(void*, size_t);
38typedef void* (*MallocCallocType)(size_t, size_t);
39typedef void* (*MallocVallocType)(size_t);
40typedef void (*MallocFreeType)(void*);
41typedef void* (*MallocAlignedAllocType)(size_t, size_t);
42typedef size_t (*MallocMallocUsableSizeType)(void*);
43typedef int (*MallocPrctlType)(int, ...);
44
45typedef struct mallinfo (*MallinfoType)(void);
46typedef struct mallinfo2 (*Mallinfo2Type)(void);
47typedef int (*MallocIterateType)(void*, size_t, void (*callback)(void*, size_t, void*), void*);
48typedef void (*MallocDisableType)(void);
49typedef void (*MallocEnableType)(void);
50typedef int (*MallocInfoType)(int, FILE*);
51typedef void (*MallocStatsPrintType)(void (*) (void *, const char *), void *, const char *);
52typedef int (*MalloptType)(int, int);
53typedef ssize_t (*MallocBacktraceType)(void*, uintptr_t*, size_t);
54typedef void (*MemTrace)(void*, size_t, const char*, bool);
55
56typedef bool (*GetHookFlagType)();
57typedef bool (*SetHookFlagType)(bool);
58typedef bool (*SendHookMiscData)(uint64_t, const char*, size_t, uint32_t);
59typedef void* (*GetHookConfig)();
60
61struct MallocDispatchType {
62	MallocMmapType mmap;
63	MallocMunmapType munmap;
64	MallocMallocType malloc;
65	MallocCallocType calloc;
66	MallocReallocType realloc;
67	MallocVallocType valloc;
68	MallocFreeType free;
69	MallocAlignedAllocType aligned_alloc;
70	MallocMallocUsableSizeType malloc_usable_size;
71	MallinfoType mallinfo;
72	Mallinfo2Type mallinfo2;
73	MallocIterateType malloc_iterate;
74	MallocDisableType malloc_disable;
75	MallocEnableType malloc_enable;
76	MallocInfoType malloc_info;
77	MallocStatsPrintType malloc_stats_print;
78	MalloptType mallopt;
79	MallocBacktraceType malloc_backtrace;
80	GetHookFlagType get_hook_flag;
81	SetHookFlagType set_hook_flag;
82	MemTrace memtrace;
83	MallocPrctlType prctl;
84};
85#ifdef __cplusplus
86}
87#endif
88
89#endif
90