Hi Mark, On 19 March 2014 15:09, Mark Wielaard <[email protected]> wrote: > Hi Jean, > > On Wed, 2014-03-19 at 11:58 +0100, Jean Pihet wrote: >> On 19 March 2014 11:46, Mark Wielaard <[email protected]> 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
