# libust and '.' (that contains the linker script). However, '.'
# must be installed after libust so it can overwrite libust.so with
# the linker script.
-SUBDIRS = snprintf liblttng-ust-comm libringbuffer libust include doc tests
+SUBDIRS = snprintf liblttng-ust-comm libringbuffer libust include doc tests \
+ java
#temporarily disabled
# . libustinstr-malloc libustfork
- java
A simple library that uses JNI to allow tracing in java programs.
+ See java/README for build instructions.
AC_DEFINE([HAVE_EFFICIENT_UNALIGNED_ACCESS], [1])
fi
+# Set compile flags to java include files if given
+AC_ARG_WITH(java_jdk, [ --with-java-jdk=DIR use java jdk from DIR. Ex : $JAVA_HOME.], JAVA_SDK=$withval,)
+if test $JAVA_SDK; then
+ if test -d $JAVA_SDK; then
+ AC_MSG_RESULT([using java include in $JAVA_SDK])
+ SUBDIRS=`find $JAVA_SDK/include -type d`
+ CFLAGS+=" "
+ CFLAGS+=`for x in $SUBDIRS; do echo -n "-I$x "; done`
+ CFLAGS+=" "
+ else
+ AC_MSG_ERROR(Unable to find java include file in $JAVA_JDK)
+ fi
+fi
+
+# Check for JNI header files if requested
+AC_ARG_WITH(jni-interface, [ --with-jni-interface build JNI interface between C and java. Need java include files.
+ [[default=no]]])
+
+if test -z "$with_jni_interface"; then
+ with_jni_interface=${with_jni_interface_default-no}
+fi
+
+if test "$with_jni_interface" = "yes"; then
+ AC_CHECK_HEADERS([jni.h],,AC_MSG_ERROR([
+missing jni.h
+Make sure Sun Java, OpenJDK or GCJ is installed and that this header file exists in the system path.
+Use --with-java-jdk=DIR flag to point to your java include files or desactivate the JNI interface.]))
+fi
+AM_CONDITIONAL(BUILD_JNI_INTERFACE, test "$with_jni_interface" = "yes")
+
AC_CONFIG_FILES([
Makefile
doc/Makefile
snprintf/Makefile
ust.pc
include/ust/version.h
+ java/Makefile
])
AC_OUTPUT
+if BUILD_JNI_INTERFACE
+
AM_CPPFLAGS = -I$(top_srcdir)/include
lib_LTLIBRARIES = libustjava.la
-libustjava_la_SOURCES = UST.c UST.h
+libustjava_la_SOURCES = UST.c UST.h ust_java.h
dist_noinst_DATA = UST.java
libustjava_la_LIBADD = -lc -L$(top_builddir)/libust/.libs -lust
UST.class: UST.java
javac -d "$(builddir)" "$(srcdir)/UST.java"
-UST.h:
+UST.h: UST.class
javah -jni UST
+
+endif
This directory contains a simple API for instrumenting java applications.
-Look at the example in the tests/java directory for usage.
+Configuration examples to build this library:
+
+dependency: sun-java6-jdk
+./configure --with-java-jdk=/usr/lib/jvm/java-6-sun --with-jni-interface
+
+dependency: openjdk-6-jdk
+./configure --with-java-jdk=/usr/lib/jvm/java-6-openjdk --with-jni-interface
+
+dependency: gcj-4.4-jdk
+./configure --with-java-jdk=/usr/lib/jvm/java-gcj --with-jni-interface
+
+Our testing shows that sun java6 and openjdk 6 build fine, but not gcj
+4.4.
#include <jni.h>
-#include <ust/marker.h>
-JNIEXPORT void JNICALL Java_UST_ust_1java_1event (JNIEnv *env, jobject jobj, jstring ev_name, jstring args)
+#define TRACEPOINT_CREATE_PROBES
+#include "ust_java.h"
+
+JNIEXPORT void JNICALL Java_UST_ust_1java_1event (JNIEnv *env, jobject jobj,
+ jstring ev_name, jstring args)
{
jboolean iscopy;
- const char *ev_name_cstr = (*env)->GetStringUTFChars(env, ev_name, &iscopy);
+ const char *ev_name_cstr = (*env)->GetStringUTFChars(env, ev_name,
+ &iscopy);
const char *args_cstr = (*env)->GetStringUTFChars(env, args, &iscopy);
- ust_marker(ust, java_event, "name %s args %s", ev_name_cstr, args_cstr);
+ tracepoint(ust_java_event, ev_name_cstr, args_cstr);
}
-UST_MARKER_LIB
+TRACEPOINT_LIB
--- /dev/null
+#undef TRACEPOINT_SYSTEM
+#define TRACEPOINT_SYSTEM ust_java
+
+#if !defined(_TRACEPOINT_UST_JAVA_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define _TRACEPOINT_UST_JAVA_H
+
+/*
+ * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; version 2.1 of
+ * the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <ust/tracepoint.h>
+
+TRACEPOINT_EVENT(ust_java_event,
+ TP_PROTO(const char *name, const char *args),
+ TP_ARGS(name, args),
+ TP_FIELDS(
+ ctf_string(name, name)
+ ctf_string(args, args)
+ )
+)
+
+#endif /* _TRACEPOINT_UST_JAVA_H */
+
+#undef TRACEPOINT_INCLUDE_PATH
+#define TRACEPOINT_INCLUDE_PATH .
+#undef TRACEPOINT_INCLUDE_FILE
+#define TRACEPOINT_INCLUDE_FILE ust_java
+
+/* This part must be outside protection */
+#include <ust/tracepoint-event.h>