Fwd: [PATCH 0/3] perf tools: Add libdw DWARF post unwind support for ARM64
Jean Pihet
jean.pihet at linaro.org
Fri Mar 21 14:55:05 UTC 2014
Hi Mark,
On 19 March 2014 15:09, Mark Wielaard <mjw at redhat.com> wrote:
> Hi Jean,
>
> On Wed, 2014-03-19 at 11:58 +0100, Jean Pihet wrote:
>> On 19 March 2014 11:46, Mark Wielaard <mjw at redhat.com> wrote:
>> Do you have an idea what/where to check for libdw compat support? I
>> just quickly browsed through the code and found the uses of the
>> ELFCLASS32/ELFCLASS64 macros interesting.
>
> In theory it should "just work" assuming arm32 as native arch works.
> Normally elfutils/libdwfl uses the backend that matches the ELF
> header/EM value used. The only issue is that for arm32 only .debug_frame
> is supported and not EXIDX tables (as .eh_frame isn't used on arm32).
> But I believe that isn't an issue in your case because you require the
> debuginfo to be available.
Yes. The test binaries do have the dwarf info available. The ELF
headers show different word sizes.
>
> If you were using the mjw/aarch64-unwind branch you might have missed
> various patches for arm32 support since that branch was fairly old. I
> have rebased the branch on current master now.
Thanks, I am using the rebased branch right now.
>
>> Do you need testing etc. in order to be able to merge the aarch64
>> branch? Please let me know!
>
> The system I am testing on is missing various glibc fixes, in particular
> https://sourceware.org/bugzilla/show_bug.cgi?id=16169 and gcc doesn't
> use -fasynchronous-unwind-tables by default. So the make check results
> are not reliable for me.
>
> If you can run make check on the rebased branch on your setup that would
> be helpful. Ideally all tests PASS. If not, the output of
> tests/test-suite.log would be interesting.
The tests are running since a while now (>12hours!) and it seems that
the backtrace test is taking ages to complete.
Here are the test current results, I do not have any log file yet.
PASS: run-arextract.sh
PASS: run-arsymtest.sh
PASS: newfile
PASS: test-nlist
PASS: update1
PASS: update2
PASS: update3
PASS: update4
PASS: run-show-die-info.sh
PASS: run-get-files.sh
PASS: run-get-lines.sh
PASS: run-get-pubnames.sh
PASS: run-get-aranges.sh
PASS: run-allfcts.sh
PASS: run-show-abbrev.sh
PASS: run-line2addr.sh
PASS: hash
PASS: newscn
PASS: run-strip-test.sh
PASS: run-strip-test2.sh
PASS: run-strip-test3.sh
PASS: run-strip-test4.sh
PASS: run-strip-test5.sh
PASS: run-strip-test6.sh
PASS: run-strip-test7.sh
PASS: run-strip-test8.sh
PASS: run-strip-groups.sh
PASS: run-strip-reloc.sh
PASS: run-unstrip-test.sh
PASS: run-unstrip-test2.sh
PASS: run-unstrip-M.sh
PASS: run-ecp-test.sh
PASS: run-ecp-test2.sh
PASS: run-alldts.sh
PASS: run-elflint-test.sh
PASS: run-elflint-self.sh
PASS: run-ranlib-test.sh
PASS: run-ranlib-test2.sh
PASS: run-ranlib-test3.sh
PASS: run-ranlib-test4.sh
PASS: run-addrscopes.sh
PASS: run-strings-test.sh
PASS: run-funcscopes.sh
PASS: run-find-prologues.sh
PASS: run-allregs.sh
PASS: run-addrcfi.sh
PASS: run-nm-self.sh
PASS: run-readelf-self.sh
PASS: run-readelf-test1.sh
PASS: run-readelf-test2.sh
PASS: run-readelf-test3.sh
PASS: run-readelf-test4.sh
PASS: run-readelf-twofiles.sh
PASS: run-readelf-macro.sh
PASS: run-readelf-loc.sh
PASS: run-readelf-aranges.sh
PASS: run-readelf-line.sh
FAIL: run-native-test.sh
PASS: run-bug1-test.sh
PASS: dwfl-bug-addr-overflow
PASS: run-addrname-test.sh
PASS: dwfl-bug-fd-leak
PASS: dwfl-bug-report
PASS: run-dwfl-bug-offline-rel.sh
PASS: run-dwfl-addr-sect.sh
PASS: run-disasm-x86.sh
PASS: run-disasm-x86-64.sh
PASS: run-early-offscn.sh
PASS: run-dwarf-getmacros.sh
PASS: run-test-flag-nobits.sh
PASS: run-prelink-addr-test.sh
PASS: run-dwarf-getstring.sh
PASS: run-rerequest_tag.sh
PASS: run-typeiter.sh
PASS: run-readelf-d.sh
PASS: run-readelf-gdb_index.sh
PASS: run-unstrip-n.sh
PASS: run-low_high_pc.sh
PASS: run-macro-test.sh
PASS: run-elf_cntl_gelf_getshdr.sh
PASS: run-test-archive64.sh
PASS: run-readelf-vmcoreinfo.sh
PASS: run-readelf-mixed-corenote.sh
PASS: run-dwfllines.sh
PASS: run-dwfl-report-elf-align.sh
PASS: run-addr2line-test.sh
PASS: run-addr2line-i-test.sh
PASS: run-varlocs.sh
PASS: run-funcretval.sh
About unwinding, the AARCH64 dwarf unwinding using 'perf report' is ok:
# Overhead Command Shared Object
# ........ ............ ...................... ..............................
#
97.79% stress_bt_v8 stress_bt_v8 [.] foo_128
|
--- foo_128
|
|--99.37%-- foo_127
| |
| |--99.31%-- foo_126
| | |
| | |--99.35%-- foo_125
...
| | |
| | --0.65%-- bar
| | doit
| | main
| | 0x7f94cdb944
| | _start
| | 0x7fda172dcb
| |
| --0.69%-- bar
| doit
| main
| 0x7f94cdb944
| _start
| 0x7fda172dcb
|
--0.63%-- bar
doit
main
0x7f94cdb944
_start
0x7fda172dcb
0.16% stress_bt_v8 [kernel.kallsyms] [k] __do_softirq
|
--- __do_softirq
irq_exit
handle_IRQ
gic_handle_irq
|
|--93.92%-- el0_irq_naked
| |
| |--96.77%-- foo_128
| | foo_127
| | foo_126
| | foo_125
| | foo_124
| | foo_123
...
But not the compat mode (stress_bt_v7_static is a statically built
ARMv7 binary):
# Overhead Command Shared Object
# ........ ............... ................... ..............................
#
98.02% stress_bt_v7_st stress_bt_v7_static [.] foo_128
0.25% stress_bt_v7_st [vectors] [.] 0x00000000ffff0fc0
0.13% stress_bt_v7_st [kernel.kallsyms] [k] put_nfs_open_context
|
--- put_nfs_open_context
nfs_free_request
nfs_release_request
...
>
> Thanks,
>
> Mark
>
I let you know as soon as I have more test results.
Thanks,
Jean
More information about the elfutils-devel
mailing list