On Jul 24 22:41, Jeremy Drake via Cygwin wrote: > I was looking into C++ new/delete --wrap linker options, and noticed that > in a quick test the wrapper for delete was not being called. This was > because delete is being compiled to _ZdlPvm and that symbol is not present > in the --wrap arguments in the GCC spec, and is not part of the > per_process_cxx_malloc struct. I'm not seeing anything in that cxx_malloc > struct like a size or version number, so I don't know a good way to > extend it given that it is part of the startup code linked into every > binary. > > Here are the current symbols from libc++ and how they demangle: > > _ZdaPv operator delete[](void*) > _ZdaPvm operator delete[](void*, unsigned long) > _ZdaPvmSt11align_val_t operator delete[](void*, unsigned long, > std::align_val_t) > _ZdaPvRKSt9nothrow_t operator delete[](void*, std::nothrow_t const&) > _ZdaPvSt11align_val_t operator delete[](void*, std::align_val_t) > _ZdaPvSt11align_val_tRKSt9nothrow_t operator delete[](void*, > std::align_val_t, std::nothrow_t const&) > _ZdlPv operator delete(void*) > _ZdlPvm operator delete(void*, unsigned long) > _ZdlPvmSt11align_val_t operator delete(void*, unsigned long, > std::align_val_t) > _ZdlPvRKSt9nothrow_t operator delete(void*, std::nothrow_t const&) > _ZdlPvSt11align_val_t operator delete(void*, std::align_val_t) > _ZdlPvSt11align_val_tRKSt9nothrow_t operator delete(void*, > std::align_val_t, std::nothrow_t const&) > _Znam operator new[](unsigned long) > _ZnamRKSt9nothrow_t operator new[](unsigned long, std::nothrow_t const&) > _ZnamSt11align_val_t operator new[](unsigned long, std::align_val_t) > _ZnamSt11align_val_tRKSt9nothrow_t operator new[](unsigned long, > std::align_val_t, std::nothrow_t const&) > _Znwm operator new(unsigned long) > _ZnwmRKSt9nothrow_t operator new(unsigned long, std::nothrow_t const&) > _ZnwmSt11align_val_t operator new(unsigned long, std::align_val_t) > _ZnwmSt11align_val_tRKSt9nothrow_t operator new(unsigned long, > std::align_val_t, std::nothrow_t const&)
Wow, these got a lot more since we started to support this back in 2009 and ported to 64 bit in 2013. But first I have to tell you that I'm fuzzy on how this exactly is working together. I can't tell you how this affects GCC or LD. Nevertheless, the code overriding the members in per_process_cxx_malloc is living in the app (_cygwin_crt0_common.cc). If you just append members to per_process_cxx_malloc nad implement the wrappers in cxx.cc and libstdcxx_wrapper.cc, then old apps using the old _cygwin_crt0_common.cc will just not see the new functions. So that should work out of the box, shouldn't it? Corinna -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple

