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
|