19#if defined (__cplusplus)
34#ifndef ZSTD_CWKSP_ASAN_REDZONE_SIZE
35#define ZSTD_CWKSP_ASAN_REDZONE_SIZE 128
40#define ZSTD_CWKSP_ALIGNMENT_BYTES 64
180 size_t const mask = align - 1;
181 assert((align & mask) == 0);
182 return (
size + mask) & ~mask;
200#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
237 size_t const alignBytesMask = alignBytes - 1;
238 size_t const bytes = (alignBytes - ((size_t)ptr & (alignBytesMask))) & alignBytesMask;
239 assert((alignBytes & alignBytesMask) == 0);
256 DEBUGLOG(5,
"cwksp: reserving %p %zd bytes, %zd bytes remaining",
260 if (alloc < bottom) {
261 DEBUGLOG(4,
"cwksp: alloc failed!");
267 if (alloc < ws->tableValidEnd) {
283 if (phase > ws->
phase) {
294 size_t const bytesToAlign =
296 DEBUGLOG(5,
"reserving aligned alignment addtl space: %zu", bytesToAlign);
299 memory_allocation,
"aligned phase - alignment initial allocation failed!");
304 void*
const objectEnd = (
BYTE*)alloc + bytesToAlign;
305 DEBUGLOG(5,
"reserving table alignment addtl space: %zu", bytesToAlign);
307 "table phase - alignment initial allocation failed!");
324 return (ptr !=
NULL) && (ws->
workspace <= ptr) && (ptr <= ws->workspaceEnd);
338#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
345#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
351 __asan_unpoison_memory_region(alloc,
bytes);
397 DEBUGLOG(5,
"cwksp: reserving %p table %zd bytes, %zd bytes remaining",
403 DEBUGLOG(4,
"cwksp: table alloc failed!");
409#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
411 __asan_unpoison_memory_region(alloc,
bytes);
428 void* end = (
BYTE*)alloc + roundedBytes;
430#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
436 "cwksp: reserving %p object %zd bytes (rounded to %zd), %zd bytes remaining",
443 DEBUGLOG(3,
"cwksp: object alloc failed!");
451#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
456 __asan_unpoison_memory_region(alloc,
bytes);
465 DEBUGLOG(4,
"cwksp: ZSTD_cwksp_mark_tables_dirty");
467#if ZSTD_MEMORY_SANITIZER && !defined (ZSTD_MSAN_DONT_POISON_WORKSPACE)
485 DEBUGLOG(4,
"cwksp: ZSTD_cwksp_mark_tables_clean");
498 DEBUGLOG(4,
"cwksp: ZSTD_cwksp_clean_tables");
512 DEBUGLOG(4,
"cwksp: clearing tables!");
514#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
536#if ZSTD_MEMORY_SANITIZER && !defined (ZSTD_MSAN_DONT_POISON_WORKSPACE)
547#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
573 DEBUGLOG(4,
"cwksp: init'ing workspace with %zd bytes",
size);
588 DEBUGLOG(4,
"cwksp: creating new workspace with %zd bytes",
size);
596 DEBUGLOG(4,
"cwksp: freeing workspace");
632 size_t const estimatedSpace,
int resizedWorkspace) {
633 if (resizedWorkspace) {
664 ZSTD_cwksp* ws,
size_t additionalNeededSpace) {
672#if defined (__cplusplus)
unsigned char BYTE
Definition lz4.c:314
#define DEBUGLOG(l,...)
Definition lz4.c:289
unsigned int U32
Definition lz4.c:316
#define assert(condition)
Definition lz4.c:273
char * dst
Definition lz4.h:833
const char * src
Definition lz4.h:866
#define RETURN_ERROR_IF(c, e)
Definition lz4frame.c:320
Definition zstd_cwksp.h:145
BYTE allocFailed
Definition zstd_cwksp.h:154
void * workspaceEnd
Definition zstd_cwksp.h:147
void * tableValidEnd
Definition zstd_cwksp.h:151
void * tableEnd
Definition zstd_cwksp.h:150
ZSTD_cwksp_alloc_phase_e phase
Definition zstd_cwksp.h:156
int workspaceOversizedDuration
Definition zstd_cwksp.h:155
void * objectEnd
Definition zstd_cwksp.h:149
void * workspace
Definition zstd_cwksp.h:146
void * allocStart
Definition zstd_cwksp.h:152
ZSTD_cwksp_static_alloc_e isStatic
Definition zstd_cwksp.h:157
Definition compress42.c:551
#define ZSTD_ALIGNOF(T)
Definition compiler.h:267
#define NULL
Definition getopt1.c:37
#define MEM_STATIC
Definition mem.h:27
#define ZSTD_memset(d, s, n)
Definition zstd_deps.h:34
void * ZSTD_customMalloc(size_t size, ZSTD_customMem customMem)
Definition zstd_common.c:56
void ZSTD_customFree(void *ptr, ZSTD_customMem customMem)
Definition zstd_common.c:75
#define ZSTD_WORKSPACETOOLARGE_MAXDURATION
Definition zstd_internal.h:274
#define ZSTD_isError
Definition zstd_internal.h:49
#define ZSTD_STATIC_ASSERT(c)
Definition zstd_internal.h:48
#define ZSTD_WORKSPACETOOLARGE_FACTOR
Definition zstd_internal.h:267
MEM_STATIC size_t ZSTD_cwksp_create(ZSTD_cwksp *ws, size_t size, ZSTD_customMem customMem)
Definition zstd_cwksp.h:586
MEM_STATIC size_t ZSTD_cwksp_align(size_t size, size_t const align)
Definition zstd_cwksp.h:179
MEM_STATIC void ZSTD_cwksp_mark_tables_clean(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:484
MEM_STATIC int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp *ws)
Definition zstd_cwksp.h:619
ZSTD_cwksp_static_alloc_e
Definition zstd_cwksp.h:56
@ ZSTD_cwksp_dynamic_alloc
Definition zstd_cwksp.h:57
@ ZSTD_cwksp_static_alloc
Definition zstd_cwksp.h:58
MEM_STATIC void * ZSTD_cwksp_reserve_internal_buffer_space(ZSTD_cwksp *ws, size_t const bytes)
Definition zstd_cwksp.h:252
MEM_STATIC void ZSTD_cwksp_move(ZSTD_cwksp *dst, ZSTD_cwksp *src)
Definition zstd_cwksp.h:605
MEM_STATIC size_t ZSTD_cwksp_internal_advance_phase(ZSTD_cwksp *ws, ZSTD_cwksp_alloc_phase_e phase)
Definition zstd_cwksp.h:280
MEM_STATIC size_t ZSTD_cwksp_used(const ZSTD_cwksp *ws)
Definition zstd_cwksp.h:614
#define ZSTD_CWKSP_ALIGNMENT_BYTES
Definition zstd_cwksp.h:40
MEM_STATIC void ZSTD_cwksp_clean_tables(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:497
MEM_STATIC int ZSTD_cwksp_check_too_large(ZSTD_cwksp *ws, size_t additionalNeededSpace)
Definition zstd_cwksp.h:653
MEM_STATIC size_t ZSTD_cwksp_bytes_to_align_ptr(void *ptr, const size_t alignBytes)
Definition zstd_cwksp.h:236
MEM_STATIC void ZSTD_cwksp_clear_tables(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:511
MEM_STATIC void ZSTD_cwksp_assert_internal_consistency(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:166
MEM_STATIC int ZSTD_cwksp_owns_buffer(const ZSTD_cwksp *ws, const void *ptr)
Definition zstd_cwksp.h:322
MEM_STATIC int ZSTD_cwksp_check_wasteful(ZSTD_cwksp *ws, size_t additionalNeededSpace)
Definition zstd_cwksp.h:658
MEM_STATIC int ZSTD_cwksp_estimated_space_within_bounds(const ZSTD_cwksp *const ws, size_t const estimatedSpace, int resizedWorkspace)
Definition zstd_cwksp.h:631
MEM_STATIC size_t ZSTD_cwksp_sizeof(const ZSTD_cwksp *ws)
Definition zstd_cwksp.h:610
MEM_STATIC void ZSTD_cwksp_bump_oversized_duration(ZSTD_cwksp *ws, size_t additionalNeededSpace)
Definition zstd_cwksp.h:663
MEM_STATIC size_t ZSTD_cwksp_slack_space_required(void)
Definition zstd_cwksp.h:219
MEM_STATIC void ZSTD_cwksp_mark_tables_dirty(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:463
ZSTD_cwksp_alloc_phase_e
Definition zstd_cwksp.h:45
@ ZSTD_cwksp_alloc_objects
Definition zstd_cwksp.h:46
@ ZSTD_cwksp_alloc_buffers
Definition zstd_cwksp.h:47
@ ZSTD_cwksp_alloc_aligned
Definition zstd_cwksp.h:48
MEM_STATIC void ZSTD_cwksp_free(ZSTD_cwksp *ws, ZSTD_customMem customMem)
Definition zstd_cwksp.h:594
MEM_STATIC void * ZSTD_cwksp_reserve_internal(ZSTD_cwksp *ws, size_t bytes, ZSTD_cwksp_alloc_phase_e phase)
Definition zstd_cwksp.h:331
MEM_STATIC BYTE * ZSTD_cwksp_reserve_buffer(ZSTD_cwksp *ws, size_t bytes)
Definition zstd_cwksp.h:362
MEM_STATIC void ZSTD_cwksp_clear(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:533
MEM_STATIC void * ZSTD_cwksp_reserve_object(ZSTD_cwksp *ws, size_t bytes)
Definition zstd_cwksp.h:424
MEM_STATIC void ZSTD_cwksp_init(ZSTD_cwksp *ws, void *start, size_t size, ZSTD_cwksp_static_alloc_e isStatic)
Definition zstd_cwksp.h:572
MEM_STATIC size_t ZSTD_cwksp_aligned_alloc_size(size_t size)
Definition zstd_cwksp.h:211
MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size)
Definition zstd_cwksp.h:197
MEM_STATIC int ZSTD_cwksp_check_available(ZSTD_cwksp *ws, size_t additionalNeededSpace)
Definition zstd_cwksp.h:649
MEM_STATIC void * ZSTD_cwksp_reserve_table(ZSTD_cwksp *ws, size_t bytes)
Definition zstd_cwksp.h:383
#define ZSTD_CWKSP_ASAN_REDZONE_SIZE
Definition zstd_cwksp.h:35
MEM_STATIC void * ZSTD_cwksp_reserve_aligned(ZSTD_cwksp *ws, size_t bytes)
Definition zstd_cwksp.h:370
MEM_STATIC size_t ZSTD_cwksp_available_space(ZSTD_cwksp *ws)
Definition zstd_cwksp.h:645
ZSTD_cwksp_static_alloc_e
Definition zstd_cwksp.h:59
ZSTD_cwksp_alloc_phase_e
Definition zstd_cwksp.h:47