Hello Luke,
On 18/01/18 22:22, Luke Diamand wrote:
On aarch32 ARM libunwind also defaults to --enable-debug-frame=yes. This
can cause libunwind to open and read the executable and any shared
libraries every unwind if the .eh_frame section is missing or does not
cover all addresses, which matches your comment that it is opening and
closing files a lot. If you know you have .ARM.exidx sections then try
configuring libunwind with --enable-debug-frame=no.
I've been building with --disable-debug-frame, which I assume does the
same thing (at least configure doesn't complain about it).
That results in defining CONFIG_DEBUG_FRAME, which cuts out a bit of
code from dwarf_find_unwind_table() and unw_step().
But arm_find_proc_info() will still call dwarf_find_proc_info(), which
will go and call dl_iterate_phdr() to try to find the DWARF unwind
tables on each and every call.
Do we just need something like this:
@@ -528,8 +527,10 @@ arm_find_proc_info (unw_addr_space_t as, unw_word_t ip,
Debug (14, "looking for IP=0x%lx\n", (long) ip);
+#ifdef CONFIG_DEBUG_FRAME
if (UNW_TRY_METHOD(UNW_ARM_METHOD_DWARF))
ret = dwarf_find_proc_info (as, ip, pi, need_unwind_info, arg);
+#endif
if (ret < 0 && UNW_TRY_METHOD (UNW_ARM_METHOD_EXIDX))
{
The dwarf_find_proc_info looks for .eh_frame as well as .debug_frame, so
it wouldn't be appropriate to wrap it in a CONFIG_DEBUG_FRAME guard.
Although libunwind, as a generic unwinder, needs to support both
.eh_frame and .ARM.exidx, a particular distribution that is built with a
particular toolchain is most likely only going to use one or the other.
The unwinders that libunwind tries on ARM can be controlled at runtime
using the UNW_ARM_UNWIND_METHOD environment variable, as you know, but
if a distribution only uses one and sticks with it, then it would make
sense to add an option to libunwind's configure to control the choice at
configure time -- i.e. to set the default value of unwi_unwind_method in
src/arm/Gglobal.c.
Yours,
Chris
IMPORTANT NOTICE: The contents of this email and any attachments are
confidential and may also be privileged. If you are not the intended recipient,
please notify the sender immediately and do not disclose the contents to any
other person, use it for any purpose, or store or copy the information in any
medium. Thank you.
_______________________________________________
Libunwind-devel mailing list
Libunwind-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/libunwind-devel