diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-06-11 11:38:32 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-06-11 11:38:32 -0400 |
commit | a550833c70541ca909fc3d07771680b4162b6b41 (patch) | |
tree | 7018b7bb73efe5dfcd6fedf0143a572acac45141 /src/stdlib/_jkmalloc.h | |
parent | be9ae97e15714cc258426dee47844c5ff905cb28 (diff) |
separate SIGSEGV handler from jkmalloc() so it can be installed without requiring dynamic memory use
Diffstat (limited to 'src/stdlib/_jkmalloc.h')
-rw-r--r-- | src/stdlib/_jkmalloc.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/stdlib/_jkmalloc.h b/src/stdlib/_jkmalloc.h index cab5cfcb..107bf904 100644 --- a/src/stdlib/_jkmalloc.h +++ b/src/stdlib/_jkmalloc.h @@ -3,6 +3,43 @@ #include <inttypes.h> +#define PTR_BITS (CHAR_BIT * sizeof(uintptr_t)) + +#define JKMALLOC_EXIT_VALUE (127 + SIGSEGV) +#define JK_FREE_LIST_SIZE (8) + +#define __jk_pagesize (4096) + +/* magic numbers derived from CRC-32 of jk_foo_block */ +#define JK_FREE_MAGIC (0x551a51dc) +#define JK_UNDER_MAGIC (0xcb2873ac) +#define JK_OVER_MAGIC (0x18a12c17) +#define JK_RONLY_MAGIC (0x902faf31) + +#define jk_pages(bytes) (((bytes + __jk_pagesize - 1) / __jk_pagesize) + 2) +#define jk_pageof(addr) ((void*)((uintptr_t)addr - ((uintptr_t)addr % __jk_pagesize))) +#define jk_bucketof(addr) ((void*)((uintptr_t)jk_pageof(addr) - __jk_pagesize)) + + +struct jk_bucket { + uint32_t magic; + uintptr_t start; + size_t size; + size_t align; + size_t pages; + size_t tlen; + char trace[]; +}; + + +struct jk_source { + const char *file; + const char *func; + uintmax_t line; + struct jk_bucket *bucket; +}; + + void* __jkmalloc(void *ptr, size_t alignment, size_t size1 , size_t size2, const char *user); #endif |