• N
    perf jvmti: Fix demangling Java symbols · ef4a0e27
    Nick Gasson 提交于
    mainline inclusion
    from mainline-v5.7
    commit 0bdf3181
    category: bugfix
    bugzilla: NA
    CVE: NA
    
    -------------------------------------------------
    
    For a Java method signature like:
    
        Ljava/lang/AbstractStringBuilder;appendChars(Ljava/lang/String;II)V
    
    The demangler produces:
    
        void class java.lang.AbstractStringBuilder.appendChars(class java.lang., shorttring., int, int)
    
    The arguments should be (java.lang.String, int, int) but the demangler
    interprets the "S" in String as the type code for "short". Correct this
    and two other minor things:
    
    - There is no "bool" type in Java, should be "boolean".
    
    - The demangler prepends "class" to every Java class name. This is not
      standard Java syntax and it wastes a lot of horizontal space if the
      signature is long. Remove this as there isn't any ambiguity between
      class names and primitives.
    
    Committer notes:
    
    This was split from a larger patch that also added a java demangler
    'perf test' entry, that, before this patch shows the error being fixed
    by it:
    
      $ perf test java
      65: Demangle Java                                         : FAILED!
      $ perf test -v java
      Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
      65: Demangle Java                                         :
      --- start ---
      test child forked, pid 307264
      FAILED: Ljava/lang/StringLatin1;equals([B[B)Z: bool class java.lang.StringLatin1.equals(byte[], byte[]) != boolean java.lang.StringLatin1.equals(byte[], byte[])
      FAILED: Ljava/util/zip/ZipUtils;CENSIZ([BI)J: long class java.util.zip.ZipUtils.CENSIZ(byte[], int) != long java.util.zip.ZipUtils.CENSIZ(byte[], int)
      FAILED: Ljava/util/regex/Pattern$BmpCharProperty;match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z: bool class java.util.regex.Pattern$BmpCharProperty.match(class java.util.regex.Matcher., int, class java.lang., charhar, shortequence) != boolean java.util.regex.Pattern$BmpCharProperty.match(java.util.regex.Matcher, int, java.lang.CharSequence)
      FAILED: Ljava/lang/AbstractStringBuilder;appendChars(Ljava/lang/String;II)V: void class java.lang.AbstractStringBuilder.appendChars(class java.lang., shorttring., int, int) != void java.lang.AbstractStringBuilder.appendChars(java.lang.String, int, int)
      FAILED: Ljava/lang/Object;<init>()V: void class java.lang.Object<init>() != void java.lang.Object<init>()
      test child finished with -1
      ---- end ----
      Demangle Java: FAILED!
      $
    
    After applying this patch:
    
      $ perf test  java
      65: Demangle Java                                         : Ok
      $
    Signed-off-by: NNick Gasson <nick.gasson@arm.com>
    Reviewed-by: NIan Rogers <irogers@google.com>
    Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: NIan 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-4-nick.gasson@arm.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: NZhichang Yuan <erik.yuan@arm.com>
    Reviewed-by: NYang Jihong <yangjihong1@huawei.com>
    Signed-off-by: NCheng Jian <cj.chengjian@huawei.com>
    ef4a0e27
demangle-java.c 4.2 KB