]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Darwin new/delete wrappers: fix on x86
authorPaul Floyd <pjfloyd@wanadoo.fr>
Wed, 26 Nov 2025 20:22:51 +0000 (21:22 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Wed, 26 Nov 2025 20:22:51 +0000 (21:22 +0100)
Untested code is always full of surprises.

Darwin x86 doesn't use size_t for the size (where 32bit
size_t is unsigned int and 64but size_t is unsigned long).
Instead it uses unsigned long on both platforms.

That changes the mangled name. It's all 'm' for unsigned long
rather than 32bit 'j' for unsigned short and 64bit 'm'
for unsigned long.

coregrind/m_replacemalloc/vg_replace_malloc.c

index 114e9222880991c60baaefaf0969a30209b2497c..7d92450c4e2e523741169e4dbb8f6fe395ef80df 100644 (file)
@@ -503,18 +503,11 @@ extern int * __error(void) __attribute__((weak));
  #endif
 
 #elif defined(VGO_darwin)
- // operator new(unsigned int)
- #if VG_WORDSIZE == 4
-  ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znwj,          __builtin_new);
-  ALLOC_or_BOMB(VG_Z_LIBCXX_SONAME,    _Znwj,          __builtin_new);
-  ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znwj,          __builtin_new);
- #endif
+ // both 32bit and 64bit
  // operator new(unsigned long)
- #if VG_WORDSIZE == 8
   ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znwm,          __builtin_new);
   ALLOC_or_BOMB(VG_Z_LIBCXX_SONAME,    _Znwm,          __builtin_new);
   ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znwm,          __builtin_new);
- #endif
 
 #elif defined(VGO_solaris)
  // operator new(unsigned int)
@@ -563,16 +556,10 @@ extern int * __error(void) __attribute__((weak));
  #endif
 
 #elif defined(VGO_darwin)
- #if VG_WORDSIZE == 4
-  ALLOC_or_BOMB_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnwjSt11align_val_t, __builtin_new_aligned, NewAligned);
-  ALLOC_or_BOMB_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnwjSt11align_val_t, __builtin_new_aligned, NewAligned);
-  ALLOC_or_BOMB_ALIGNED(SO_SYN_MALLOC,         _ZnwjSt11align_val_t, __builtin_new_aligned, NewAligned);
- #endif
- #if VG_WORDSIZE == 8
+  // both 32bit and 64bit
   ALLOC_or_BOMB_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnwmSt11align_val_t, __builtin_new_aligned, NewAligned);
   ALLOC_or_BOMB_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnwmSt11align_val_t, __builtin_new_aligned, NewAligned);
   ALLOC_or_BOMB_ALIGNED(SO_SYN_MALLOC,         _ZnwmSt11align_val_t, __builtin_new_aligned, NewAligned);
- #endif
 
 #elif defined(VGO_solaris)
  // operator new(unsigned int, std::align_val_t)
@@ -623,18 +610,11 @@ extern int * __error(void) __attribute__((weak));
  #endif
 
 #elif defined(VGO_darwin)
- // operator new(unsigned, std::nothrow_t const&)
- #if VG_WORDSIZE == 4
-  ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnwjRKSt9nothrow_t,  __builtin_new);
-  ALLOC_or_NULL(VG_Z_LIBCXX_SONAME,    _ZnwjRKSt9nothrow_t,  __builtin_new);
-  ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnwjRKSt9nothrow_t,  __builtin_new);
- #endif
+ // both 32bit and 64bit
  // operator new(unsigned long, std::nothrow_t const&)
- #if VG_WORDSIZE == 8
   ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnwmRKSt9nothrow_t,  __builtin_new);
   ALLOC_or_NULL(VG_Z_LIBCXX_SONAME,    _ZnwmRKSt9nothrow_t,  __builtin_new);
   ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnwmRKSt9nothrow_t,  __builtin_new);
- #endif
 
 #elif defined(VGO_solaris)
  // operator new(unsigned, std::nothrow_t const&)
@@ -683,16 +663,10 @@ extern int * __error(void) __attribute__((weak));
  #endif
 
 #elif defined(VGO_darwin)
