AC_PROG_CC
AC_PROG_LIBTOOL
-ver=`uname -r`
kernelsrc=
kernelbuild=
-AC_ARG_WITH(kernel,
- [ --with-linux=PATH Path to kernel source ],
- [kernelsrc="$withval"; kernelbuild="$withval"])
-AC_ARG_WITH(kernel-build,
- [ --with-linux-obj=PATH Path to kernel build objects ],
- [kernelbuild="$withval"])
-
-AC_MSG_CHECKING([kernel source directory])
-if test -z "$kernelsrc"; then
- kernelbuild=
- sourcelink=/lib/modules/${ver}/source
- buildlink=/lib/modules/${ver}/build
-
- if test -e $sourcelink; then
- kernelsrc=`(cd $sourcelink; /bin/pwd)`
- fi
- if test -e $buildlink; then
- kernelbuild=`(cd $buildlink; /bin/pwd)`
- fi
+
+AC_DEFUN([SPL_AC_KERNEL], [
+ ver=`uname -r`
+
+ AC_ARG_WITH([linux],
+ AS_HELP_STRING([--with-linux=PATH],
+ [Path to kernel source]),
+ [kernelsrc="$withval"; kernelbuild="$withval"])
+
+ AC_ARG_WITH([linux-build],
+ AS_HELP_STRING([--with-linux-obj=PATH],
+ [Path to kernel build objects]),
+ [kernelbuild="$withval"])
+
+ AC_MSG_CHECKING([kernel source directory])
if test -z "$kernelsrc"; then
- kernelsrc=$kernelbuild
- fi
- if test -z "$kernelsrc" -o -z "$kernelbuild"; then
- AC_MSG_RESULT([Not found])
- AC_MSG_ERROR([
+ kernelbuild=
+ sourcelink=/lib/modules/${ver}/source
+ buildlink=/lib/modules/${ver}/build
+
+ if test -e $sourcelink; then
+ kernelsrc=`(cd $sourcelink; /bin/pwd)`
+ fi
+ if test -e $buildlink; then
+ kernelbuild=`(cd $buildlink; /bin/pwd)`
+ fi
+ if test -z "$kernelsrc"; then
+ kernelsrc=$kernelbuild
+ fi
+ if test -z "$kernelsrc" -o -z "$kernelbuild"; then
+ AC_MSG_RESULT([Not found])
+ AC_MSG_ERROR([
*** Please specify the location of the kernel source
*** with the '--with-kernel=PATH' option])
+ fi
fi
-fi
-AC_MSG_RESULT([$kernelsrc])
-AC_MSG_CHECKING([kernel build directory])
-AC_MSG_RESULT([$kernelbuild])
+ AC_MSG_RESULT([$kernelsrc])
+ AC_MSG_CHECKING([kernel build directory])
+ AC_MSG_RESULT([$kernelbuild])
-AC_MSG_CHECKING([kernel source version])
-if test -r $kernelbuild/include/linux/version.h &&
- fgrep -q UTS_RELEASE $kernelbuild/include/linux/version.h; then
+ AC_MSG_CHECKING([kernel source version])
+ if test -r $kernelbuild/include/linux/version.h &&
+ fgrep -q UTS_RELEASE $kernelbuild/include/linux/version.h; then
- kernsrcver=`(echo "#include <linux/version.h>";
- echo "kernsrcver=UTS_RELEASE") |
- cpp -I $kernelbuild/include |
- grep "^kernsrcver=" | cut -d \" -f 2`
+ kernsrcver=`(echo "#include <linux/version.h>";
+ echo "kernsrcver=UTS_RELEASE") |
+ cpp -I $kernelbuild/include |
+ grep "^kernsrcver=" | cut -d \" -f 2`
-elif test -r $kernelbuild/include/linux/utsrelease.h &&
- fgrep -q UTS_RELEASE $kernelbuild/include/linux/utsrelease.h; then
+ elif test -r $kernelbuild/include/linux/utsrelease.h &&
+ fgrep -q UTS_RELEASE $kernelbuild/include/linux/utsrelease.h; then
- kernsrcver=`(echo "#include <linux/utsrelease.h>";
- echo "kernsrcver=UTS_RELEASE") |
- cpp -I $kernelbuild/include |
- grep "^kernsrcver=" | cut -d \" -f 2`
-fi
+ kernsrcver=`(echo "#include <linux/utsrelease.h>";
+ echo "kernsrcver=UTS_RELEASE") |
+ cpp -I $kernelbuild/include |
+ grep "^kernsrcver=" | cut -d \" -f 2`
+ fi
-if test -z "$kernsrcver"; then
- AC_MSG_RESULT([Not found])
- AC_MSG_ERROR([
+ if test -z "$kernsrcver"; then
+ AC_MSG_RESULT([Not found])
+ AC_MSG_ERROR([
*** Cannot determine the version of the linux kernel source.
*** Please prepare the kernel before running this script])
-fi
-
-AC_MSG_RESULT([$kernsrcver])
-kmoduledir=${INSTALL_MOD_PATH}/lib/modules/$kernsrcver
-AC_SUBST(kernelsrc)
-AC_SUBST(kmoduledir)
-
-#
-# Each version of the kernel provides a slightly different
-# ABI, so figure out what we have to work with and adapt.
-#
-AC_MSG_CHECKING([if kernel defines kzalloc function])
-if egrep -qw "kzalloc" $kernelsrc/include/linux/slab.h; then
- AC_DEFINE(HAVE_KZALLOC, 1, [kzalloc() is defined])
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
+ fi
+ AC_MSG_RESULT([$kernsrcver])
+ kmoduledir=${INSTALL_MOD_PATH}/lib/modules/$kernsrcver
+ AC_SUBST(kernelsrc)
+ AC_SUBST(kmoduledir)
+])
+
+AC_DEFUN([SPL_AC_DEBUG], [
+ AC_MSG_CHECKING([whether debugging is enabled])
+ AC_ARG_ENABLE( [debug],
+ AS_HELP_STRING([--enable-debug],
+ [Enable generic debug support (default off)]),
+ [ case "$enableval" in
+ yes) spl_ac_debug=yes ;;
+ no) spl_ac_debug=no ;;
+ *) AC_MSG_RESULT([Error!])
+ AC_MSG_ERROR([Bad value "$enableval" for --enable-debug]) ;;
+ esac ]
+ )
+ if test "$spl_ac_debug" = yes; then
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"
+ else
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
+ AC_DEFINE([NDEBUG], [1],
+ [Define to 1 to disable debug tracing])
+ fi
+ AC_MSG_RESULT([${spl_ac_debug=no}])
+])
+
+AC_DEFUN([SPL_AC_DEBUG_KMEM], [
+ AC_MSG_CHECKING([whether kmem debugging is enabled])
+ AC_ARG_ENABLE( [debug-kmem],
+ AS_HELP_STRING([--enable-debug-kmem],
+ [Enable kmem debug support (default off)]),
+ [ case "$enableval" in
+ yes) spl_ac_debug=yes ;;
+ no) spl_ac_debug=no ;;
+ *) AC_MSG_RESULT([Error!])
+ AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-kmem]) ;;
+ esac ]
+ )
+ if test "$spl_ac_debug" = yes; then
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
+ AC_DEFINE([DEBUG_KMEM], [1],
+ [Define to 1 to enable kmem debugging])
+ fi
+ AC_MSG_RESULT([${spl_ac_debug=no}])
+])
+
+AC_DEFUN([SPL_AC_DEBUG_MUTEX], [
+ AC_MSG_CHECKING([whether mutex debugging is enabled])
+ AC_ARG_ENABLE( [debug-mutex],
+ AS_HELP_STRING([--enable-debug-mutex],
+ [Enable mutex debug support (default off)]),
+ [ case "$enableval" in
+ yes) spl_ac_debug=yes ;;
+ no) spl_ac_debug=no ;;
+ *) AC_MSG_RESULT([Error!])
+ AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-mutex]) ;;
+ esac ]
+ )
+ if test "$spl_ac_debug" = yes; then
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_MUTEX"
+ AC_DEFINE([DEBUG_MUTEX], [1],
+ [Define to 1 to enable mutex debugging])
+ fi
+ AC_MSG_RESULT([${spl_ac_debug=no}])
+])
+
+AC_DEFUN([SPL_AC_DEBUG_KSTAT], [
+ AC_MSG_CHECKING([whether kstat debugging is enabled])
+ AC_ARG_ENABLE( [debug-kstat],
+ AS_HELP_STRING([--enable-debug-kstat],
+ [Enable kstat debug support (default off)]),
+ [ case "$enableval" in
+ yes) spl_ac_debug=yes ;;
+ no) spl_ac_debug=no ;;
+ *) AC_MSG_RESULT([Error!])
+ AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-kstat]) ;;
+ esac ]
+ )
+ if test "$spl_ac_debug" = yes; then
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KSTAT"
+ AC_DEFINE([DEBUG_KSTAT], [1],
+ [Define to 1 to enable kstat debugging])
+ fi
+ AC_MSG_RESULT([${spl_ac_debug=no}])
+])
+
+AC_DEFUN([SPL_AC_DEBUG_CALLB], [
+ AC_MSG_CHECKING([whether callb debugging is enabled])
+ AC_ARG_ENABLE( [debug-callb],
+ AS_HELP_STRING([--enable-debug-callb],
+ [Enable callb debug support (default off)]),
+ [ case "$enableval" in
+ yes) spl_ac_debug=yes ;;
+ no) spl_ac_debug=no ;;
+ *) AC_MSG_RESULT([Error!])
+ AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-callb]) ;;
+ esac ]
+ )
+ if test "$spl_ac_debug" = yes; then
+ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_CALLB"
+ AC_DEFINE([DEBUG_CALLB], [1],
+ [Define to 1 to enable callb debugging])
+ fi
+ AC_MSG_RESULT([${spl_ac_debug=no}])
+])
-AC_MSG_CHECKING([if kernel has mutex.h ])
-if test -f $kernelsrc/include/linux/mutex.h; then
- AC_DEFINE(HAVE_MUTEX_H, 1, [kernel has mutex.h])
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
+SPL_AC_KERNEL
+SPL_AC_DEBUG
+SPL_AC_DEBUG_KMEM
+SPL_AC_DEBUG_MUTEX
+SPL_AC_DEBUG_KSTAT
+SPL_AC_DEBUG_CALLB
TOPDIR=`/bin/pwd`
# Add "V=1" to KERNELMAKE_PARAMS to enable verbose module build
KERNELMAKE_PARAMS=
-KERNELCPPFLAGS="-I$TOPDIR -I$TOPDIR/include"
+KERNELCPPFLAGS="${KERNELCPPFLAGS} -I$TOPDIR -I$TOPDIR/include"
if test "$kernelbuild" != "$kernelsrc"; then
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$kernelbuild"
#ifndef _SPL_DEBUG_H
#define _SPL_DEBUG_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#include <linux/sched.h> /* THREAD_SIZE */
#include <linux/proc_fs.h>
#define SBUG() spl_debug_bug(__FILE__, __FUNCTION__, __LINE__, 0);
+#ifdef NDEBUG
+
+#define CDEBUG_STACK() (0)
+#define CDEBUG(mask, format, a...) ((void)0)
+#define CWARN(fmt, a...) ((void)0)
+#define CERROR(fmt, a...) ((void)0)
+#define CEMERG(fmt, a...) ((void)0)
+#define CONSOLE(mask, fmt, a...) ((void)0)
+
+#define ENTRY ((void)0)
+#define EXIT ((void)0)
+#define RETURN(x) return (x)
+#define GOTO(x, y) { ((void)(y)); goto x; }
+
+#define __ASSERT(x) ((void)0)
+#define __ASSERT_TAGE_INVARIANT(x) ((void)0)
+#define ASSERT(x) ((void)0)
+#define VERIFY(x) ((void)(x))
+
+#define VERIFY3_IMPL(x, y, z, t, f, c) if (x == z) ((void)0)
+
+#define VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%ld", (long))
+#define VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%lu", (unsigned long))
+#define VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *))
+
+#define ASSERT3S(x,y,z) VERIFY3S(x, y, z)
+#define ASSERT3U(x,y,z) VERIFY3U(x, y, z)
+#define ASSERT3P(x,y,z) VERIFY3P(x, y, z)
+
+#else /* NDEBUG */
+
#ifdef __ia64__
#define CDEBUG_STACK() (THREAD_SIZE - \
((unsigned long)__builtin_dwarf_cfa() & \
#define VERIFY(x) ASSERT(x)
-#define spl_debug_msg(cdls, subsys, mask, file, fn, line, format, a...) \
- spl_debug_vmsg(cdls, subsys, mask, file, fn, \
- line, NULL, NULL, format, ##a)
-
#define __CDEBUG(cdls, subsys, mask, format, a...) \
do { \
CHECK_STACK(); \
#define ENTRY __ENTRY(DEBUG_SUBSYSTEM)
#define EXIT __EXIT(DEBUG_SUBSYSTEM)
+#endif /* NDEBUG */
+
+#define spl_debug_msg(cdls, subsys, mask, file, fn, line, format, a...) \
+ spl_debug_vmsg(cdls, subsys, mask, file, fn, \
+ line, NULL, NULL, format, ##a)
extern int spl_debug_vmsg(spl_debug_limit_state_t *cdls, int subsys, int mask,
const char *file, const char *fn, const int line,
extern int spl_debug_clear_buffer(void);
extern int spl_debug_mark_buffer(char *text);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SPL_DEBUG_H */