OK, here's what I get when I run that test in GDB: Program received signal SIGSEGV, Segmentation fault. dwarf_frame_register (fs=0x600000000000be00, regno=<optimized out>, ops_mem=0x60000fffffffb2d0, ops=0x60000fffffffb2c8, nops=0x60000fffffffb2c0) at dwarf_frame_register.c:105 105 get_uleb128 (block.length, p); (gdb) bt #0 dwarf_frame_register (fs=0x600000000000be00, regno=<optimized out>, ops_mem=0x60000fffffffb2d0, ops=0x60000fffffffb2c8, nops=0x60000fffffffb2c0) at dwarf_frame_register.c:105 #1 0x4000000000001900 in print_register (arg=<optimized out>, regno=1, setname=0x20000000004c9b18 "integer", prefix=0x20000000004c8890 "", regname=0x60000fffffffb328 "r1", bits=-19768, type=675872) at addrcfi.c:100 #2 0x20000000000a5020 in dwfl_module_register_names (mod=0x60000000000062d0, func=<optimized out>, arg=0x60000fffffffb3a0) at dwfl_module_register_names.c:74 #3 0x4000000000001bd0 in handle_cfi (stuff=0x60000fffffffb3a0, pc=268436672, which=0x4000000000002318 ".debug_frame", dwfl=0x60000000000042f0, cfi=<optimized out>) at addrcfi.c:153 #4 handle_cfi (dwfl=0x60000000000042f0, which=0x4000000000002318 ".debug_frame", cfi=0x6000000000007420, pc=268436672, stuff=0x60000fffffffb3a0) at addrcfi.c:107 #5 0x4000000000001f50 in handle_address (pc=268436672, dwfl=0x60000000000042f0) at addrcfi.c:167 #6 0x40000000000010b0 in main (argc=4, argv=0x60000fffffffb678) at addrcfi.c:216
The code is this: Dwarf_Block block; const uint8_t *p = fs->cache->data->d.d_buf + reg->value; get_uleb128 (block.length, p); //CRASH HERE block.data = (void *) p; The problem is that `p` is not a valid pointer. (gdb) print p $11 = (const uint8_t *) 0x60000000004c9ea2 <Address 0x60000000004c9ea2 out of bounds> However, the base address looks OK: (gdb) print fs->cache->data->d $3 = {d_buf = 0x600000000000b830, d_type = ELF_T_BYTE, d_version = 1, d_size = 64, d_off = 0, d_align = 4} But the register value is quite large: (gdb) print reg->value $12 = 4974194 (gdb) print *reg $14 = {rule = reg_val_expression, value = 4974194} And thus the computed address is wrong, though the `reg->rule` value looks OK (reg_val_expression == 7). I'm looking for more information, but hopefully that should give you as much info as I have. Patrick On Tue, Oct 1, 2013 at 1:43 PM, Kurt Roeckx <k...@roeckx.be> wrote: > Hi, > > 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@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) > > While the output should be something like: > 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 > integer reg1 (r1): location expression: call_frame_cfa nop > stack_value > integer reg2 (r2): same_value > integer reg3 (r3): undefined > [...] > > Can someone help me get any useful information about this? > > > > Kurt > > > -- > To UNSUBSCRIBE, email to debian-ia64-requ...@lists.debian.org > with a subject of "unsubscribe". Trouble? Contact > listmas...@lists.debian.org > Archive: http://lists.debian.org/20131001184346.ga19...@roeckx.be > >