On Tue, Feb 14, 2012 at 1:15 AM, Richard Henderson <r...@redhat.com> wrote:
>>>> - movq 56(%rsi), %rdx >>>> movl %edi, %eax >>>> cfi_def_cfa(%rcx, 0) >>>> - cfi_register(%rip, %rdx) >>>> movq %rcx, %rsp >>>> - jmp *%rdx >>>> + jmp *56(%rsi) >>> >>> If you're going to do that, the correct fix for the unwind info is >>> >>> - cfi_register(%rip, %rdx) >>> + cfi_offset(%rip, 56) >> >> Hm, we just defined new CFA as rcx+0, so we should define location of >> rip relative to new CFA. Since CFA points to stack slot just before >> return address was pushed, new rip lies at CFA-8 for 64bit resp. CFA-4 >> for x86_32. Did I get these .cfi directives correctly? > > No. The value at %rcx-8 is total garbage. There no guarantee that > the call stack leading to this abort has anything in common with the > call stack that created the jmpbuf, except *above* %rcx, the new CFA. > > The new rip is at rsi+56. You can see that in that you jump to it. Thanks for the explanation, I will commit the patch with your suggested change. Uros.