[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libunwind-devel] [PATCH] arm: ptrace: Fix order of probing unwind t
From: |
Yichao Yu |
Subject: |
Re: [Libunwind-devel] [PATCH] arm: ptrace: Fix order of probing unwind tables |
Date: |
Thu, 19 Jan 2017 13:05:28 -0500 |
Ref
https://github.com/JuliaLang/julia/blob/4331b2989701324334b51d237f7dd833b5f439ae/deps/patches/libunwind-prefer-extbl.patch
for the patch I submitted a few days before.
Should the caller of this function ask for the format it want
explicitly so that the fallback logic can be defined at a single
place?
On Thu, Jan 19, 2017 at 12:08 PM, <address@hidden> wrote:
> From: Vitaly Kuzmichev <address@hidden>
>
> Commit 92327a3 "ARM: prefer to unwind using DWARF info"
> changes order of unwind info searching to prefer DWARF (.debug_frame)
> section in prior to ARM specific (.ARM.exidx). This patch only affects
> local process unwinding. Now the same is done for remote unwinding.
>
> Sometimes probing .ARM.exidx first causes backtrace truncation
> after __aeabi_ldiv0 (division by 0 handler that generates SIGFPE),
> because it hits [cantunwind] generated by cross-gcc for __divsi3
> function copied with __aeabi_ldiv0 from libgcc.a. Perhaps, lack of
> debug info for __divsi3 causes [cantunwind], or there is a problem
> converting DWARF to ARM unwind tables, but when unwinding using
> DWARF, it hits proper entry, and backtrace is shown correctly.
>
> Reported-by: Frederic Berat <address@hidden>
> Signed-off-by: Vitaly Kuzmichev <address@hidden>
> ---
> src/ptrace/_UPT_find_proc_info.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/src/ptrace/_UPT_find_proc_info.c
> b/src/ptrace/_UPT_find_proc_info.c
> index d2a37ea..b3209f4 100644
> --- a/src/ptrace/_UPT_find_proc_info.c
> +++ b/src/ptrace/_UPT_find_proc_info.c
> @@ -131,15 +131,15 @@ _UPT_find_proc_info (unw_addr_space_t as, unw_word_t
> ip, unw_proc_info_t *pi,
> ret = tdep_search_unwind_table (as, ip, &ui->edi.di_cache,
> pi, need_unwind_info, arg);
>
> + if (ret == -UNW_ENOINFO && ui->edi.di_debug.format != -1)
> + ret = tdep_search_unwind_table (as, ip, &ui->edi.di_debug, pi,
> + need_unwind_info, arg);
> +
> #if UNW_TARGET_ARM
> if (ret == -UNW_ENOINFO && ui->edi.di_arm.format != -1)
> ret = tdep_search_unwind_table (as, ip, &ui->edi.di_arm, pi,
> need_unwind_info, arg);
> #endif
>
> - if (ret == -UNW_ENOINFO && ui->edi.di_debug.format != -1)
> - ret = tdep_search_unwind_table (as, ip, &ui->edi.di_debug, pi,
> - need_unwind_info, arg);
> -
> return ret;
> }
> --
> 1.9.1
>
>
> _______________________________________________
> Libunwind-devel mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/libunwind-devel