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