perf tools: Separate jvmti cmlr check
Jiri Olsa
reviewerPATCH 1/1 perf tools: Separate jvmti cmlr check
The Compiled Method Load Record (cmlr) is JDK specific interface to access JVM stack info. This makes the jvmti agent code not compile under another jdk, which does not support that.
Separating jvmti cmlr check into special feature check, and adding HAVE_JVMTI_CMLR macro to indicate that.
Mark cmlr code in jvmti/libjvmti.c with HAVE_JVMTI_CMLR, so we can compile it on system without cmlr support.
This change makes the jvmti compile with java-1.8.0-ibm package. It's without the line numbers support, but the rest works.
Adding NO_JVMTI_CMLR compile variable for testing.
--- tools/build/feature/Makefile | 4 ++++ tools/build/feature/test-jvmti-cmlr.c | 11 +++++++++++ tools/build/feature/test-jvmti.c | 1 - tools/perf/Makefile.config | 7 +++++++ tools/perf/Makefile.perf | 3 +++ tools/perf/jvmti/libjvmti.c | 12 ++++++++++++ 6 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tools/build/feature/test-jvmti-cmlr.c
tools/build/feature/Makefile +4 -0
@@ -53,6 +53,7 @@ FILES= \ test-sdt.bin \ test-cxx.bin \ test-jvmti.bin \ + test-jvmti-cmlr.bin \ test-sched_getcpu.bin \ test-setns.bin \ test-libopencsd.bin \
@@ -259,6 +260,9 @@ $(OUTPUT)test-cxx.bin: $(OUTPUT)test-jvmti.bin: $(BUILD) +$(OUTPUT)test-jvmti-cmlr.bin: + $(BUILD) + $(OUTPUT)test-llvm.bin: $(BUILDXX) -std=gnu++11 \ -I$(shell $(LLVM_CONFIG) --includedir) \
tools/build/feature/test-jvmti-cmlr.c new file +11 -0
@@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <jvmti.h> +#include <jvmticmlr.h> + +int main (void ) +{ + jvmtiCompiledMethodLoadInlineRecord rec __attribute__((unused)); + jvmtiCompiledMethodLoadRecordHeader hdr __attribute__((unused)); + PCStackInfo p __attribute__((unused)); +return 0 ; +}
tools/build/feature/test-jvmti.c +0 -1
@@ -1,6 +1,5 @@// SPDX-License-Identifier: GPL-2.0 #include <jvmti.h> -#include <jvmticmlr.h> int main (void ) {
tools/perf/Makefile.config +7 -0
@@ -847,6 +847,13 @@ ifndef NO_JVMTI $(call feature_check,jvmti) ifeq ($(feature-jvmti), 1) $(call detected_var,JDIR) + ifndef NO_JVMTI_CMLR + FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti) + $(call feature_check,jvmti-cmlr) + ifeq ($(feature-jvmti-cmlr), 1) + CFLAGS += -DHAVE_JVMTI_CMLR + endif + endif # NO_JVMTI_CMLR else $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel) NO_JVMTI := 1
tools/perf/Makefile.perf +3 -0
@@ -95,6 +95,9 @@ include ../scripts/utilities.mak # # Define NO_JVMTI if you do not want jvmti agent built # +# Define NO_JVMTI_CMLR (debug only) if you do not want to process CMLR +# data for java source lines. +# # Define LIBCLANGLLVM if you DO want builtin clang and llvm support. # When selected, pass LLVM_CONFIG=/path/to/llvm-config to `make' if # llvm-config is not in $PATH.
tools/perf/jvmti/libjvmti.c +12 -0
@@ -6,7 +6,9 @@#include <stdlib.h> #include <err.h> #include <jvmti.h> +#ifdef HAVE_JVMTI_CMLR #include <jvmticmlr.h> +#endif #include <limits.h> #include "jvmti_agent.h"
@@ -27,6 +29,7 @@ static void print_error(jvmtiEnv *jvmti, const char *msg, jvmtiError ret) } } +#ifdef HAVE_JVMTI_CMLR static jvmtiError do_get_line_numbers (jvmtiEnv *jvmti,void *pc,jmethodID m,jint bci,jvmti_line_info_t *tab,jint *nr)
@@ -125,6 +128,15 @@ get_line_numbers(jvmtiEnv *jvmti, const void *compile_info, jvmti_line_info_t ** *nr_lines = lines_total; return JVMTI_ERROR_NONE; } +#else /* HAVE_JVMTI_CMLR */ + +static jvmtiError +get_line_numbers (jvmtiEnv *jvmti__maybe_unused ,const void *compile_info__maybe_unused , +jvmti_line_info_t **tab__maybe_unused ,int *nr_lines__maybe_unused ) +{ +return JVMTI_ERROR_NONE ; +} +#endif /* HAVE_JVMTI_CMLR */ static void copy_class_filename (const char * class_sign,const char * file_name,char * result,size_t max_length)
Signature · 1 line
2.17.2
Arnaldo Carvalho de Melo
maintainerEm Wed, Nov 21, 2018 at 04:43:41PM +0100, Jiri Olsa escreveu:
Quoted 8 lines
The Compiled Method Load Record (cmlr) is JDK specific interface to access JVM stack info. This makes the jvmti agent code not compile under another jdk, which does not support that.
Separating jvmti cmlr check into special feature check, and adding
HAVE_JVMTI_CMLRmacro to indicate that.
Quoted 8 lines
Mark cmlr code in
jvmti/libjvmti.cwithHAVE_JVMTI_CMLR, so we can compile it on system without cmlr support.This change makes the jvmti compile with java-1.8.0-ibm package. It's without the line numbers support, but the rest works.
Adding
NO_JVMTI_CMLRcompile variable for testing.
Looks sane, thanks, applied.
- Arnaldo
Quoted 137 lines
Cc Gustavo Luiz Duarte (IBM) <[email protected]>Cc Ben Gainey <[email protected]>Cc Stephane Eranian <[email protected]>Signed-off-by Jiri Olsa <[email protected]>--- tools/build/feature/Makefile | 4 ++++ tools/build/feature/test-jvmti-cmlr.c | 11 +++++++++++ tools/build/feature/test-jvmti.c | 1 - tools/perf/Makefile.config | 7 +++++++ tools/perf/Makefile.perf | 3 +++ tools/perf/jvmti/libjvmti.c | 12 ++++++++++++ 6 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tools/build/feature/test-jvmti-cmlr.ctools/build/feature/Makefile +4
-0@@ -53,6 +53,7 @@ FILES= \ test-sdt.bin \ test-cxx.bin \ test-jvmti.bin \ + test-jvmti-cmlr.bin \ test-sched_getcpu.bin \ test-setns.bin \ test-libopencsd.bin \@@ -259,6 +260,9 @@ $(OUTPUT)test-cxx.bin: $(OUTPUT)test-jvmti.bin: $(BUILD) +$(OUTPUT)test-jvmti-cmlr.bin: + $(BUILD) + $(OUTPUT)test-llvm.bin: $(BUILDXX) -std=gnu++11 \ -I$(shell $(LLVM_CONFIG) --includedir) \tools/build/feature/test-jvmti-cmlr.c new file +11
-0@@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <jvmti.h> +#include <jvmticmlr.h> + +int main (void ) +{ + jvmtiCompiledMethodLoadInlineRecord rec __attribute__((unused)); + jvmtiCompiledMethodLoadRecordHeader hdr __attribute__((unused)); + PCStackInfo p __attribute__((unused)); +return 0 ; +}tools/build/feature/test-jvmti.c +0
-1@@ -1,6 +1,5 @@// SPDX-License-Identifier: GPL-2.0 #include <jvmti.h> -#include <jvmticmlr.h> int main (void ) {tools/perf/Makefile.config +7
-0@@ -847,6 +847,13 @@ ifndef NO_JVMTI $(call feature_check,jvmti) ifeq ($(feature-jvmti), 1) $(call detected_var,JDIR) + ifndef NO_JVMTI_CMLR + FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti) + $(call feature_check,jvmti-cmlr) + ifeq ($(feature-jvmti-cmlr), 1) + CFLAGS += -DHAVE_JVMTI_CMLR + endif + endif # NO_JVMTI_CMLR else $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel) NO_JVMTI := 1tools/perf/Makefile.perf +3
-0@@ -95,6 +95,9 @@ include ../scripts/utilities.mak # # Define NO_JVMTI if you do not want jvmti agent built # +# Define NO_JVMTI_CMLR (debug only) if you do not want to process CMLR +# data for java source lines. +# # Define LIBCLANGLLVM if you DO want builtin clang and llvm support. # When selected, pass LLVM_CONFIG=/path/to/llvm-config to `make' if # llvm-config is not in $PATH.tools/perf/jvmti/libjvmti.c +12
-0@@ -6,7 +6,9 @@#include <stdlib.h> #include <err.h> #include <jvmti.h> +#ifdef HAVE_JVMTI_CMLR #include <jvmticmlr.h> +#endif #include <limits.h> #include "jvmti_agent.h" @@ -27,6 +29,7 @@ static void print_error(jvmtiEnv *jvmti, const char *msg, jvmtiError ret) } } +#ifdef HAVE_JVMTI_CMLR static jvmtiError do_get_line_numbers (jvmtiEnv *jvmti,void *pc,jmethodID m,jint bci,jvmti_line_info_t *tab,jint *nr)@@ -125,6 +128,15 @@ get_line_numbers(jvmtiEnv *jvmti, const void *compile_info, jvmti_line_info_t ** *nr_lines = lines_total; return JVMTI_ERROR_NONE; } +#else /* HAVE_JVMTI_CMLR */ + +static jvmtiError +get_line_numbers (jvmtiEnv *jvmti__maybe_unused ,const void *compile_info__maybe_unused , +jvmti_line_info_t **tab__maybe_unused ,int *nr_lines__maybe_unused ) +{ +return JVMTI_ERROR_NONE ; +} +#endif /* HAVE_JVMTI_CMLR */ static void copy_class_filename (const char * class_sign,const char * file_name,char * result,size_t max_length)Signature · 1 line
2.17.2
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf jvmti: Separate jvmti cmlr check
In reply to Jiri Olsaperf jvmti: Separate jvmti cmlr check
Commit-ID: dd1d0044dd1c1bf84a9b3e1f24e43347b26b96a0 Gitweb: https://git.kernel.org/tip/dd1d0044dd1c1bf84a9b3e1f24e43347b26b96a0 Author: Jiri Olsa <[email protected]> AuthorDate: Wed, 21 Nov 2018 16:43:41 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 21 Nov 2018 22:39:58 -0300
perf jvmti: Separate jvmti cmlr check
The Compiled Method Load Record (cmlr) is JDK specific interface to access JVM stack info. This makes the jvmti agent code not compile under another jdk, which does not support that.
Separating jvmti cmlr check into special feature check, and adding HAVE_JVMTI_CMLR macro to indicate that.
Mark cmlr code in jvmti/libjvmti.c with HAVE_JVMTI_CMLR, so we can compile it on system without cmlr support.
This change makes the jvmti compile with java-1.8.0-ibm package. It's without the line numbers support, but the rest works.
Adding NO_JVMTI_CMLR compile variable for testing.
--- tools/build/feature/Makefile | 4 ++++ tools/build/feature/test-jvmti-cmlr.c | 11 +++++++++++ tools/build/feature/test-jvmti.c | 1 - tools/perf/Makefile.config | 7 +++++++ tools/perf/Makefile.perf | 3 +++ tools/perf/jvmti/libjvmti.c | 12 ++++++++++++ 6 files changed, 37 insertions(+), 1 deletion(-)
tools/build/feature/Makefile +4 -0
@@ -55,6 +55,7 @@ FILES= \ test-sdt.bin \ test-cxx.bin \ test-jvmti.bin \ + test-jvmti-cmlr.bin \ test-sched_getcpu.bin \ test-setns.bin \ test-libopencsd.bin \
@@ -267,6 +268,9 @@ $(OUTPUT)test-cxx.bin: $(OUTPUT)test-jvmti.bin: $(BUILD) +$(OUTPUT)test-jvmti-cmlr.bin: + $(BUILD) + $(OUTPUT)test-llvm.bin: $(BUILDXX) -std=gnu++11 \ -I$(shell $(LLVM_CONFIG) --includedir) \
tools/build/feature/test-jvmti-cmlr.c new file +11 -0
@@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <jvmti.h> +#include <jvmticmlr.h> + +int main (void ) +{ + jvmtiCompiledMethodLoadInlineRecord rec __attribute__((unused)); + jvmtiCompiledMethodLoadRecordHeader hdr __attribute__((unused)); + PCStackInfo p __attribute__((unused)); +return 0 ; +}
tools/build/feature/test-jvmti.c +0 -1
@@ -1,6 +1,5 @@// SPDX-License-Identifier: GPL-2.0 #include <jvmti.h> -#include <jvmticmlr.h> int main (void ) {
tools/perf/Makefile.config +7 -0
@@ -855,6 +855,13 @@ ifndef NO_JVMTI $(call feature_check,jvmti) ifeq ($(feature-jvmti), 1) $(call detected_var,JDIR) + ifndef NO_JVMTI_CMLR + FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti) + $(call feature_check,jvmti-cmlr) + ifeq ($(feature-jvmti-cmlr), 1) + CFLAGS += -DHAVE_JVMTI_CMLR + endif + endif # NO_JVMTI_CMLR else $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel) NO_JVMTI := 1
tools/perf/Makefile.perf +3 -0
@@ -95,6 +95,9 @@ include ../scripts/utilities.mak # # Define NO_JVMTI if you do not want jvmti agent built # +# Define NO_JVMTI_CMLR (debug only) if you do not want to process CMLR +# data for java source lines. +# # Define LIBCLANGLLVM if you DO want builtin clang and llvm support. # When selected, pass LLVM_CONFIG=/path/to/llvm-config to `make' if # llvm-config is not in $PATH.
tools/perf/jvmti/libjvmti.c +12 -0
@@ -6,7 +6,9 @@#include <stdlib.h> #include <err.h> #include <jvmti.h> +#ifdef HAVE_JVMTI_CMLR #include <jvmticmlr.h> +#endif #include <limits.h> #include "jvmti_agent.h"
@@ -27,6 +29,7 @@ static void print_error(jvmtiEnv *jvmti, const char *msg, jvmtiError ret) } } +#ifdef HAVE_JVMTI_CMLR static jvmtiError do_get_line_numbers (jvmtiEnv *jvmti,void *pc,jmethodID m,jint bci,jvmti_line_info_t *tab,jint *nr)
@@ -125,6 +128,15 @@ get_line_numbers(jvmtiEnv *jvmti, const void *compile_info, jvmti_line_info_t ** *nr_lines = lines_total; return JVMTI_ERROR_NONE; } +#else /* HAVE_JVMTI_CMLR */ + +static jvmtiError +get_line_numbers (jvmtiEnv *jvmti__maybe_unused ,const void *compile_info__maybe_unused , +jvmti_line_info_t **tab__maybe_unused ,int *nr_lines__maybe_unused ) +{ +return JVMTI_ERROR_NONE ; +} +#endif /* HAVE_JVMTI_CMLR */ static void copy_class_filename (const char * class_sign,const char * file_name,char * result,size_t max_length)