malloc_hook_c.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /* Copyright (c) 2008, Google Inc.
  2. * All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are
  6. * met:
  7. *
  8. * * Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * * Redistributions in binary form must reproduce the above
  11. * copyright notice, this list of conditions and the following disclaimer
  12. * in the documentation and/or other materials provided with the
  13. * distribution.
  14. * * Neither the name of Google Inc. nor the names of its
  15. * contributors may be used to endorse or promote products derived from
  16. * this software without specific prior written permission.
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  20. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  21. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  22. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  23. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  24. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. *
  30. * --
  31. * Author: Craig Silverstein
  32. *
  33. * C shims for the C++ malloc_hook.h. See malloc_hook.h for details
  34. * on how to use these.
  35. */
  36. #ifndef _MALLOC_HOOK_C_H_
  37. #define _MALLOC_HOOK_C_H_
  38. #include <stddef.h>
  39. #include <sys/types.h>
  40. /* Annoying stuff for windows; makes sure clients can import these functions */
  41. #ifndef PERFTOOLS_DLL_DECL
  42. # ifdef _WIN32
  43. # define PERFTOOLS_DLL_DECL __declspec(dllimport)
  44. # else
  45. # define PERFTOOLS_DLL_DECL
  46. # endif
  47. #endif
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51. /* Get the current stack trace. Try to skip all routines up to and
  52. * and including the caller of MallocHook::Invoke*.
  53. * Use "skip_count" (similarly to GetStackTrace from stacktrace.h)
  54. * as a hint about how many routines to skip if better information
  55. * is not available.
  56. */
  57. PERFTOOLS_DLL_DECL
  58. int MallocHook_GetCallerStackTrace(void** result, int max_depth,
  59. int skip_count);
  60. /* The MallocHook_{Add,Remove}*Hook functions return 1 on success and 0 on
  61. * failure.
  62. */
  63. typedef void (*MallocHook_NewHook)(const void* ptr, size_t size);
  64. PERFTOOLS_DLL_DECL
  65. int MallocHook_AddNewHook(MallocHook_NewHook hook);
  66. PERFTOOLS_DLL_DECL
  67. int MallocHook_RemoveNewHook(MallocHook_NewHook hook);
  68. typedef void (*MallocHook_DeleteHook)(const void* ptr);
  69. PERFTOOLS_DLL_DECL
  70. int MallocHook_AddDeleteHook(MallocHook_DeleteHook hook);
  71. PERFTOOLS_DLL_DECL
  72. int MallocHook_RemoveDeleteHook(MallocHook_DeleteHook hook);
  73. typedef void (*MallocHook_PreMmapHook)(const void *start,
  74. size_t size,
  75. int protection,
  76. int flags,
  77. int fd,
  78. off_t offset);
  79. PERFTOOLS_DLL_DECL
  80. int MallocHook_AddPreMmapHook(MallocHook_PreMmapHook hook);
  81. PERFTOOLS_DLL_DECL
  82. int MallocHook_RemovePreMmapHook(MallocHook_PreMmapHook hook);
  83. typedef void (*MallocHook_MmapHook)(const void* result,
  84. const void* start,
  85. size_t size,
  86. int protection,
  87. int flags,
  88. int fd,
  89. off_t offset);
  90. PERFTOOLS_DLL_DECL
  91. int MallocHook_AddMmapHook(MallocHook_MmapHook hook);
  92. PERFTOOLS_DLL_DECL
  93. int MallocHook_RemoveMmapHook(MallocHook_MmapHook hook);
  94. typedef int (*MallocHook_MmapReplacement)(const void* start,
  95. size_t size,
  96. int protection,
  97. int flags,
  98. int fd,
  99. off_t offset,
  100. void** result);
  101. int MallocHook_SetMmapReplacement(MallocHook_MmapReplacement hook);
  102. int MallocHook_RemoveMmapReplacement(MallocHook_MmapReplacement hook);
  103. typedef void (*MallocHook_MunmapHook)(const void* ptr, size_t size);
  104. PERFTOOLS_DLL_DECL
  105. int MallocHook_AddMunmapHook(MallocHook_MunmapHook hook);
  106. PERFTOOLS_DLL_DECL
  107. int MallocHook_RemoveMunmapHook(MallocHook_MunmapHook hook);
  108. typedef int (*MallocHook_MunmapReplacement)(const void* ptr,
  109. size_t size,
  110. int* result);
  111. int MallocHook_SetMunmapReplacement(MallocHook_MunmapReplacement hook);
  112. int MallocHook_RemoveMunmapReplacement(MallocHook_MunmapReplacement hook);
  113. typedef void (*MallocHook_MremapHook)(const void* result,
  114. const void* old_addr,
  115. size_t old_size,
  116. size_t new_size,
  117. int flags,
  118. const void* new_addr);
  119. PERFTOOLS_DLL_DECL
  120. int MallocHook_AddMremapHook(MallocHook_MremapHook hook);
  121. PERFTOOLS_DLL_DECL
  122. int MallocHook_RemoveMremapHook(MallocHook_MremapHook hook);
  123. typedef void (*MallocHook_PreSbrkHook)(ptrdiff_t increment);
  124. PERFTOOLS_DLL_DECL
  125. int MallocHook_AddPreSbrkHook(MallocHook_PreSbrkHook hook);
  126. PERFTOOLS_DLL_DECL
  127. int MallocHook_RemovePreSbrkHook(MallocHook_PreSbrkHook hook);
  128. typedef void (*MallocHook_SbrkHook)(const void* result, ptrdiff_t increment);
  129. PERFTOOLS_DLL_DECL
  130. int MallocHook_AddSbrkHook(MallocHook_SbrkHook hook);
  131. PERFTOOLS_DLL_DECL
  132. int MallocHook_RemoveSbrkHook(MallocHook_SbrkHook hook);
  133. /* The following are DEPRECATED. */
  134. PERFTOOLS_DLL_DECL
  135. MallocHook_NewHook MallocHook_SetNewHook(MallocHook_NewHook hook);
  136. PERFTOOLS_DLL_DECL
  137. MallocHook_DeleteHook MallocHook_SetDeleteHook(MallocHook_DeleteHook hook);
  138. PERFTOOLS_DLL_DECL
  139. MallocHook_PreMmapHook MallocHook_SetPreMmapHook(MallocHook_PreMmapHook hook);
  140. PERFTOOLS_DLL_DECL
  141. MallocHook_MmapHook MallocHook_SetMmapHook(MallocHook_MmapHook hook);
  142. PERFTOOLS_DLL_DECL
  143. MallocHook_MunmapHook MallocHook_SetMunmapHook(MallocHook_MunmapHook hook);
  144. PERFTOOLS_DLL_DECL
  145. MallocHook_MremapHook MallocHook_SetMremapHook(MallocHook_MremapHook hook);
  146. PERFTOOLS_DLL_DECL
  147. MallocHook_PreSbrkHook MallocHook_SetPreSbrkHook(MallocHook_PreSbrkHook hook);
  148. PERFTOOLS_DLL_DECL
  149. MallocHook_SbrkHook MallocHook_SetSbrkHook(MallocHook_SbrkHook hook);
  150. /* End of DEPRECATED functions. */
  151. #ifdef __cplusplus
  152. } // extern "C"
  153. #endif
  154. #endif /* _MALLOC_HOOK_C_H_ */