blob: 81a87c6940830eda351e98dcded8a3d5bf738027 [file] [log] [blame]
Evgeniy Stepanov79b2d172013-02-22 09:34:19 +00001Experimental DynamoRIO-MSAN plugin (codename "MSanDR").
2Supports Linux/x86_64 only.
3
4Building:
5 1. First, download and build DynamoRIO:
6 (svn co https://dynamorio.googlecode.com/svn/trunk dr && \
7 cd dr && mkdir build && cd build && \
8 cmake -DDR_EXT_DRMGR_STATIC=ON -DDR_EXT_DRSYMS_STATIC=ON \
Evgeniy Stepanovb6c3c122013-09-02 14:21:12 +00009 -DDR_EXT_DRUTIL_STATIC=ON -DDR_EXT_DRWRAP_STATIC=ON \
10 -DDR_EXT_DRX_STATIC=ON .. && \
Evgeniy Stepanov79b2d172013-02-22 09:34:19 +000011 make -j10 && make install)
12
13 2. Download and build DrMemory (for DrSyscall extension)
14 (svn co http://drmemory.googlecode.com/svn/trunk/ drmemory && \
15 cd drmemory && mkdir build && cd build && \
16 cmake -DDynamoRIO_DIR=`pwd`/../../dr/exports/cmake .. && \
17 make -j10 && make install)
18
19 NOTE: The line above will build a shared DrSyscall library in a non-standard
20 location. This will require the use of LD_LIBRARY_PATH when running MSanDR.
21 To build a static DrSyscall library (and link it into MSanDR), add
22 -DDR_EXT_DRSYSCALL_STATIC=ON to the CMake invocation above, but
23 beware: DrSyscall is LGPL.
24
25 3. Now, build LLVM with two extra CMake flags:
26 -DDynamoRIO_DIR=<path_to_dynamorio>/exports/cmake
27 -DDrMemoryFramework_DIR=<path_to_drmemory>/exports64/drmf
28
29 This will build a lib/clang/$VERSION/lib/linux/libclang_rt.msandr-x86_64.so
30
31Running:
32 <path_to_dynamorio>/exports/bin64/drrun -c lib/clang/$VERSION/lib/linux/libclang_rt.msandr-x86_64.so -- test_binary
33
34MSan unit tests contain several tests for MSanDR (use MemorySanitizerDr.* gtest filter).
Evgeniy Stepanov48abc612013-09-13 11:00:50 +000035
36Debugging:
37 Add -DCMAKE_BUILD_TYPE=Debug to the first and/or second cmake invocation(s).
38 Add -debug -v to drrun invocation line (right before -c).
39 Add -checklevel 1 to drrun (as the first argument) to make debug DR faster.
40