13c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao/*
23c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * Copyright (C) 2015 The Android Open Source Project
33c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * All rights reserved.
43c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *
53c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * Redistribution and use in source and binary forms, with or without
63c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * modification, are permitted provided that the following conditions
73c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * are met:
83c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *  * Redistributions of source code must retain the above copyright
93c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *    notice, this list of conditions and the following disclaimer.
103c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *  * Redistributions in binary form must reproduce the above copyright
113c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *    notice, this list of conditions and the following disclaimer in
123c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *    the documentation and/or other materials provided with the
133c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *    distribution.
143c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao *
153c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
163c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
173c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
183c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
193c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
203c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
213c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
223c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
233c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
243c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
253c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
263c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao * SUCH DAMAGE.
273c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao */
283c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao
293c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#ifndef _PRIVATE_BIONIC_MALLOC_DISPATCH_H
303c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#define _PRIVATE_BIONIC_MALLOC_DISPATCH_H
313c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao
323c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#include <stddef.h>
33c40577f740ae4f66cdba4b2137668fb3114bb99dColin Cross#include <stdint.h>
3463860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris#include <private/bionic_config.h>
353c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao
3663860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris// Entry in malloc dispatch table.
3763860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void* (*MallocCalloc)(size_t, size_t);
3863860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void (*MallocFree)(void*);
3963860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef struct mallinfo (*MallocMallinfo)();
4063860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void* (*MallocMalloc)(size_t);
4163860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef size_t (*MallocMallocUsableSize)(const void*);
4263860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void* (*MallocMemalign)(size_t, size_t);
4363860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef int (*MallocPosixMemalign)(void**, size_t, size_t);
4463860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void* (*MallocRealloc)(void*, size_t);
45c40577f740ae4f66cdba4b2137668fb3114bb99dColin Crosstypedef int (*MallocIterate)(uintptr_t, size_t, void (*)(uintptr_t, size_t, void*), void*);
46c40577f740ae4f66cdba4b2137668fb3114bb99dColin Crosstypedef void (*MallocMallocDisable)();
47c40577f740ae4f66cdba4b2137668fb3114bb99dColin Crosstypedef void (*MallocMallocEnable)();
48c40577f740ae4f66cdba4b2137668fb3114bb99dColin Cross
493c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#if defined(HAVE_DEPRECATED_MALLOC_FUNCS)
5063860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void* (*MallocPvalloc)(size_t);
5163860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferristypedef void* (*MallocValloc)(size_t);
523c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#endif
533c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao
5463860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferrisstruct MallocDispatch {
5563860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocCalloc calloc;
5663860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocFree free;
5763860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocMallinfo mallinfo;
5863860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocMalloc malloc;
5963860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocMallocUsableSize malloc_usable_size;
6063860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocMemalign memalign;
6163860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocPosixMemalign posix_memalign;
623c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#if defined(HAVE_DEPRECATED_MALLOC_FUNCS)
6363860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocPvalloc pvalloc;
643c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#endif
6563860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocRealloc realloc;
663c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#if defined(HAVE_DEPRECATED_MALLOC_FUNCS)
6763860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  MallocValloc valloc;
683c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#endif
69c40577f740ae4f66cdba4b2137668fb3114bb99dColin Cross  MallocIterate iterate;
70c40577f740ae4f66cdba4b2137668fb3114bb99dColin Cross  MallocMallocDisable malloc_disable;
71c40577f740ae4f66cdba4b2137668fb3114bb99dColin Cross  MallocMallocEnable malloc_enable;
723c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao} __attribute__((aligned(32)));
733c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao
743c8fc2fea9dac044f4903b0c315b5cda1c1f5301Josh Gao#endif
75