fix-build-mingw-bsd.diff 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. diff --git a/malloc_hook.cpp b/malloc_hook.cpp
  2. index 14fae64..7de77d1 100644
  3. --- a/malloc_hook.cpp
  4. +++ b/malloc_hook.cpp
  5. @@ -13,6 +13,10 @@
  6. #if __unix__
  7. # include <sys/mman.h>
  8. # include <unistd.h>
  9. +#if defined(__FreeBSD__)
  10. +# include <pthread_np.h>
  11. +# include <malloc_np.h>
  12. +#endif
  13. # define MALLOCVIS_EXPORT
  14. #elif _WIN32
  15. # include <windows.h>
  16. @@ -36,7 +40,9 @@
  17. namespace {
  18. uint32_t get_thread_id() {
  19. -#if __unix__
  20. +#if defined(__FreeBSD__)
  21. + return pthread_getthreadid_np();
  22. +#elif __unix__
  23. return gettid();
  24. #elif _WIN32
  25. return GetCurrentThreadId();
  26. @@ -213,7 +219,17 @@ struct EnableGuard {
  27. } // namespace
  28. -#if __GNUC__
  29. +#if __GNUC__ && !_WIN32
  30. +#if defined(__FreeBSD__)
  31. +extern "C" void* malloc(size_t size);
  32. +extern "C" void free(void* ptr);
  33. +extern "C" void* calloc(size_t nmemb, size_t size);
  34. +extern "C" void* realloc(void *ptr, size_t size);
  35. +extern "C" void * reallocarray(void *ptr, size_t nmemb,
  36. + size_t size);
  37. +extern "C" void * valloc(size_t size);
  38. +extern "C" void* memalign(size_t alignment, size_t size);
  39. +#else
  40. extern "C" void *__libc_malloc(size_t size) noexcept;
  41. extern "C" void __libc_free(void *ptr) noexcept;
  42. extern "C" void *__libc_calloc(size_t nmemb, size_t size) noexcept;
  43. @@ -222,7 +238,12 @@ extern "C" void *__libc_reallocarray(void *ptr, size_t nmemb,
  44. size_t size) noexcept;
  45. extern "C" void *__libc_valloc(size_t size) noexcept;
  46. extern "C" void *__libc_memalign(size_t align, size_t size) noexcept;
  47. +#endif
  48. +#if defined(__FreeBSD__)
  49. +# define REAL_LIBC(name) name
  50. +#else
  51. # define REAL_LIBC(name) __libc_##name
  52. +#endif
  53. # ifndef MAY_OVERRIDE_MALLOC
  54. # define MAY_OVERRIDE_MALLOC 1
  55. # endif
  56. @@ -246,7 +267,11 @@ extern "C" void *__libc_memalign(size_t align, size_t size) noexcept;
  57. # define RETURN_ADDRESS ((void *)0)
  58. # pragma message("Cannot find __builtin_return_address")
  59. # endif
  60. +#if defined(__FreeBSD__)
  61. +# define CSTDLIB_NOEXCEPT
  62. +#else
  63. # define CSTDLIB_NOEXCEPT noexcept
  64. +#endif
  65. #elif _MSC_VER
  66. static void *msvc_malloc(size_t size) noexcept {
  67. return HeapAlloc(GetProcessHeap(), 0, size);