X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/3e170ce000f1506b7b5d2c5c7faec85ceabb573d..a39ff7e25e19b3a8c3020042a3872ca9ec9659f1:/osfmk/kern/kalloc.h diff --git a/osfmk/kern/kalloc.h b/osfmk/kern/kalloc.h index caad32a3b..3c6f5804b 100644 --- a/osfmk/kern/kalloc.h +++ b/osfmk/kern/kalloc.h @@ -70,41 +70,85 @@ __BEGIN_DECLS extern void * kalloc_canblock( - vm_size_t size, + vm_size_t * size, boolean_t canblock, vm_allocation_site_t * site); -#define kalloc(size) \ - ({ static vm_allocation_site_t site __attribute__((section("__DATA, __data"))); \ +extern vm_size_t +kalloc_size( + void * addr); + +extern vm_size_t +kfree_addr( + void * addr); + +extern vm_size_t +kalloc_bucket_size( + vm_size_t size); + +#define kalloc(size) \ + ({ VM_ALLOC_SITE_STATIC(0, 0); \ + vm_size_t tsize = (size); \ + kalloc_canblock(&tsize, TRUE, &site); }) + +#define kalloc_tag(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(0, (itag)); \ + vm_size_t tsize = (size); \ + kalloc_canblock(&tsize, TRUE, &site); }) + +#define kalloc_tag_bt(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(VM_TAG_BT, (itag)); \ + vm_size_t tsize = (size); \ + kalloc_canblock(&tsize, TRUE, &site); }) + +#define kalloc_noblock(size) \ + ({ VM_ALLOC_SITE_STATIC(0, 0); \ + vm_size_t tsize = (size); \ + kalloc_canblock(&tsize, FALSE, &site); }) + +#define kalloc_noblock_tag(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(0, (itag)); \ + vm_size_t tsize = (size); \ + kalloc_canblock(&tsize, FALSE, &site); }) + +#define kalloc_noblock_tag_bt(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(VM_TAG_BT, (itag)); \ + vm_size_t tsize = (size); \ + kalloc_canblock(&tsize, FALSE, &site); }) + + +/* these versions update the size reference with the actual size allocated */ + +#define kallocp(size) \ + ({ VM_ALLOC_SITE_STATIC(0, 0); \ kalloc_canblock((size), TRUE, &site); }) -#define kalloc_tag(size, tag) \ - ({ static vm_allocation_site_t site __attribute__((section("__DATA, __data"))) \ - = { (tag), 0 } ; \ +#define kallocp_tag(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(0, (itag)); \ kalloc_canblock((size), TRUE, &site); }) -#define kalloc_tag_bt(size, tag) \ - ({ static vm_allocation_site_t site __attribute__((section("__DATA, __data"))) \ - = { (tag), VM_TAG_BT }; \ +#define kallocp_tag_bt(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(VM_TAG_BT, (itag)); \ kalloc_canblock((size), TRUE, &site); }) -#define kalloc_noblock(size) \ - ({ static vm_allocation_site_t site __attribute__((section("__DATA, __data"))); \ +#define kallocp_noblock(size) \ + ({ VM_ALLOC_SITE_STATIC(0, 0); \ kalloc_canblock((size), FALSE, &site); }) -#define kalloc_noblock_tag_bt(size, tag) \ - ({ static vm_allocation_site_t site __attribute__((section("__DATA, __data"))) \ - = { (tag), VM_TAG_BT }; \ +#define kallocp_noblock_tag_bt(size, itag) \ + ({ VM_ALLOC_SITE_STATIC(VM_TAG_BT, (itag)); \ kalloc_canblock((size), FALSE, &site); }) + + extern void kfree(void *data, vm_size_t size); #else /* XNU_KERNEL_PRIVATE */ -extern void *kalloc(vm_size_t size); +extern void *kalloc(vm_size_t size) __attribute__((alloc_size(1))); -extern void *kalloc_noblock(vm_size_t size); +extern void *kalloc_noblock(vm_size_t size) __attribute__((alloc_size(1))); extern void kfree(void *data, vm_size_t size);