perf tools: Preserve identifier id in OCaml demangler
authorFabian Hemmer <copy@copy.sh>
Fri, 26 Feb 2021 07:52:23 +0000 (02:52 -0500)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 30 Mar 2021 15:45:59 +0000 (12:45 -0300)
Some OCaml developers reported that this bit of information is sometimes
useful for disambiguating functions for which the OCaml compiler assigns
the same name, e.g. nested or inlined functions.

Signed-off-by: Fabian Hemmer <copy@copy.sh>
Link: http://lore.kernel.org/lkml/20210226075223.p3s5oz4jbxwnqjtv@nyu
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/tests/demangle-ocaml-test.c
tools/perf/util/demangle-ocaml.c

index 2fac7d7..0043be8 100644 (file)
@@ -19,11 +19,11 @@ int test__demangle_ocaml(struct test *test __maybe_unused, int subtest __maybe_u
                { "main",
                  NULL },
                { "camlStdlib__array__map_154",
-                 "Stdlib.array.map" },
+                 "Stdlib.array.map_154" },
                { "camlStdlib__anon_fn$5bstdlib$2eml$3a334$2c0$2d$2d54$5d_1453",
-                 "Stdlib.anon_fn[stdlib.ml:334,0--54]" },
+                 "Stdlib.anon_fn[stdlib.ml:334,0--54]_1453" },
                { "camlStdlib__bytes__$2b$2b_2205",
-                 "Stdlib.bytes.++" },
+                 "Stdlib.bytes.++_2205" },
        };
 
        for (i = 0; i < ARRAY_SIZE(test_cases); i++) {
index 3df14e6..9d707bb 100644 (file)
@@ -64,17 +64,5 @@ ocaml_demangle_sym(const char *sym)
        }
        result[j] = '\0';
 
-       /* scan backwards to remove an "_" followed by decimal digits */
-       if (j != 0 && isdigit(result[j - 1])) {
-               while (--j) {
-                       if (!isdigit(result[j])) {
-                               break;
-                       }
-               }
-               if (result[j] == '_') {
-                       result[j] = '\0';
-               }
-       }
-
        return result;
 }