From: hanseld <ha...@us...> - 2008-04-28 21:24:54
|
Update of /cvsroot/oprofile/oprofile In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv15532 Modified Files: autogen.sh Makefile.am configure.in TODO Added Files: README_PACKAGERS Log Message: JIT support (for profiling Java applications) added Index: autogen.sh =================================================================== RCS file: /cvsroot/oprofile/oprofile/autogen.sh,v retrieving revision 1.9 retrieving revision 1.10 diff -u -p -d -r1.9 -r1.10 --- autogen.sh 22 Mar 2003 16:46:00 -0000 1.9 +++ autogen.sh 28 Apr 2008 21:23:25 -0000 1.10 @@ -35,6 +35,7 @@ if test -n "$1"; then exit 1 fi +libtoolize --automake run "$ACLOCAL -I m4" run $AUTOHEADER run "$AUTOMAKE --foreign --add-missing --copy" Index: Makefile.am =================================================================== RCS file: /cvsroot/oprofile/oprofile/Makefile.am,v retrieving revision 1.24 retrieving revision 1.25 diff -u -p -d -r1.24 -r1.25 --- Makefile.am 16 Jul 2007 20:13:20 -0000 1.24 +++ Makefile.am 28 Apr 2008 21:23:25 -0000 1.25 @@ -3,6 +3,7 @@ SUBDIRS = \ m4 \ libutil \ libop \ + libopagent \ libdb \ libutil++ \ libopt++ \ @@ -11,10 +12,12 @@ SUBDIRS = \ utils \ libregex \ libpp \ + opjitconv \ pp \ events \ doc \ - gui + gui \ + agents ACLOCAL_AMFLAGS = -I m4 @@ -38,12 +41,28 @@ install-exec-local: -mkdir -p $(MODINSTALLDIR)/oprofile cp module/oprofile-module.o $(MODINSTALLDIR)/oprofile/oprofile.o if test $(KVERS) = "`uname -r`"; then depmod -a ; fi + @getent group oprofile >/dev/null || (echo "Error: The special group 'oprofile' does not exist" && exit 1) ; + @getent passwd oprofile >/dev/null || (echo "Error: The special user 'oprofile' does not exist" && exit 1) ; + @if test `id -gn oprofile 2>/dev/null` != "oprofile"; then \ + echo "Error: The special user 'oprofile' does not belong to the special group 'oprofile'."; \ + exit 1; \ + fi clean-local: rm -f module/*.o module/@OPROFILE_MODULE_ARCH@/*.o \ module/.*.o.cmd module/.*.o.flags \ module/@OPROFILE_MODULE_ARCH@/.*.o.cmd module/@OPROFILE_MODULE_ARCH@/.*.o.flags +else + +install-exec-local: + @getent group oprofile >/dev/null || (echo "Error: The special group 'oprofile' does not exist" && exit 1) ; + @getent passwd oprofile >/dev/null || (echo "Error: The special user 'oprofile' does not exist" && exit 1) ; + @if test `id -gn oprofile 2>/dev/null` != "oprofile"; then \ + echo "Error: The special user 'oprofile' does not belong to the special group 'oprofile'."; \ + exit 1; \ + fi + endif EXTRA_DIST = \ Index: configure.in =================================================================== RCS file: /cvsroot/oprofile/oprofile/configure.in,v retrieving revision 1.230 retrieving revision 1.231 diff -u -p -d -r1.230 -r1.231 --- configure.in 16 Jul 2007 22:05:06 -0000 1.230 +++ configure.in 28 Apr 2008 21:23:25 -0000 1.231 @@ -16,6 +16,7 @@ AM_INIT_AUTOMAKE(oprofile, 0.9.4cvs) AM_CONFIG_HEADER(config.h) AC_PROG_RANLIB +AC_PROG_LIBTOOL dnl for the man page DATE="`date '+%a %d %B %Y'`" @@ -68,6 +69,18 @@ AC_ARG_WITH(module-dir, [ --with-module-dir=dir Path to module installation directory], MODINSTALLDIR=$withval) AC_SUBST(MODINSTALLDIR) +AC_ARG_WITH(java, +[ --with-java=java-home Path to Java home directory], JAVA_HOMEDIR=$withval) +AC_SUBST(JAVA_HOMEDIR) + +if test -n "$JAVA_HOMEDIR"; then + AC_CHECK_FILE("$JAVA_HOMEDIR/include/jvmti.h",JVMTI_H_EXISTS="yes",) + AC_CHECK_FILE("$JAVA_HOMEDIR/include/jvmpi.h",JVMPI_H_EXISTS="yes",) +fi + +AM_CONDITIONAL(BUILD_JVMTI_AGENT, test -n "$JVMTI_H_EXISTS") +AM_CONDITIONAL(BUILD_JVMPI_AGENT, test -n "$JVMPI_H_EXISTS") + AX_MALLOC_ATTRIBUTE AX_BUILTIN_EXPECT @@ -210,6 +223,7 @@ AC_OUTPUT(Makefile \ libutil++/tests/Makefile \ libop/Makefile \ libop/tests/Makefile \ + libopagent/Makefile \ libopt++/Makefile \ libdb/Makefile \ libdb/tests/Makefile \ @@ -235,15 +249,35 @@ AC_OUTPUT(Makefile \ doc/opimport.1 \ doc/srcdoc/Doxyfile \ libpp/Makefile \ + opjitconv/Makefile \ pp/Makefile \ gui/Makefile \ gui/ui/Makefile \ module/Makefile \ module/x86/Makefile \ - module/ia64/Makefile) + module/ia64/Makefile \ + agents/Makefile \ + agents/jvmti/Makefile \ + agents/jvmpi/Makefile) AX_COPY_IF_CHANGE(doc/xsl/catalog-1.xml, doc/xsl/catalog.xml) if test -z "$QT_LIB"; then echo "Warning: a working Qt not found; no GUI will be built" fi + +if test "`getent passwd oprofile 2>/dev/null`" == "" || \ + test "`getent group oprofile 2>/dev/null`" == ""; then + if test `id -u` != "0"; then + echo "Warning: The user account 'oprofile:oprofile' does not exist on the system." + echo " Please ask your system administrator to add the following user:" + echo " user name : 'oprofile'" + echo " group name: 'oprofile'" + else + echo "Warning: The user account 'oprofile:oprofile' does not exist on the system." + echo " Please add the following user:" + echo " user name : 'oprofile'" + echo " group name: 'oprofile'" + fi +fi + Index: TODO =================================================================== RCS file: /cvsroot/oprofile/oprofile/TODO,v retrieving revision 1.432 retrieving revision 1.433 diff -u -p -d -r1.432 -r1.433 --- TODO 1 Nov 2007 17:04:28 -0000 1.432 +++ TODO 28 Apr 2008 21:23:25 -0000 1.433 @@ -177,6 +177,68 @@ Documentation o document gcc 2.95 and linenr info problems especially for inline functions o finish the internals manual +JIT support +----------- + + o We need a more dynamic structure to handle entries_address_ascending and + entries_symbols_ascending, actually many scaling problem occur because they + are array, this was perfect to get a first implementation focusing on + handling overlap and all but the need to qsort/copy arrays at each iteration + is a performance killer. Some sort of AVL tree will do the job. + o Related to the previous, it's possible to do all processing in opjitconv.c + in a single left to right walk of the jitentry list. + o see the FIXME at parse_dump.c:parse_code_unload() + o Increment JITHEADER_VERSION in jitdump.h to be sure that the new code only + accepts dump file created by the new code. + o opjitconv.c:replacement_name() should be enough clever to avoid name + collision so we can remove the recursive call to disambiguate_symbol_names(), + need a hash table or some sort of associative array to check quickly if a + name exists, we will need some sort of avl tree so it's probably better + to do not implement a hash table only for this purpose. + o op_write_native_code() must accept one more parameter, the real code size + which can be zero or equal to code_size, this will allow to create elf + file w/o any code contents, only a symbol table and .text sections w/o + contents (yes ELF format allow that). For dynamic binary translation it'll + avoid to dump tons of code for little use, opannotate --assembly will not + work on such elf file but it can be a real win. It'll need to add to + jitrecord0 a real_size field, and some trickery when building the elf file, + taking care about the case we mix zero code size with non zero code size. + Perhaps we can use it too for java, filtering native method etc. Actually + we allow a simplified form of this feature by allowing to disable/enable + code dumping but at the whole dump level not on a symbol basis, quite + possible sufficient. [mpj: We're backing away from the idea of dumping + JIT records without code. Since BFD asymbol type does not include symbol size, + the op_bfd technique for determining symbol size relies on knowing the true + file size; and if code is not included in the .jo file, we don't have true size.] + o The pipe used for triggering JIT dump conversion should be used for normal + dumping too. + o See FIXME in agents/jvmti/libjvmti_oprofile.c: + If enablement to get line number info would be configurable through command line, + what should be the default on/off? + o See FIXME in opjitconv/debug_line.c + o The way to use the pipe should be made more secure to avoid denial of service + attacks. We have to think about it. + o Callgraph does not work properly for the .jo files the JIT support creates. + See section Chapter 4, sect 2.3.2 "Callgraph and JIT support". Try to figure + out a way to correlate an anonymous sample callgraph entry with + the .jo file that may exist for the anonymous code. + o see mail from Gisle Dankel: + "JIT_SUPPORT: Adding support for file-backed non-ELF JIT code" + -> should be changed (if useful) before next release + o See FIXME in op_header.cpp: + The check for header.mtime of JIT sample files is not correct because currently + this mtime value is set to zero due to missing cookie setting for JIT sample files. + Some additional check/setting to header.mtime should be made for JIT sample files. + o Mono JIT support: + + 2007-11-08: with callgraph massi got + <massi> oparchive error: parse_filename() invalid filename: /var/lib/oprofile/samples/current/{root}/var/lib/oprofile/samples/current/{root}/home/massi/mono/amd64/bin/mono/{dep}/{anon:anon}/32432.0x40a26000.0x40a36000/CPU_CLK_UNHALTED.100000.0.all.all.all/{dep}/{root}/var/lib/oprofile/samples/current/{root}/home/massi/mono/amd64/bin/mono/{dep}/{anon:anon}/32432.0x40a26000.0x40a36000/CPU_CLK_UNHALTED.100000.0.all.all.all/{cg}/{root}/usr/oprofile/bin/oprofiled/CPU_CLK_ + + Massi added Mono JIT support, code on the stack is never unloaded and there is + no byte code, code is always compiled to native machine code, this mean than + for mono at least we can do callgraph if we can fix this samples filename + problem. + General checks to make ---------------------- |