003 File Manager
Current Path:
/usr/src/contrib/jemalloc/include/jemalloc/internal
usr
/
src
/
contrib
/
jemalloc
/
include
/
jemalloc
/
internal
/
📁
..
📄
arena_externs.h
(4.83 KB)
📄
arena_inlines_a.h
(1.44 KB)
📄
arena_inlines_b.h
(11.54 KB)
📄
arena_stats.h
(7.92 KB)
📄
arena_structs_a.h
(293 B)
📄
arena_structs_b.h
(6.63 KB)
📄
arena_types.h
(1.67 KB)
📄
assert.h
(1.3 KB)
📄
atomic.h
(2.66 KB)
📄
atomic_c11.h
(3.46 KB)
📄
atomic_gcc_atomic.h
(4.06 KB)
📄
atomic_gcc_sync.h
(6.21 KB)
📄
background_thread_externs.h
(1.29 KB)
📄
background_thread_inlines.h
(2.09 KB)
📄
background_thread_structs.h
(1.74 KB)
📄
base_externs.h
(946 B)
📄
base_inlines.h
(312 B)
📄
base_structs.h
(1.52 KB)
📄
base_types.h
(1.08 KB)
📄
bin.h
(3.6 KB)
📄
bin_stats.h
(1.35 KB)
📄
bin_types.h
(474 B)
📄
bit_util.h
(5.22 KB)
📄
bitmap.h
(10.97 KB)
📄
cache_bin.h
(3.69 KB)
📄
ckh.h
(3.19 KB)
📄
ctl.h
(3.62 KB)
📄
div.h
(1.14 KB)
📄
emitter.h
(13.06 KB)
📄
extent_dss.h
(728 B)
📄
extent_externs.h
(3.75 KB)
📄
extent_inlines.h
(13.4 KB)
📄
extent_mmap.h
(328 B)
📄
extent_structs.h
(8.46 KB)
📄
extent_types.h
(700 B)
📄
hash.h
(7.88 KB)
📄
hook.h
(5.41 KB)
📄
jemalloc_internal_decls.h
(2.19 KB)
📄
jemalloc_internal_defs.h
(10.93 KB)
📄
jemalloc_internal_defs_FreeBSD.h
(256 B)
📄
jemalloc_internal_externs.h
(1.75 KB)
📄
jemalloc_internal_includes.h
(4.19 KB)
📄
jemalloc_internal_inlines_a.h
(4.39 KB)
📄
jemalloc_internal_inlines_b.h
(2.24 KB)
📄
jemalloc_internal_inlines_c.h
(7.08 KB)
📄
jemalloc_internal_macros.h
(3.99 KB)
📄
jemalloc_internal_types.h
(3.42 KB)
📄
jemalloc_preamble.h
(3.9 KB)
📄
large_externs.h
(1.4 KB)
📄
log.h
(3.67 KB)
📄
malloc_io.h
(2.9 KB)
📄
mutex.h
(9.34 KB)
📄
mutex_pool.h
(2.81 KB)
📄
mutex_prof.h
(3.55 KB)
📄
nstime.h
(1.27 KB)
📄
pages.h
(3.05 KB)
📄
ph.h
(12.26 KB)
📄
private_namespace.h
(22.72 KB)
📄
prng.h
(4.69 KB)
📄
prof_externs.h
(3.79 KB)
📄
prof_inlines_a.h
(2.44 KB)
📄
prof_inlines_b.h
(6.42 KB)
📄
prof_structs.h
(5.02 KB)
📄
prof_types.h
(1.74 KB)
📄
public_namespace.h
(1.03 KB)
📄
ql.h
(2.45 KB)
📄
qr.h
(2.29 KB)
📄
quantum.h
(1.75 KB)
📄
rb.h
(37.41 KB)
📄
rtree.h
(17.01 KB)
📄
rtree_tsd.h
(1.82 KB)
📄
safety_check.h
(797 B)
📄
sc.h
(12.98 KB)
📄
seq.h
(1.81 KB)
📄
smoothstep.h
(15.26 KB)
📄
spin.h
(613 B)
📄
stats.h
(998 B)
📄
sz.h
(7.96 KB)
📄
tcache_externs.h
(2.09 KB)
📄
tcache_inlines.h
(5.73 KB)
📄
tcache_structs.h
(2.05 KB)
📄
tcache_types.h
(2.01 KB)
📄
test_hooks.h
(459 B)
📄
ticker.h
(2.21 KB)
📄
tsd.h
(12.49 KB)
📄
tsd_generic.h
(3.76 KB)
📄
tsd_malloc_thread_cleanup.h
(1.19 KB)
📄
tsd_tls.h
(1.12 KB)
📄
tsd_types.h
(258 B)
📄
util.h
(1.43 KB)
📄
witness.h
(9.32 KB)
Editing: hook.h
#ifndef JEMALLOC_INTERNAL_HOOK_H #define JEMALLOC_INTERNAL_HOOK_H #include "jemalloc/internal/tsd.h" /* * This API is *extremely* experimental, and may get ripped out, changed in API- * and ABI-incompatible ways, be insufficiently or incorrectly documented, etc. * * It allows hooking the stateful parts of the API to see changes as they * happen. * * Allocation hooks are called after the allocation is done, free hooks are * called before the free is done, and expand hooks are called after the * allocation is expanded. * * For realloc and rallocx, if the expansion happens in place, the expansion * hook is called. If it is moved, then the alloc hook is called on the new * location, and then the free hook is called on the old location (i.e. both * hooks are invoked in between the alloc and the dalloc). * * If we return NULL from OOM, then usize might not be trustworthy. Calling * realloc(NULL, size) only calls the alloc hook, and calling realloc(ptr, 0) * only calls the free hook. (Calling realloc(NULL, 0) is treated as malloc(0), * and only calls the alloc hook). * * Reentrancy: * Reentrancy is guarded against from within the hook implementation. If you * call allocator functions from within a hook, the hooks will not be invoked * again. * Threading: * The installation of a hook synchronizes with all its uses. If you can * prove the installation of a hook happens-before a jemalloc entry point, * then the hook will get invoked (unless there's a racing removal). * * Hook insertion appears to be atomic at a per-thread level (i.e. if a thread * allocates and has the alloc hook invoked, then a subsequent free on the * same thread will also have the free hook invoked). * * The *removal* of a hook does *not* block until all threads are done with * the hook. Hook authors have to be resilient to this, and need some * out-of-band mechanism for cleaning up any dynamically allocated memory * associated with their hook. * Ordering: * Order of hook execution is unspecified, and may be different than insertion * order. */ #define HOOK_MAX 4 enum hook_alloc_e { hook_alloc_malloc, hook_alloc_posix_memalign, hook_alloc_aligned_alloc, hook_alloc_calloc, hook_alloc_memalign, hook_alloc_valloc, hook_alloc_mallocx, /* The reallocating functions have both alloc and dalloc variants */ hook_alloc_realloc, hook_alloc_rallocx, }; /* * We put the enum typedef after the enum, since this file may get included by * jemalloc_cpp.cpp, and C++ disallows enum forward declarations. */ typedef enum hook_alloc_e hook_alloc_t; enum hook_dalloc_e { hook_dalloc_free, hook_dalloc_dallocx, hook_dalloc_sdallocx, /* * The dalloc halves of reallocation (not called if in-place expansion * happens). */ hook_dalloc_realloc, hook_dalloc_rallocx, }; typedef enum hook_dalloc_e hook_dalloc_t; enum hook_expand_e { hook_expand_realloc, hook_expand_rallocx, hook_expand_xallocx, }; typedef enum hook_expand_e hook_expand_t; typedef void (*hook_alloc)( void *extra, hook_alloc_t type, void *result, uintptr_t result_raw, uintptr_t args_raw[3]); typedef void (*hook_dalloc)( void *extra, hook_dalloc_t type, void *address, uintptr_t args_raw[3]); typedef void (*hook_expand)( void *extra, hook_expand_t type, void *address, size_t old_usize, size_t new_usize, uintptr_t result_raw, uintptr_t args_raw[4]); typedef struct hooks_s hooks_t; struct hooks_s { hook_alloc alloc_hook; hook_dalloc dalloc_hook; hook_expand expand_hook; void *extra; }; /* * Begin implementation details; everything above this point might one day live * in a public API. Everything below this point never will. */ /* * The realloc pathways haven't gotten any refactoring love in a while, and it's * fairly difficult to pass information from the entry point to the hooks. We * put the informaiton the hooks will need into a struct to encapsulate * everything. * * Much of these pathways are force-inlined, so that the compiler can avoid * materializing this struct until we hit an extern arena function. For fairly * goofy reasons, *many* of the realloc paths hit an extern arena function. * These paths are cold enough that it doesn't matter; eventually, we should * rewrite the realloc code to make the expand-in-place and the * free-then-realloc paths more orthogonal, at which point we don't need to * spread the hook logic all over the place. */ typedef struct hook_ralloc_args_s hook_ralloc_args_t; struct hook_ralloc_args_s { /* I.e. as opposed to rallocx. */ bool is_realloc; /* * The expand hook takes 4 arguments, even if only 3 are actually used; * we add an extra one in case the user decides to memcpy without * looking too closely at the hooked function. */ uintptr_t args[4]; }; /* * Returns an opaque handle to be used when removing the hook. NULL means that * we couldn't install the hook. */ bool hook_boot(); void *hook_install(tsdn_t *tsdn, hooks_t *hooks); /* Uninstalls the hook with the handle previously returned from hook_install. */ void hook_remove(tsdn_t *tsdn, void *opaque); /* Hooks */ void hook_invoke_alloc(hook_alloc_t type, void *result, uintptr_t result_raw, uintptr_t args_raw[3]); void hook_invoke_dalloc(hook_dalloc_t type, void *address, uintptr_t args_raw[3]); void hook_invoke_expand(hook_expand_t type, void *address, size_t old_usize, size_t new_usize, uintptr_t result_raw, uintptr_t args_raw[4]); #endif /* JEMALLOC_INTERNAL_HOOK_H */
Upload File
Create Folder