summaryrefslogtreecommitdiff
path: root/src/stdlib/_jkmalloc.h
blob: 107bf9047e5d92e515a9041e2cd7f4b31198fe9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef ___JKMALLOC_H__
#define ___JKMALLOC_H__

#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