lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAM9d7cgnBk03-yBBFtV37ryj13RROmaqjC9S3sUF7QhnRYrenw@mail.gmail.com>
Date: Fri, 29 Mar 2024 13:00:10 -0700
From: Namhyung Kim <namhyung@...nel.org>
To: duchangbin <changbin.du@...wei.com>
Cc: Arnaldo Carvalho de Melo <acme@...nel.org>, Ian Rogers <irogers@...gle.com>, 
	Kan Liang <kan.liang@...ux.intel.com>, Jiri Olsa <jolsa@...nel.org>, 
	Adrian Hunter <adrian.hunter@...el.com>, Peter Zijlstra <peterz@...radead.org>, 
	Ingo Molnar <mingo@...nel.org>, LKML <linux-kernel@...r.kernel.org>, 
	"linux-perf-users@...r.kernel.org" <linux-perf-users@...r.kernel.org>
Subject: Re: [PATCH 4/4] perf annotate: Use libcapstone to disassemble

On Thu, Mar 28, 2024 at 7:53 PM duchangbin <changbin.du@...wei.com> wrote:
>
> Hi, Namhyung,
> On Thu, Mar 28, 2024 at 04:20:09PM -0700, Namhyung Kim wrote:
> > Now it can use the capstone library to disassemble the instructions.
> > Let's use that (if available) for perf annotate to speed up.  Currently
> > it only supports x86 architecture.  With this change I can see ~3x speed
> > up in data type profiling.
> >
> > But note that capstone cannot give the source file and line number info.
> > For now, users should use the external objdump for that by specifying
> > the --objdump option explicitly.
> >
> > Cc: Changbin Du <changbin.du@...wei.com>
> > Signed-off-by: Namhyung Kim <namhyung@...nel.org>
> > ---
> >  tools/perf/util/disasm.c | 153 +++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 153 insertions(+)
> >
> > diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c
> > index 59ac37723990..c58ea6d822ed 100644
> > --- a/tools/perf/util/disasm.c
> > +++ b/tools/perf/util/disasm.c
> > @@ -1,6 +1,7 @@
> >  // SPDX-License-Identifier: GPL-2.0-only
> >  #include <ctype.h>
> >  #include <errno.h>
> > +#include <fcntl.h>
> >  #include <inttypes.h>
> >  #include <libgen.h>
> >  #include <regex.h>
> > @@ -18,6 +19,7 @@
> >  #include "evsel.h"
> >  #include "map.h"
> >  #include "maps.h"
> > +#include "namespaces.h"
> >  #include "srcline.h"
> >  #include "symbol.h"
> >
> > @@ -1341,6 +1343,151 @@ symbol__disassemble_bpf_image(struct symbol *sym,
> >       return 0;
> >  }
> >
> > +#ifdef HAVE_LIBCAPSTONE_SUPPORT
> > +#include <capstone/capstone.h>
> > +
> > +static int open_capstone_handle(struct annotate_args *args, bool is_64bit,
> > +                             csh *handle)
> > +{
> > +     struct annotation_options *opt = args->options;
> > +     cs_mode mode = is_64bit ? CS_MODE_64 : CS_MODE_32;
> > +
> > +     /* TODO: support more architectures */
> > +     if (!arch__is(args->arch, "x86"))
> > +             return -1;
> > +
> > +     if (cs_open(CS_ARCH_X86, mode, handle) != CS_ERR_OK)
> > +             return -1;
> > +
> > +     if (!opt->disassembler_style ||
> > +         !strcmp(opt->disassembler_style, "att"))
> > +             cs_option(*handle, CS_OPT_SYNTAX, CS_OPT_SYNTAX_ATT);
> > +
> > +     /*
> > +      * Resolving address operands to symbols is implemented
> > +      * on x86 by investigating instruction details.
> > +      */
> > +     cs_option(*handle, CS_OPT_DETAIL, CS_OPT_ON);
> Enabling CS_OPT_DETAIL is to symbolize branch target address. You can refer to
> print_insn_x86() in print_insn.c.

Right, I think we can add it as a comment.

Thanks,
Namhyung

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