| //===-- allocator_interface.h ---------------------------------------------===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | // | 
 | // Public interface header for allocator used in sanitizers (ASan/TSan/MSan). | 
 | //===----------------------------------------------------------------------===// | 
 | #ifndef SANITIZER_ALLOCATOR_INTERFACE_H | 
 | #define SANITIZER_ALLOCATOR_INTERFACE_H | 
 |  | 
 | #include <stddef.h> | 
 |  | 
 | #ifdef __cplusplus | 
 | extern "C" { | 
 | #endif | 
 |   /* Returns the estimated number of bytes that will be reserved by allocator | 
 |      for request of "size" bytes. If allocator can't allocate that much | 
 |      memory, returns the maximal possible allocation size, otherwise returns | 
 |      "size". */ | 
 |   size_t __sanitizer_get_estimated_allocated_size(size_t size); | 
 |  | 
 |   /* Returns true if p was returned by the allocator and | 
 |      is not yet freed. */ | 
 |   int __sanitizer_get_ownership(const volatile void *p); | 
 |  | 
 |   /* Returns the number of bytes reserved for the pointer p. | 
 |      Requires (get_ownership(p) == true) or (p == 0). */ | 
 |   size_t __sanitizer_get_allocated_size(const volatile void *p); | 
 |  | 
 |   /* Number of bytes, allocated and not yet freed by the application. */ | 
 |   size_t __sanitizer_get_current_allocated_bytes(void); | 
 |  | 
 |   /* Number of bytes, mmaped by the allocator to fulfill allocation requests. | 
 |      Generally, for request of X bytes, allocator can reserve and add to free | 
 |      lists a large number of chunks of size X to use them for future requests. | 
 |      All these chunks count toward the heap size. Currently, allocator never | 
 |      releases memory to OS (instead, it just puts freed chunks to free | 
 |      lists). */ | 
 |   size_t __sanitizer_get_heap_size(void); | 
 |  | 
 |   /* Number of bytes, mmaped by the allocator, which can be used to fulfill | 
 |      allocation requests. When a user program frees memory chunk, it can first | 
 |      fall into quarantine and will count toward __sanitizer_get_free_bytes() | 
 |      later. */ | 
 |   size_t __sanitizer_get_free_bytes(void); | 
 |  | 
 |   /* Number of bytes in unmapped pages, that are released to OS. Currently, | 
 |      always returns 0. */ | 
 |   size_t __sanitizer_get_unmapped_bytes(void); | 
 |  | 
 |   /* Malloc hooks that may be optionally provided by user. | 
 |      __sanitizer_malloc_hook(ptr, size) is called immediately after | 
 |        allocation of "size" bytes, which returned "ptr". | 
 |      __sanitizer_free_hook(ptr) is called immediately before | 
 |        deallocation of "ptr". */ | 
 |   void __sanitizer_malloc_hook(const volatile void *ptr, size_t size); | 
 |   void __sanitizer_free_hook(const volatile void *ptr); | 
 |  | 
 |   /* Installs a pair of hooks for malloc/free. | 
 |      Several (currently, 5) hook pairs may be installed, they are executed | 
 |      in the order they were installed and after calling | 
 |      __sanitizer_malloc_hook/__sanitizer_free_hook. | 
 |      Unlike __sanitizer_malloc_hook/__sanitizer_free_hook these hooks can be | 
 |      chained and do not rely on weak symbols working on the platform, but | 
 |      require __sanitizer_install_malloc_and_free_hooks to be called at startup | 
 |      and thus will not be called on malloc/free very early in the process. | 
 |      Returns the number of hooks currently installed or 0 on failure. | 
 |      Not thread-safe, should be called in the main thread before starting | 
 |      other threads. | 
 |   */ | 
 |   int __sanitizer_install_malloc_and_free_hooks( | 
 |       void (*malloc_hook)(const volatile void *, size_t), | 
 |       void (*free_hook)(const volatile void *)); | 
 |  | 
 |   /* Drains allocator quarantines (calling thread's and global ones), returns | 
 |      freed memory back to OS and releases other non-essential internal allocator | 
 |      resources in attempt to reduce process RSS. | 
 |      Currently available with ASan only. | 
 |   */ | 
 |   void __sanitizer_purge_allocator(void); | 
 |  | 
 | #ifdef __cplusplus | 
 | }  // extern "C" | 
 | #endif | 
 |  | 
 | #endif |