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: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190604141220.GG24504@kernel.org>
Date:   Tue, 4 Jun 2019 11:12:20 -0300
From:   Arnaldo Carvalho de Melo <arnaldo.melo@...il.com>
To:     Alexey Budankov <alexey.budankov@...ux.intel.com>
Cc:     Arnaldo Carvalho de Melo <arnaldo.melo@...il.com>,
        Jiri Olsa <jolsa@...hat.com>,
        Namhyung Kim <namhyung@...nel.org>,
        Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
        Peter Zijlstra <peterz@...radead.org>,
        Ingo Molnar <mingo@...hat.com>,
        Andi Kleen <ak@...ux.intel.com>,
        linux-kernel <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v5] perf record: collect user registers set jointly with
 dwarf stacks

Em Fri, May 31, 2019 at 09:27:38AM +0300, Alexey Budankov escreveu:
> On 30.05.2019 22:41, Arnaldo Carvalho de Melo wrote:
> > Em Thu, May 30, 2019 at 10:03:36PM +0300, Alexey Budankov escreveu:
> >> When dwarf stacks are collected jointly with user specified register
> >> set using --user-regs option like below the full register context is
> >> captured on a sample:
> >>
> >>   $ perf record -g --call-graph dwarf,1024 --user-regs=IP,SP,BP -- stack_test2.g.O3
> >>
> >>   188143843893585 0x6b48 [0x4f8]: PERF_RECORD_SAMPLE(IP, 0x4002): 23828/23828: 0x401236 period: 1363819 addr: 0x7ffedbdd51ac
> >>   ... FP chain: nr:0
> >>   ... user regs: mask 0xff0fff ABI 64-bit
> >>   .... AX    0x53b
> >>   .... BX    0x7ffedbdd3cc0
> >>   .... CX    0xffffffff
> >>   .... DX    0x33d3a
> >>   .... SI    0x7f09b74c38d0
> >>   .... DI    0x0
> >>   .... BP    0x401260
> >>   .... SP    0x7ffedbdd3cc0
> >>   .... IP    0x401236
> >>   .... FLAGS 0x20a
> >>   .... CS    0x33
> >>   .... SS    0x2b
> >>   .... R8    0x7f09b74c3800
> >>   .... R9    0x7f09b74c2da0
> >>   .... R10   0xfffffffffffff3ce
> >>   .... R11   0x246
> >>   .... R12   0x401070
> >>   .... R13   0x7ffedbdd5db0
> >>   .... R14   0x0
> >>   .... R15   0x0
> >>   ... ustack: size 1024, offset 0xe0
> >>    . data_src: 0x5080021
> >>    ... thread: stack_test2.g.O:23828
> >>    ...... dso: /root/abudanko/stacks/stack_test2.g.O3
> >>
> >> After applying the change suggested in the patch the sample data contain
> >> only user specified register values. IP and SP registers (DWARF_MINIMAL_REGS)
> >> are collected anyways regardless of the --user-regs value provided from
> >> the command line:
> > 
> > Applied, changed the subject and description to:
> > 
> > perf record: Allow mixing --user-regs with --call-graph=dwarf
> > 
> > When DWARF stacks were requested and at the same time that the user
> > specifies a register set using the --user-regs option the full register
> > context was being captured on samples:
> > 
> >   $ perf record -g --call-graph dwarf,1024 --user-regs=IP,SP,BP -- stack_test2.g.O3
> > 
> >   188143843893585 0x6b48 [0x4f8]: PERF_RECORD_SAMPLE(IP, 0x4002): 23828/23828: 0x401236 period: 1363819 addr: 0x7ffedbdd51ac
> >   ... FP chain: nr:0
> >   ... user regs: mask 0xff0fff ABI 64-bit
> >   .... AX    0x53b
> >   .... BX    0x7ffedbdd3cc0
> >   .... CX    0xffffffff
> >   .... DX    0x33d3a
> >   .... SI    0x7f09b74c38d0
> >   .... DI    0x0
> >   .... BP    0x401260
> >   .... SP    0x7ffedbdd3cc0
> >   .... IP    0x401236
> >   .... FLAGS 0x20a
> >   .... CS    0x33
> >   .... SS    0x2b
> >   .... R8    0x7f09b74c3800
> >   .... R9    0x7f09b74c2da0
> >   .... R10   0xfffffffffffff3ce
> >   .... R11   0x246
> >   .... R12   0x401070
> >   .... R13   0x7ffedbdd5db0
> >   .... R14   0x0
> >   .... R15   0x0
> >   ... ustack: size 1024, offset 0xe0
> >    . data_src: 0x5080021
> >    ... thread: stack_test2.g.O:23828
> >    ...... dso: /root/abudanko/stacks/stack_test2.g.O3
> > 
> > I.e. the --user-regs=IP,SP,BP was being ignored, being overridden by the
> > needs of --call-graph=dwarf.
> > 
> > After applying the change in this patch the sample data contains the
> > user specified register, but making sure that at least the minimal set
> > of register needed for DWARF unwinding (DWARF_MINIMAL_REGS) is
> > requested.
> > 
> > The user is warned that DWARF unwinding may not work if extra registers
> > end up being needed.
> > 
> >   -g call-graph dwarf,K                         full_regs
> >   --user-regs=user_regs                         user_regs
> >   -g call-graph dwarf,K --user-regs=user_regs   user_regs + DWARF_MINIMAL_REGS
> > <REST remains the same>
> > 
> 
> Sounds better. Thanks!
> 
> ~Alexey