- #if VG_WORDSIZE == 4
-  ALLOC_or_NULL_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnwjSt11align_val_tRKSt9nothrow_t,  __builtin_new_aligned, NewAligned);
-  ALLOC_or_NULL_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnwjSt11align_val_tRKSt9nothrow_t,  __builtin_new_aligned, NewAligned);
-  ALLOC_or_NULL_ALIGNED(SO_SYN_MALLOC,         _ZnwjSt11align_val_tRKSt9nothrow_t,  __builtin_new_aligned, NewAligned);
- #endif
- #if VG_WORDSIZE == 8
+  // both 32bit and 64bit
   ALLOC_or_NULL_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnwmSt11align_val_tRKSt9nothrow_t,  __builtin_new_aligned, NewAligned);
   ALLOC_or_NULL_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnwmSt11align_val_tRKSt9nothrow_t,  __builtin_new_aligned, NewAligned);
   ALLOC_or_NULL_ALIGNED(SO_SYN_MALLOC,         _ZnwmSt11align_val_tRKSt9nothrow_t,  __builtin_new_aligned, NewAligned);
- #endif
 
 #elif defined(VGO_solaris)
  // operator new(unsigned, std::align_val_t, std::nothrow_t const&)
@@ -745,18 +719,11 @@ extern int * __error(void) __attribute__((weak));
  #endif
 
 #elif defined(VGO_darwin)
- // operator new[](unsigned int)
- #if VG_WORDSIZE == 4
-  ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znaj,             __builtin_vec_new );
-  ALLOC_or_BOMB(VG_Z_LIBCXX_SONAME,    _Znaj,             __builtin_vec_new );
-  ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znaj,             __builtin_vec_new );
- #endif
+ // both 32bit and 64bit
  // operator new[](unsigned long)
- #if VG_WORDSIZE == 8
   ALLOC_or_BOMB(VG_Z_LIBSTDCXX_SONAME, _Znam,             __builtin_vec_new );
   ALLOC_or_BOMB(VG_Z_LIBCXX_SONAME,    _Znam,             __builtin_vec_new );
   ALLOC_or_BOMB(SO_SYN_MALLOC,         _Znam,             __builtin_vec_new );
- #endif
 
 #elif defined(VGO_solaris)
  // operator new[](unsigned int)
@@ -806,17 +773,11 @@ extern int * __error(void) __attribute__((weak));
 
 #elif defined(VGO_darwin)
 
- #if VG_WORDSIZE == 4
-  ALLOC_or_BOMB_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnajSt11align_val_t, __builtin_vec_new_aligned, VecNewAligned );
-  ALLOC_or_BOMB_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnajSt11align_val_t, __builtin_vec_new_aligned, VecNewAligned );
-  ALLOC_or_BOMB_ALIGNED(SO_SYN_MALLOC,         _ZnajSt11align_val_t, __builtin_vec_new_aligned, VecNewAligned );
- #endif
+ // both 32bit and 64bit
  // operator new[](unsigned long, std::align_val_t)
- #if VG_WORDSIZE == 8
   ALLOC_or_BOMB_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnamSt11align_val_t, __builtin_vec_new_aligned, VecNewAligned );
   ALLOC_or_BOMB_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnamSt11align_val_t, __builtin_vec_new_aligned, VecNewAligned );
   ALLOC_or_BOMB_ALIGNED(SO_SYN_MALLOC,         _ZnamSt11align_val_t, __builtin_vec_new_aligned, VecNewAligned );
- #endif
 
 #elif defined(VGO_solaris)
  // operator new[](unsigned int, std::align_val_t)
@@ -866,18 +827,11 @@ extern int * __error(void) __attribute__((weak));
  #endif
 
 #elif defined(VGO_darwin)
- // operator new[](unsigned, std::nothrow_t const&)
- #if VG_WORDSIZE == 4
-  ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnajRKSt9nothrow_t, __builtin_vec_new );
-  ALLOC_or_NULL(VG_Z_LIBCXX_SONAME,    _ZnajRKSt9nothrow_t, __builtin_vec_new );
-  ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnajRKSt9nothrow_t, __builtin_vec_new );
- #endif
+ // both 32bit and 64bit
  // operator new[](unsigned long, std::nothrow_t const&)
