Kmalloc canary debugging
[akaros.git] / kern / include / kmalloc.h
1 /* Copyright (c) 2009 The Regents of the University of California. 
2  * See the COPYRIGHT files at the top of this source tree for full 
3  * license information.
4  * 
5  * Kevin Klues <klueska@cs.berkeley.edu>    
6  */
7
8 #ifndef ROS_KERN_KMALLOC_H
9 #define ROS_KERN_KMALLOC_H
10
11 #include <ros/common.h>
12
13 #define NUM_KMALLOC_CACHES 13
14 #define KMALLOC_ALIGNMENT 16
15 #define KMALLOC_SMALLEST 32
16 #define KMALLOC_LARGEST KMALLOC_SMALLEST << NUM_KMALLOC_CACHES
17 #define KMALLOC_OFFSET ROUNDUP(sizeof(struct kmalloc_tag), KMALLOC_ALIGNMENT)
18
19 void kmalloc_init(void);
20 void* (DALLOC(size) kmalloc)(size_t size, int flags);
21 void* (DALLOC(size) kzmalloc)(size_t size, int flags);
22 void* (DALLOC(size) krealloc)(void* buf, size_t size, int flags);
23 void  (DFREE(addr) kfree)(void *addr);
24 void kmalloc_canary_check(char *str);
25 void *debug_canary;
26
27 /* Flags */
28 #define KMALLOC_TAG_CACHE 1
29 #define KMALLOC_TAG_PAGES 2
30 /* Not implemented yet. Block until it is available. */
31 #define KMALLOC_WAIT    4
32
33 #define KMALLOC_CANARY 0xdeadbabe
34
35 struct kmalloc_tag {
36         int flags;
37         uint32_t canary;
38         union {
39                 struct kmem_cache *my_cache WHEN(flags == KMALLOC_TAG_CACHE);
40                 size_t num_pages WHEN(flags == KMALLOC_TAG_PAGES);
41         };
42 };
43
44 #endif //ROS_KERN_KMALLOC_H
45