79#ifdef SLJIT_HAS_CHUNK_HEADER
80#define CHUNK_HEADER_SIZE (sizeof(struct sljit_chunk_header))
82#define CHUNK_HEADER_SIZE 0
85#ifndef SLJIT_UPDATE_WX_FLAGS
86#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
91#define CHUNK_SIZE (sljit_uw)0x10000
97#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
109#define AS_BLOCK_HEADER(base, offset) \
110 ((struct block_header*)(((sljit_u8*)base) + offset))
111#define AS_FREE_BLOCK(base, offset) \
112 ((struct free_block*)(((sljit_u8*)base) + offset))
113#define MEM_START(base) ((void*)((base) + 1))
114#define CHUNK_MASK (~(CHUNK_SIZE - 1))
115#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7)
116#define CHUNK_EXTRA_SIZE (sizeof(struct block_header) + CHUNK_HEADER_SIZE)
154#ifdef SLJIT_HAS_CHUNK_HEADER
160#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
168 SLJIT_ALLOCATOR_LOCK();
174 if (chunk_size >
size + 64) {
179 header->prev_size = chunk_size;
180#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
189 allocated_size +=
size;
191 SLJIT_ALLOCATOR_UNLOCK();
199 chunk_header = alloc_chunk(chunk_size);
201 SLJIT_ALLOCATOR_UNLOCK();
205#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
210 total_size += chunk_size;
215#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
216 header->executable_offset = executable_offset;
219 if (chunk_size >
size + 64) {
221 allocated_size +=
size;
227#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
230 sljit_insert_free_block(
free_block, chunk_size);
234 allocated_size += chunk_size;
235 header->size = chunk_size;
238 next_header->
size = 1;
240#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
241 next_header->executable_offset = executable_offset;
243 SLJIT_ALLOCATOR_UNLOCK();
252 SLJIT_ALLOCATOR_LOCK();
254#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
257 allocated_size -=
header->size;
294 SLJIT_ALLOCATOR_UNLOCK();
302 SLJIT_ALLOCATOR_LOCK();
317 SLJIT_ASSERT(total_size || (!total_size && !free_blocks));
319 SLJIT_ALLOCATOR_UNLOCK();
322#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
header(string $header, bool $replace=true, int $response_code=0)
#define SLJIT_UNLIKELY(x)
#define SLJIT_API_FUNC_ATTRIBUTE
#define CHUNK_HEADER_SIZE
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void *ptr)
#define AS_BLOCK_HEADER(base, offset)
SLJIT_API_FUNC_ATTRIBUTE void * sljit_malloc_exec(sljit_uw size)
#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
#define AS_FREE_BLOCK(base, offset)
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
#define SLJIT_CODE_TO_PTR(code)
struct block_header header