- #if VG_WORDSIZE == 8
   ALLOC_or_NULL(VG_Z_LIBSTDCXX_SONAME, _ZnamRKSt9nothrow_t, __builtin_vec_new );
   ALLOC_or_NULL(VG_Z_LIBCXX_SONAME,    _ZnamRKSt9nothrow_t, __builtin_vec_new );
   ALLOC_or_NULL(SO_SYN_MALLOC,         _ZnamRKSt9nothrow_t, __builtin_vec_new );
- #endif
 
 #elif defined(VGO_solaris)
  // operator new[](unsigned, std::nothrow_t const&)
@@ -927,17 +881,10 @@ extern int * __error(void) __attribute__((weak));
 
 #elif defined(VGO_darwin)
 
- #if VG_WORDSIZE == 4
-  ALLOC_or_NULL_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnajSt11align_val_tRKSt9nothrow_t, __builtin_vec_new_aligned, VecNewAligned );
-  ALLOC_or_NULL_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnajSt11align_val_tRKSt9nothrow_t, __builtin_vec_new_aligned, VecNewAligned );
-  ALLOC_or_NULL_ALIGNED(SO_SYN_MALLOC,         _ZnajSt11align_val_tRKSt9nothrow_t, __builtin_vec_new_aligned, VecNewAligned );
- #endif
- // operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
- #if VG_WORDSIZE == 8
+  // both 32bit and 64bit
   ALLOC_or_NULL_ALIGNED(VG_Z_LIBSTDCXX_SONAME, _ZnamSt11align_val_tRKSt9nothrow_t, __builtin_vec_new_aligned, VecNewAligned );
   ALLOC_or_NULL_ALIGNED(VG_Z_LIBCXX_SONAME,    _ZnamSt11align_val_tRKSt9nothrow_t, __builtin_vec_new_aligned, VecNewAligned );
   ALLOC_or_NULL_ALIGNED(SO_SYN_MALLOC,         _ZnamSt11align_val_tRKSt9nothrow_t, __builtin_vec_new_aligned, VecNewAligned );
- #endif
 
 #elif defined(VGO_solaris)
  // operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
@@ -1198,17 +1145,11 @@ extern int * __error(void) __attribute__((weak));
 #endif
 
 #elif defined(VGO_darwin)
- // operator delete(void*, unsigned int)
-#if __SIZEOF_SIZE_T__ == 4
- DELETE_SIZED(VG_Z_LIBSTDCXX_SONAME,  _ZdlPvj,               __builtin_delete, DeleteSized );
- DELETE_SIZED(VG_Z_LIBCXX_SONAME,     _ZdlPvj,               __builtin_delete, DeleteSized );
- DELETE_SIZED(SO_SYN_MALLOC,          _ZdlPvj,               __builtin_delete, DeleteSized );
-#elif __SIZEOF_SIZE_T__ == 8
+ // both 32bit and 64bit
  // operator delete(void*, unsigned long)
  DELETE_SIZED(VG_Z_LIBSTDCXX_SONAME,  _ZdlPvm,               __builtin_delete, DeleteSized );
  DELETE_SIZED(VG_Z_LIBCXX_SONAME,     _ZdlPvm,               __builtin_delete, DeleteSized );
  DELETE_SIZED(SO_SYN_MALLOC,          _ZdlPvm,               __builtin_delete, DeleteSized );
-#endif
 
 #elif defined(VGO_solaris)
  // operator delete(void*, unsigned long)
@@ -1307,17 +1248,10 @@ extern int * __error(void) __attribute__((weak));
  DELETE_ALIGNED(VG_Z_LIBCXX_SONAME,     _ZdlPvSt11align_val_t,               __builtin_delete_aligned, DeleteAligned );
  DELETE_ALIGNED(SO_SYN_MALLOC,          _ZdlPvSt11align_val_t,               __builtin_delete_aligned, DeleteAligned );
 
