[dragonegg RFC/PATCH] Add low-level support for LLVM instrumentation passes
Peter Collingbourne
peter at pcc.me.uk
Wed Apr 24 19:17:07 PDT 2013
Hi,
This patch implements the low level functionality required to be
able to use LLVM's instrumentation passes in DragonEgg. For example,
to instrument a TU using ThreadSanitizer, the following flag can be
used: -fplugin-arg-dragonegg-llvm-option=-tsan
To get things working at a high level, the appropriate runtime
libraries must be linked. For example, TSan executables must be
linked with libclang_rt.tsan-x86_64.a. To make things work for
myself, I've been hacking up spec files which emulate the Clang
driver's sanitizer functionality. For example, here's one for TSan:
------------------------------------------------------------------------
*cc1_options:
+ %{!nostdlib:-fplugin-arg-dragonegg-llvm-option=-tsan} %{!fPIC:%{!fPIE:-fPIE}}
*mflib:
+ %{!shared:%{!nostdlib:-whole-archive /path/to/llvm-build/lib/clang/3.3/lib/linux/libclang_rt.tsan-x86_64.a -no-whole-archive -lpthread -ldl -export-dynamic} %{!pie:%{!r:-pie}}}
*endfile:
%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} %{mpc32:crtprec32.o%s} %{mpc64:crtprec64.o%s} %{mpc80:crtprec80.o%s} crtendS.o%s crtn.o%s
*startfile:
%{!shared: %{pg|p|profile:gcrt1.o%s;:Scrt1.o%s}} crti.o%s %{static:crtbeginT.o%s;:crtbeginS.o%s}
------------------------------------------------------------------------
I wanted to send this patch out to open up a discussion on the best
way to support instrumentation in DragonEgg. I don't think there's
any way around using spec files, for example. Perhaps we could
have a set of .spec.in files, one for each sanitizer, which have the
right paths substituted in at compile time. (I asked a GCC developer
whether it would be possible to support custom flags in a spec file,
and his answer was "no".)
Thanks,
--
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-instrumentation-stuff.patch
Type: text/x-diff
Size: 2497 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130424/fd43d196/attachment.patch>
More information about the llvm-commits
mailing list