perf jvmti: Fix jitdump for methods without debug info
authorNick Gasson <nick.gasson@arm.com>
Mon, 27 Apr 2020 06:15:14 +0000 (14:15 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 28 May 2020 13:03:28 +0000 (10:03 -0300)
If a Java class is compiled with -g:none to omit debug information, the
JVMTI plugin won't write jitdump entries for any method in this class
and prints a lot of errors like:

    java: GetSourceFileName failed with JVMTI_ERROR_ABSENT_INFORMATION

The call to GetSourceFileName is used to derive the file name `fn`, but
this value is not actually used since commit ca58d7e64bdf ("perf jvmti:
Generate correct debug information for inlined code") which moved the
file name lookup into fill_source_filenames(). So the call to
GetSourceFileName and related code can be safely removed.

Signed-off-by: Nick Gasson <nick.gasson@arm.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Tested-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20200427061520.24905-2-nick.gasson@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/jvmti/libjvmti.c

index c441a34..50ef524 100644 (file)
@@ -246,8 +246,6 @@ compiled_method_load_cb(jvmtiEnv *jvmti,
        char *class_sign = NULL;
        char *func_name = NULL;
        char *func_sign = NULL;
-       char *file_name = NULL;
-       char fn[PATH_MAX];
        uint64_t addr = (uint64_t)(uintptr_t)code_addr;
        jvmtiError ret;
        int nr_lines = 0; /* in line_tab[] */
@@ -282,12 +280,6 @@ compiled_method_load_cb(jvmtiEnv *jvmti,
                }
        }
 
-       ret = (*jvmti)->GetSourceFileName(jvmti, decl_class, &file_name);
-       if (ret != JVMTI_ERROR_NONE) {
-               print_error(jvmti, "GetSourceFileName", ret);
-               goto error;
-       }
-
        ret = (*jvmti)->GetClassSignature(jvmti, decl_class,
                                          &class_sign, NULL);
        if (ret != JVMTI_ERROR_NONE) {
@@ -302,8 +294,6 @@ compiled_method_load_cb(jvmtiEnv *jvmti,
                goto error;
        }
 
-       copy_class_filename(class_sign, file_name, fn, PATH_MAX);
-
        /*
         * write source line info record if we have it
         */
@@ -323,7 +313,6 @@ error:
        (*jvmti)->Deallocate(jvmti, (unsigned char *)func_name);
        (*jvmti)->Deallocate(jvmti, (unsigned char *)func_sign);
        (*jvmti)->Deallocate(jvmti, (unsigned char *)class_sign);
-       (*jvmti)->Deallocate(jvmti, (unsigned char *)file_name);
        free(line_tab);
        while (line_file_names && (nr_lines > 0)) {
            if (line_file_names[nr_lines - 1]) {