From 92d905026bf9677c5b0ed9c9d6b9ec2d4c93ac3d Mon Sep 17 00:00:00 2001 From: Igor Canadi Date: Tue, 19 Nov 2013 16:33:24 -0800 Subject: [PATCH] make asan_check Summary: Add asan_check rule to Makefile. After we add this, we will create Jenkins run that will check for asan errors! Test Plan: make asan_check Reviewers: dhruba, kailiu, haobo Reviewed By: dhruba CC: leveldb Differential Revision: https://reviews.facebook.net/D14205 --- Makefile | 23 +++++++++++++++++++++-- build_tools/build_detect_platform | 2 ++ build_tools/fbcode.gcc481.sh | 11 ++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 06856eeb1..b7516c35c 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,19 @@ $(shell (export ROCKSDB_ROOT=$(CURDIR); $(CURDIR)/build_tools/build_detect_platf # this file is generated by the previous line to set build flags and sources include build_config.mk +# ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc. +ifdef COMPILE_WITH_ASAN + # ASAN compile flags + EXEC_LDFLAGS += -fsanitize=address + PLATFORM_CCFLAGS += -fsanitize=address + PLATFORM_CXXFLAGS += -fsanitize=address +else + # if we're not compiling with ASAN, use jemalloc + EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS) + PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE) -DHAVE_JEMALLOC + PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE) -DHAVE_JEMALLOC +endif + WARNING_FLAGS = -Wall -Werror CFLAGS += -g $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT) CXXFLAGS += -g $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual @@ -74,8 +87,8 @@ TOOLS = \ sst_dump \ db_stress \ ldb \ - db_repl_stress \ - blob_store_bench + db_repl_stress \ + blob_store_bench PROGRAMS = db_bench signal_test $(TESTS) $(TOOLS) BENCHMARKS = db_bench_sqlite3 db_bench_tree_db table_reader_bench @@ -147,6 +160,12 @@ blackbox_crash_test: db_stress whitebox_crash_test: db_stress python -u tools/db_crashtest2.py +asan_check: + $(MAKE) clean + COMPILE_WITH_ASAN=1 $(MAKE) check -j32 + COMPILE_WITH_ASAN=1 $(MAKE) crash_test -j32 + $(MAKE) clean + valgrind_check: all $(PROGRAMS) $(TESTS) mkdir -p $(VALGRIND_DIR) echo TESTS THAT HAVE VALGRIND ERRORS > $(VALGRIND_DIR)/valgrind_failed_tests; \ diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform index ef446bf7e..5b3d58c8c 100755 --- a/build_tools/build_detect_platform +++ b/build_tools/build_detect_platform @@ -270,3 +270,5 @@ echo "PLATFORM_SHARED_EXT=$PLATFORM_SHARED_EXT" >> $OUTPUT echo "PLATFORM_SHARED_LDFLAGS=$PLATFORM_SHARED_LDFLAGS" >> $OUTPUT echo "PLATFORM_SHARED_VERSIONED=$PLATFORM_SHARED_VERSIONED" >> $OUTPUT echo "EXEC_LDFLAGS=$EXEC_LDFLAGS" >> $OUTPUT +echo "JEMALLOC_INCLUDE=$JEMALLOC_INCLUDE" >> $OUTPUT +echo "JEMALLOC_LIB=$JEMALLOC_LIB" >> $OUTPUT diff --git a/build_tools/fbcode.gcc481.sh b/build_tools/fbcode.gcc481.sh index 211de94d2..6d8b9c766 100644 --- a/build_tools/fbcode.gcc481.sh +++ b/build_tools/fbcode.gcc481.sh @@ -12,7 +12,6 @@ else TOOLCHAIN_EXECUTABLES="/mnt/gvfs/third-party/$TOOLCHAIN_REV/centos5.2-native" fi TOOLCHAIN_LIB_BASE="/mnt/gvfs/third-party/$TOOLCHAIN_REV/gcc-4.8.1-glibc-2.17" -TOOL_JEMALLOC=jemalloc-3.3.1/4d53c6f # location of libhdfs libraries if test "$USE_HDFS"; then @@ -48,6 +47,10 @@ BZIP_LIBS=" $TOOLCHAIN_LIB_BASE/bzip2/bzip2-1.0.6/c3f970a/lib/libbz2.a" GFLAGS_INCLUDE=" -I $TOOLCHAIN_LIB_BASE/gflags/gflags-1.6/c3f970a/include" GFLAGS_LIBS=" $TOOLCHAIN_LIB_BASE/gflags/gflags-1.6/c3f970a/lib/libgflags.a" +# location of jemalloc +JEMALLOC_INCLUDE=" -I $TOOLCHAIN_LIB_BASE/jemalloc/jemalloc-3.4.1/4d53c6f/include/" +JEMALLOC_LIB=" -Wl,--whole-archive $TOOLCHAIN_LIB_BASE/jemalloc/jemalloc-3.4.1/4d53c6f/lib/libjemalloc.a" + # use Intel SSE support for checksum calculations export USE_SSE=" -msse -msse4.2 " @@ -57,13 +60,11 @@ AR=$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin/ar RANLIB=$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin/ranlib CFLAGS="-B$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin/gold -m64 -mtune=generic -fPIC" -CFLAGS+=" -I $TOOLCHAIN_LIB_BASE/jemalloc/$TOOL_JEMALLOC/include -DHAVE_JEMALLOC -nostdlib" -CFLAGS+=" $LIBGCC_INCLUDE $GLIBC_INCLUDE" +CFLAGS+=" -nostdlib $LIBGCC_INCLUDE $GLIBC_INCLUDE" CFLAGS+=" -DROCKSDB_PLATFORM_POSIX -DROCKSDB_ATOMIC_PRESENT" CFLAGS+=" -DSNAPPY -DGFLAGS -DZLIB -DBZIP2" EXEC_LDFLAGS="-Wl,--dynamic-linker,/usr/local/fbcode/gcc-4.8.1-glibc-2.17/lib/ld.so" -EXEC_LDFLAGS+=" -Wl,--whole-archive $TOOLCHAIN_LIB_BASE/jemalloc/$TOOL_JEMALLOC/lib/libjemalloc.a" EXEC_LDFLAGS+=" -Wl,--no-whole-archive $TOOLCHAIN_LIB_BASE/libunwind/libunwind-1.0.1/675d945/lib/libunwind.a" EXEC_LDFLAGS+=" $HDFSLIB $SNAPPY_LIBS $ZLIB_LIBS $BZIP_LIBS $GFLAGS_LIBS" @@ -73,4 +74,4 @@ EXEC_LDFLAGS_SHARED="$SNAPPY_LIBS $ZLIB_LIBS $BZIP_LIBS $GFLAGS_LIBS" VALGRIND_VER="$TOOLCHAIN_LIB_BASE/valgrind/valgrind-3.8.1/c3f970a/bin/" -export CC CXX AR RANLIB CFLAGS EXEC_LDFLAGS EXEC_LDFLAGS_SHARED VALGRIND_VER +export CC CXX AR RANLIB CFLAGS EXEC_LDFLAGS EXEC_LDFLAGS_SHARED VALGRIND_VER JEMALLOC_LIB JEMALLOC_INCLUDE