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
32 extern "C" {
33 #endif
34 typedef void* (*MallocMmapType) (void*, size_t, int, int, int, off_t);
35 typedef int (*MallocMunmapType) (void*, size_t);
36 typedef void* (*MallocMallocType)(size_t);
37 typedef void* (*MallocReallocType)(void*, size_t);
38 typedef void* (*MallocCallocType)(size_t, size_t);
39 typedef void* (*MallocVallocType)(size_t);
40 typedef void (*MallocFreeType)(void*);
41 typedef void* (*MallocAlignedAllocType)(size_t, size_t);
42 typedef size_t (*MallocMallocUsableSizeType)(void*);
43 typedef int (*MallocPrctlType)(int, ...);
44 
45 typedef struct mallinfo (*MallinfoType)(void);
46 typedef struct mallinfo2 (*Mallinfo2Type)(void);
47 typedef int (*MallocIterateType)(void*, size_t, void (*callback)(void*, size_t, void*), void*);
48 typedef void (*MallocDisableType)(void);
49 typedef void (*MallocEnableType)(void);
50 typedef int (*MallocInfoType)(int, FILE*);
51 typedef void (*MallocStatsPrintType)(void (*) (void *, const char *), void *, const char *);
52 typedef int (*MalloptType)(int, int);
53 typedef ssize_t (*MallocBacktraceType)(void*, uintptr_t*, size_t);
54 typedef void (*MemTrace)(void*, size_t, const char*, bool);
55 
56 typedef bool (*GetHookFlagType)();
57 typedef bool (*SetHookFlagType)(bool);
58 typedef bool (*SendHookMiscData)(uint64_t, const char*, size_t, uint32_t);
59 typedef void* (*GetHookConfig)();
60 
61 struct 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