This is an archive of the discontinued LLVM Phabricator instance.

[scudo] Implement stricter separation of C vs C++
ClosedPublic

Authored by cryptoad on Oct 31 2017, 10:36 AM.

Details

Summary

Initially, Scudo had a monolithic design where both C and C++ functions were
living in the same library. This was not necessarily ideal, and with the work
on -fsanitize=scudo, it became more apparent that this needed to change.

We are splitting the new/delete interceptor in their own C++ library. This
allows more flexibility, notably with regard to std::bad_alloc when the work is
done. This also allows us to not link new & delete when using pure C.

Additionally, we add the UBSan runtimes with Scudo, in order to be able to have
a -fsanitize=scudo,undefined in Clang (see work in D39334).

The changes in this patch:

  • split the cxx specific code in the scudo cmake file into a new library; (remove the spurious foreach loop, that was not necessary)
  • add the UBSan runtimes (both C and C++);
  • change the test cmake file to allow for specific C & C++ tests;
  • make C tests pure C, rename their extension accordingly.

Event Timeline

cryptoad created this revision.Oct 31 2017, 10:36 AM
alekseyshl accepted this revision.Oct 31 2017, 10:56 AM
alekseyshl added inline comments.
test/scudo/lit.cfg
31

Super nit :)
cxx_flags = (c_flags + config.cxx_mode_flags + ["-std=c++11"])

This revision is now accepted and ready to land.Oct 31 2017, 10:56 AM
cryptoad updated this revision to Diff 121027.Oct 31 2017, 11:35 AM
cryptoad marked an inline comment as done.

Addressing review comment.

cryptoad updated this revision to Diff 121036.Oct 31 2017, 12:37 PM

Adding the UBSan runtimes to the Shared library rule.

cryptoad updated this revision to Diff 121038.Oct 31 2017, 1:02 PM

Changing the dynamic library preload test to be C++y.

alekseyshl accepted this revision.Oct 31 2017, 1:46 PM
cryptoad closed this revision.Nov 1 2017, 8:28 AM
test/scudo/threads.c