- // operator delete(void*, unsigned int, std::align_val_t)
-#if __SIZEOF_SIZE_T__ == 4
- DELETE_SIZED_ALIGNED(VG_Z_LIBSTDCXX_SONAME,  _ZdlPvjSt11align_val_t,               __builtin_delete_aligned, DeleteSizedAligned );
- DELETE_SIZED_ALIGNED(VG_Z_LIBCXX_SONAME,     _ZdlPvjSt11align_val_t,               __builtin_delete_aligned, DeleteSizedAligned );
- DELETE_SIZED_ALIGNED(SO_SYN_MALLOC,          _ZdlPvjSt11align_val_t,               __builtin_delete_aligned, DeleteSizedAligned );
- // operator delete(void*, unsigned long, std::align_val_t)
-#elif __SIZEOF_SIZE_T__ == 8
+ // both 32bit and 64bit
  DELETE_SIZED_ALIGNED(VG_Z_LIBSTDCXX_SONAME,  _ZdlPvmSt11align_val_t,               __builtin_delete_aligned, DeleteSizedAligned );
  DELETE_SIZED_ALIGNED(VG_Z_LIBCXX_SONAME,     _ZdlPvmSt11align_val_t,               __builtin_delete_aligned, DeleteSizedAligned );
  DELETE_SIZED_ALIGNED(SO_SYN_MALLOC,          _ZdlPvmSt11align_val_t,               __builtin_delete_aligned, DeleteSizedAligned );
-#endif
 
 #elif defined(VGO_solaris)
 
@@ -1461,15 +1395,10 @@ extern int * __error(void) __attribute__((weak));
 
 #elif defined(VGO_darwin)
 
-  #if __SIZEOF_SIZE_T__ == 4
-  DELETE_SIZED(VG_Z_LIBSTDCXX_SONAME,  _ZdaPvj,              __builtin_vec_delete, VecDeleteSized );
-  DELETE_SIZED(VG_Z_LIBCXX_SONAME,     _ZdaPvj,              __builtin_vec_delete, VecDeleteSized );
-  DELETE_SIZED(SO_SYN_MALLOC,          _ZdaPvj,              __builtin_vec_delete, VecDeleteSized );
- #elif __SIZEOF_SIZE_T__ == 8
+  // both 32bit and 64bit
   DELETE_SIZED(VG_Z_LIBSTDCXX_SONAME,  _ZdaPvm,              __builtin_vec_delete, VecDeleteSized );
   DELETE_SIZED(VG_Z_LIBCXX_SONAME,     _ZdaPvm,              __builtin_vec_delete, VecDeleteSized );
   DELETE_SIZED(SO_SYN_MALLOC,          _ZdaPvm,              __builtin_vec_delete, VecDeleteSized );
- #endif
 
 #elif defined(VGO_solaris)
  // operator delete[](void*, unsigned int)
@@ -1532,17 +1461,11 @@ extern int * __error(void) __attribute__((weak));
  DELETE_ALIGNED(VG_Z_LIBCXX_SONAME,     _ZdaPvSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteAligned );
  DELETE_ALIGNED(SO_SYN_MALLOC,          _ZdaPvSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteAligned );
 
- // operator delete[](void*, unsigned int, std::align_val_t)
- #if __SIZEOF_SIZE_T__ == 4
- DELETE_SIZED_ALIGNED(VG_Z_LIBSTDCXX_SONAME,  _ZdaPvjSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteSizedAligned );
- DELETE_SIZED_ALIGNED(VG_Z_LIBCXX_SONAME,     _ZdaPvjSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteSizedAligned );
- DELETE_SIZED_ALIGNED(SO_SYN_MALLOC,          _ZdaPvjSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteSizedAligned );
+ // both 32bit and 64bit
  // operator delete[](void*, unsigned long, std::align_val_t)
- #elif __SIZEOF_SIZE_T__ == 8
  DELETE_SIZED_ALIGNED(VG_Z_LIBSTDCXX_SONAME,  _ZdaPvmSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteSizedAligned );
  DELETE_SIZED_ALIGNED(VG_Z_LIBCXX_SONAME,     _ZdaPvmSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteSizedAligned );
  DELETE_SIZED_ALIGNED(SO_SYN_MALLOC,          _ZdaPvmSt11align_val_t, __builtin_vec_delete_aligned, VecDeleteSizedAligned );
-#endif
 
 
 #elif defined(VGO_solaris)