16b2c15daSJason Evans /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3e58eb3c4SPedro F. Giffuni * 46b2c15daSJason Evans * Copyright (C) 2006 Jason Evans <jasone@FreeBSD.org>. 56b2c15daSJason Evans * All rights reserved. 66b2c15daSJason Evans * 76b2c15daSJason Evans * Redistribution and use in source and binary forms, with or without 86b2c15daSJason Evans * modification, are permitted provided that the following conditions 96b2c15daSJason Evans * are met: 106b2c15daSJason Evans * 1. Redistributions of source code must retain the above copyright 116b2c15daSJason Evans * notice(s), this list of conditions and the following disclaimer as 126b2c15daSJason Evans * the first lines of this file unmodified other than the possible 136b2c15daSJason Evans * addition of one or more copyright notices. 146b2c15daSJason Evans * 2. Redistributions in binary form must reproduce the above copyright 156b2c15daSJason Evans * notice(s), this list of conditions and the following disclaimer in 166b2c15daSJason Evans * the documentation and/or other materials provided with the 176b2c15daSJason Evans * distribution. 186b2c15daSJason Evans * 196b2c15daSJason Evans * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 206b2c15daSJason Evans * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 216b2c15daSJason Evans * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 226b2c15daSJason Evans * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE 236b2c15daSJason Evans * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 246b2c15daSJason Evans * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 256b2c15daSJason Evans * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 266b2c15daSJason Evans * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 276b2c15daSJason Evans * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 286b2c15daSJason Evans * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 296b2c15daSJason Evans * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 306b2c15daSJason Evans */ 316b2c15daSJason Evans 326b2c15daSJason Evans #ifndef _MALLOC_NP_H_ 336b2c15daSJason Evans #define _MALLOC_NP_H_ 344f5f00d8SKonstantin Belousov 3578a6842dSJason Evans #include <sys/types.h> 364f5f00d8SKonstantin Belousov 374f5f00d8SKonstantin Belousov #ifdef __cplusplus 384f5f00d8SKonstantin Belousov #define __MyBool bool 394f5f00d8SKonstantin Belousov #else 404f5f00d8SKonstantin Belousov #define __MyBool _Bool 414f5f00d8SKonstantin Belousov #endif 426b2c15daSJason Evans 4378a6842dSJason Evans __BEGIN_DECLS 44b7eaed25SJason Evans typedef struct extent_hooks_s extent_hooks_t; 454f5f00d8SKonstantin Belousov typedef void *(extent_alloc_t)(extent_hooks_t *, void *, size_t, size_t, 464f5f00d8SKonstantin Belousov __MyBool *, __MyBool *, unsigned); 474f5f00d8SKonstantin Belousov typedef __MyBool (extent_dalloc_t)(extent_hooks_t *, void *, size_t, __MyBool, 48b7eaed25SJason Evans unsigned); 494f5f00d8SKonstantin Belousov typedef void (extent_destroy_t)(extent_hooks_t *, void *, size_t, __MyBool, 50b7eaed25SJason Evans unsigned); 514f5f00d8SKonstantin Belousov typedef __MyBool (extent_commit_t)(extent_hooks_t *, void *, size_t, size_t, 52b7eaed25SJason Evans size_t, unsigned); 534f5f00d8SKonstantin Belousov typedef __MyBool (extent_decommit_t)(extent_hooks_t *, void *, size_t, size_t, 544f5f00d8SKonstantin Belousov size_t, unsigned); 554f5f00d8SKonstantin Belousov typedef __MyBool (extent_purge_t)(extent_hooks_t *, void *, size_t, size_t, size_t, 56b7eaed25SJason Evans unsigned); 574f5f00d8SKonstantin Belousov typedef __MyBool (extent_split_t)(extent_hooks_t *, void *, size_t, size_t, size_t, 584f5f00d8SKonstantin Belousov __MyBool, unsigned); 594f5f00d8SKonstantin Belousov typedef __MyBool (extent_merge_t)(extent_hooks_t *, void *, size_t, void *, size_t, 604f5f00d8SKonstantin Belousov __MyBool, unsigned); 61b7eaed25SJason Evans struct extent_hooks_s { 62b7eaed25SJason Evans extent_alloc_t *alloc; 63b7eaed25SJason Evans extent_dalloc_t *dalloc; 64b7eaed25SJason Evans extent_destroy_t *destroy; 65b7eaed25SJason Evans extent_commit_t *commit; 66b7eaed25SJason Evans extent_decommit_t *decommit; 67b7eaed25SJason Evans extent_purge_t *purge_lazy; 68b7eaed25SJason Evans extent_purge_t *purge_forced; 69b7eaed25SJason Evans extent_split_t *split; 70b7eaed25SJason Evans extent_merge_t *merge; 71b7eaed25SJason Evans }; 72d0e79aa3SJason Evans 736b2c15daSJason Evans size_t malloc_usable_size(const void *ptr); 74a4bd5210SJason Evans 75a4bd5210SJason Evans void malloc_stats_print(void (*write_cb)(void *, const char *), 76a4bd5210SJason Evans void *cbopaque, const char *opts); 77b7eaed25SJason Evans 78b7eaed25SJason Evans #define MALLCTL_ARENAS_ALL 4096 79b7eaed25SJason Evans #define MALLCTL_ARENAS_DESTROYED 4097 80b7eaed25SJason Evans 81a4bd5210SJason Evans int mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, 82a4bd5210SJason Evans size_t newlen); 83a4bd5210SJason Evans int mallctlnametomib(const char *name, size_t *mibp, size_t *miblenp); 84a4bd5210SJason Evans int mallctlbymib(const size_t *mib, size_t miblen, void *oldp, 85a4bd5210SJason Evans size_t *oldlenp, void *newp, size_t newlen); 86a4bd5210SJason Evans 87b7eaed25SJason Evans #define MALLOCX_LG_ALIGN(la) ((int)(la)) 88b7eaed25SJason Evans #define MALLOCX_ALIGN(a) ((int)(ffsl((int)(a))-1)) 89f921d10fSJason Evans #define MALLOCX_ZERO ((int)0x40) 90d0e79aa3SJason Evans #define MALLOCX_TCACHE(tc) ((int)(((tc)+2) << 8)) 91d0e79aa3SJason Evans #define MALLOCX_TCACHE_NONE MALLOCX_TCACHE(-1) 92b7eaed25SJason Evans #define MALLOCX_ARENA(a) ((((int)(a))+1) << 20) 93f921d10fSJason Evans 94f921d10fSJason Evans void *mallocx(size_t size, int flags); 95f921d10fSJason Evans void *rallocx(void *ptr, size_t size, int flags); 96f921d10fSJason Evans size_t xallocx(void *ptr, size_t size, size_t extra, int flags); 97f921d10fSJason Evans size_t sallocx(const void *ptr, int flags); 98f921d10fSJason Evans void dallocx(void *ptr, int flags); 99d0e79aa3SJason Evans void sdallocx(void *ptr, size_t size, int flags); 100f921d10fSJason Evans size_t nallocx(size_t size, int flags); 101f921d10fSJason Evans 102d0e79aa3SJason Evans void * __calloc(size_t number, size_t size) __malloc_like; 103d0e79aa3SJason Evans void * __malloc(size_t size) __malloc_like; 104d0e79aa3SJason Evans void * __realloc(void *ptr, size_t size); 105d0e79aa3SJason Evans void __free(void *ptr); 106d0e79aa3SJason Evans int __posix_memalign(void **ptr, size_t alignment, size_t size); 107d0e79aa3SJason Evans void *__aligned_alloc(size_t alignment, size_t size); 108d0e79aa3SJason Evans size_t __malloc_usable_size(const void *ptr); 109df0d881dSJason Evans void __malloc_stats_print(void (*write_cb)(void *, const char *), 110df0d881dSJason Evans void *cbopaque, const char *opts); 111df0d881dSJason Evans int __mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, 112df0d881dSJason Evans size_t newlen); 113df0d881dSJason Evans int __mallctlnametomib(const char *name, size_t *mibp, size_t *miblenp); 114df0d881dSJason Evans int __mallctlbymib(const size_t *mib, size_t miblen, void *oldp, 115df0d881dSJason Evans size_t *oldlenp, void *newp, size_t newlen); 116f921d10fSJason Evans void *__mallocx(size_t size, int flags); 117f921d10fSJason Evans void *__rallocx(void *ptr, size_t size, int flags); 118f921d10fSJason Evans size_t __xallocx(void *ptr, size_t size, size_t extra, int flags); 119f921d10fSJason Evans size_t __sallocx(const void *ptr, int flags); 120f921d10fSJason Evans void __dallocx(void *ptr, int flags); 121d0e79aa3SJason Evans void __sdallocx(void *ptr, size_t size, int flags); 122f921d10fSJason Evans size_t __nallocx(size_t size, int flags); 123dcc6ef16SKonstantin Belousov 124dcc6ef16SKonstantin Belousov void *memalign(size_t, size_t) __malloc_like __alloc_align(1) 125dcc6ef16SKonstantin Belousov __alloc_size(2); 12678a6842dSJason Evans __END_DECLS 1276b2c15daSJason Evans 1284f5f00d8SKonstantin Belousov #undef __MyBool 1294f5f00d8SKonstantin Belousov 1306b2c15daSJason Evans #endif /* _MALLOC_NP_H_ */ 131