https://sourceware.org/bugzilla/show_bug.cgi?id=31763

Mark Wielaard <mark at klomp dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mark at klomp dot org

--- Comment #1 from Mark Wielaard <mark at klomp dot org> ---
Hohum. The slowdown comes from the fact that eu-readelf by default tries to do
an symbol lookup for every address it tries to print the function symbol +
offset.

The idea is that the -r output would look something like:

Relocation section [12] '.relr.dyn' at offset 0x4bc88 contains 750 entries:
  +0x000000000044bcd0 <__frame_dummy_init_array_entry> *
  +0x000000000044bcd8 <__do_global_dtors_aux_fini_array_entry>
  +0x000000000044bce0 <__dso_handle>
  +0x000000000044bd10 <ossl_ed448_asn1_meth+0x10>
  +0x000000000044bd18 <ossl_ed448_asn1_meth+0x18>
  +0x000000000044bd20 <ossl_ed448_asn1_meth+0x20>
[...]

But in practice this doesn't actually work for system libraries, since the
.symtab is stripped out, so the symbol lookup always fails (even with debuginfo
installed, since readelf doesn't do a separate .debug file lookup, you'll have
to eu-unstrip the library and debug file). It is super useful for your locally
build binaries though.

Unfortunately even with the .symtab stripped out this symbol lookup is
unreasonably slow.

As a workaround you can use:

  -N, --numeric-addresses    Do not find symbol names for addresses in DWARF
                             data

$ time eu-readelf -r ./libcrypto.so.3 | wc -l
17904

real    0m6.676s
user    0m6.648s
sys     0m0.010s

$ time eu-readelf -r -N ./libcrypto.so.3 | wc -l
17904

real    0m0.045s
user    0m0.037s
sys     0m0.013s

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to