[libcxx-commits] [PATCH] D121478: [libc++] Add a lightweight overridable assertion handler

Alan Zhao via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Aug 17 14:46:08 PDT 2022


ayzhao added a comment.

We tried overriding the abort handler in Chromium, and this fails with a linker error when we target Windows, statically link libc++ along with our custom handler (in `base/nodebug_assertion.cc`), enable ThinLTO, and build using `clang-cl`:

  lld-link: error: duplicate symbol: void __cdecl std::Cr::__libcpp_verbose_abort(char const *, ...)
  >>> defined at ../../base/nodebug_assertion.cc
  >>>            obj/base/nodebug_assertion/nodebug_assertion.obj
  >>> defined at ../../buildtools/third_party/libc++/trunk/src/verbose_abort.cpp
  >>>            obj/buildtools/third_party/libc++/libc++/verbose_abort.obj

I believe this is due to the fact that Windows binaries don't have the concept of weak symbols, so the linker is unable to override the `libc++` version.

Since working with weak symbols can be flaky, would it be possible to implement this using function pointers? E.g. make `__libcpp_verbose_abort(...)` a static function pointer that we call `_LIBCPP_ASSERT(...)`, and add a method `__libcpp_override_abort(...)` that users can call to set and override that function pointer.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121478/new/

https://reviews.llvm.org/D121478



More information about the libcxx-commits mailing list