Now cross building to a few arches is failing, so far:

[perfbuilder@...co ~]$ cat /tmp/dm.log/summary
 alpine:3.4: Ok
 alpine:3.5: Ok
 alpine:3.6: Ok
 alpine:3.7: Ok
 alpine:3.8: Ok
 alpine:3.9: Ok
 alpine:edge: Ok
 amazonlinux:1: Ok
 amazonlinux:2: Ok
 android-ndk:r12b-arm: Ok
 android-ndk:r15c-arm: Ok
 centos:5: Ok
 centos:6: Ok
 centos:7: Ok
 clearlinux:latest: Ok
 debian:8: Ok
 debian:9: Ok
 debian:experimental: Ok
 debian:experimental-x-arm64: Ok
 debian:experimental-x-mips: FAIL
 debian:experimental-x-mips64: FAIL
 debian:experimental-x-mipsel: FAIL
 fedora:20: Ok
 fedora:22: Ok
 fedora:23: Ok
 fedora:24: Ok
 fedora:24-x-ARC-uClibc: FAIL
 fedora:25: Ok
 fedora:26: Ok
 fedora:27: Ok
[perfbuilder@...co ~]$

For instance:

[perfbuilder@...co ~]$ cat /tmp/dm.log/debian\:experimental-x-mips64
<SNIP>
  CC       /tmp/build/perf/tests/pmu.o
util/evsel.c: In function '__perf_evsel__config_callchain':
util/evsel.c:672:38: error: 'PERF_REG_IP' undeclared (first use in this function); did you mean 'PERF_REGS_MAX'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^~~~~~~~~~~
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:38: note: each undeclared identifier is reported only once for each function it appears in
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^~~~~~~~~~~
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:62: error: 'PERF_REG_SP' undeclared (first use in this function); did you mean 'PERF_MEM_S'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                                              ^~~~~~~~~~~
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
  LD       /tmp/build/perf/bench/perf-in.o
  CC       /tmp/build/perf/tests/hists_common.o
mv: cannot stat '/tmp/build/perf/util/.evsel.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:97: /tmp/build/perf/util/evsel.o] Error 1
make[4]: *** Waiting for unfinished jobs....
<SNIP>



[perfbuilder@...co ~]$ cat /tmp/dm.log/fedora\:24-x-ARC-uClibc

<SNIP>
  CC       /tmp/build/perf/tests/mmap-basic.o
  CC       /tmp/build/perf/ui/hist.o
util/evsel.c: In function '__perf_evsel__config_callchain':
util/evsel.c:672:38: error: 'PERF_REG_IP' undeclared (first use in this function); did you mean 'PERF_MEM_S'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:38: note: each undeclared identifier is reported only once for each function it appears in
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:62: error: 'PERF_REG_SP' undeclared (first use in this function); did you mean 'PERF_REG_IP'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                                              ^
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
  MKDIR    /tmp/build/perf/ui/stdio/
mv: cannot stat '/tmp/build/perf/util/.evsel.o.tmp': No such file or directory
/git/linux/tools/build/Makefile.build:96: recipe for target '/tmp/build/perf/util/evsel.o' failed
make[4]: *** [/tmp/build/perf/util/evsel.o] Error 1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