[Sheepdog] [RFC PATCH 01/11] trace: driver trace to work

Liu Yuan namei.unix at gmail.com
Tue Jan 17 12:59:52 CET 2012


From: Liu Yuan <tailai.ly at taobao.com>


Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 configure.ac      |   30 ++++++++++++++++++++++++++++--
 sheep/Makefile.am |    6 +++++-
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index bfad873..7341c70 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,6 +66,7 @@ if ! ${MAKE-make} --version /cannot/make/this >/dev/null 2>&1; then
 fi
 
 AC_PROG_CC
+AM_PROG_AS
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MAKE_SET
@@ -202,6 +203,11 @@ AC_ARG_ENABLE([farm],
 	[ enable_farm="yes" ],)
 AM_CONDITIONAL(BUILD_FARM, test x$enable_farm = xyes)
 
+AC_ARG_ENABLE([trace],
+	[  --enable-trace           : enable trace],,
+	[ enable_trace="yes" ],)
+AM_CONDITIONAL(BUILD_TRACE, test x$enable_trace = xyes)
+
 CP=cp
 OS_LDL="-ldl"
 case "$host_os" in
@@ -272,6 +278,13 @@ if test "x${enable_farm}" = xyes; then
 	PACKAGE_FEATURES="$PACKAGE_FEATURES farm"
 fi
 
+if test "x${enable_trace}" = xyes; then
+	AC_CHECK_LIB([rt], [clock_gettime],,
+		AC_MSG_ERROR(librt not found))
+	AC_DEFINE_UNQUOTED([HAVE_TRACE], 1, [have trace])
+	PACKAGE_FEATURES="$PACKAGE_FEATURES trace"
+fi
+
 # extra warnings
 EXTRA_WARNINGS=""
 
@@ -325,11 +338,23 @@ else
 	WERROR_CFLAGS=""
 fi
 
+if test "x${enable_trace}" = xyes && \
+		cc_supports_flag -pg && \
+		cc_supports_flag -gstabs ; then
+	AC_MSG_NOTICE([Enabling trace (-pg -gstabs)])
+	TRACE_CFLAGS="-pg -gstabs"
+	TRACE_LDFLAGS="-T$(pwd)/sheep/trace/trace.ld"
+	PACKAGE_FEATURES="$PACKAGE_FEATURES trace"
+else
+	TRACE_CFLAGS=""
+fi
+
 # final build of *FLAGS
 CFLAGS="$ENV_CFLAGS $OPT_CFLAGS $GDB_FLAGS $OS_CFLAGS \
-	$COVERAGE_CFLAGS $EXTRA_WARNINGS $WERROR_CFLAGS $NSS_CFLAGS -D_GNU_SOURCE"
+	$TRACE_CFLAGS $COVERAGE_CFLAGS $EXTRA_WARNINGS $WERROR_CFLAGS $NSS_CFLAGS \
+	-D_GNU_SOURCE"
 CPPFLAGS="$ENV_CPPFLAGS $ANSI_CPPFLAGS $OS_CPPFLAGS"
-LDFLAGS="$ENV_LDFLAGS $COVERAGE_LDFLAGS $OS_LDFLAGS"
+LDFLAGS="$ENV_LDFLAGS $COVERAGE_LDFLAGS $OS_LDFLAGS $TRACE_LDFLAGS"
 
 # substitute what we need:
 AC_SUBST([OS_DYFLAGS])
@@ -383,6 +408,7 @@ AC_MSG_RESULT([  ANSI defined CPPFLAGS    = ${ANSI_CPPFLAGS}])
 AC_MSG_RESULT([  Coverage     CFLAGS      = ${COVERAGE_CFLAGS}])
 AC_MSG_RESULT([  Coverage     LDFLAGS     = ${COVERAGE_LDFLAGS}])
 AC_MSG_RESULT([  Fatal War.   CFLAGS      = ${WERROR_CFLAGS}])
+AC_MSG_RESULT([  Trace        CFLAGS      = ${TRACE_CFLAGS}])
 AC_MSG_RESULT([  Final        CFLAGS      = ${CFLAGS}])
 AC_MSG_RESULT([  Final        CPPFLAGS    = ${CPPFLAGS}])
 AC_MSG_RESULT([  Final        LDFLAGS     = ${LDFLAGS}])
diff --git a/sheep/Makefile.am b/sheep/Makefile.am
index 279af77..4696f6f 100644
--- a/sheep/Makefile.am
+++ b/sheep/Makefile.am
@@ -40,12 +40,16 @@ if BUILD_FARM
 sheep_SOURCES		+= farm/sha1_file.c farm/trunk.c farm/snap.c farm/farm.c
 endif
 
+if BUILD_TRACE
+sheep_SOURCES		+= trace/trace.c trace/mcount.S trace/stabs.c trace/graph.c
+endif
+
 sheep_LDADD	  	= ../lib/libsheepdog.a -lpthread \
 			  $(libcpg_LIBS) $(libcfg_LIBS) $(libacrd_LIBS) $(LIBS)
 sheep_DEPENDENCIES	= ../lib/libsheepdog.a
 
 
-noinst_HEADERS		= work.h sheep_priv.h cluster.h strbuf.h farm/farm.h
+noinst_HEADERS		= work.h sheep_priv.h cluster.h strbuf.h farm/farm.h trace/trace.h
 
 EXTRA_DIST		= 
 
-- 
1.7.8.2




More information about the sheepdog mailing list