Re: Elfutils segfault on IA64
Kurt Roeckx <kurt <at> roeckx.be> writes:
> The new elfutils (0.157-1) segfaults on IA64. I've been trying
> to debug this on merulo but ran into #691576. When using a core
> file I also don't get any backtrace.
>
> The problem I'm seeing is:
> (sid_ia64-dchroot)kroeckx <at> merulo:~/elfutils-0.157/tests$
> LD_LIBRARY_PATH=../libelf:../libdw:../backends/
/home/kroeckx/elfutils-0.157/tests/addrcfi
> -e testfileppc32.bz2 0x100004c0
> dwarf_cfi_addrframe (.eh_frame): no matching address range
> .debug_frame has 0x100004c0 => [0x100004c0, 0x100004d0):
> return address in reg65
> CFA location expression: bregx(1)
> integer reg0 (r0): undefined
> Segmentation fault (core dumped)
> [...]
>
> Can someone help me get any useful information about this?
You might already have seen this upstream, but just in case, this was
fixed by:
commit 3dec3e110bb2a2453156868e1221dc8192399e3e
Author: Mark Wielaard <mjw@redhat.com>
Date: Sun Oct 6 17:04:07 2013 +0200
backends: ppc_abi_cfi reg1 use DW_CFA_val_offset not DW_CFA_val_expression.
Register rules using expressions are stored using an offset from the
start of the .eh_frame or .debug_frame ELF section data. Since abi_cfi
rules aren't stored in those ELF sections they should use neither
DW_CFA_expression nor DW_CFA_val_expression. The only backend that used
DW_CFA_val_expression was ppc_cfi.c. It was easier to express the same
rule using DW_CFA_val_offset than to change the code to handle register
rules using expressions. On most architectures this did work by accident.
See the definition of struct dwarf_frame_register value in libdw/cfi.h to
see why. But on ia64 the abi_cfi data and actual frame data were placed
too far apart and caused a crash in tests/run-addrcfi.sh for ppc32.
Signed-off-by: Mark Wielaard <mjw@redhat.com>
See also the discussion at:
https://lists.fedorahosted.org/pipermail/elfutils-devel/2013-October/003297.html
Cheers,
Mark
Reply to: