<div dir="ltr">For 32-bit x86, set EBP to the address of the end of the SEH registration node before calling any funclet. The prologue does 'addl $12, %ebp' to recompute the real frame pointer from that address. The return value of the catch handler is the label that you should jump to with EBP set in the same manner. The code at that label will take care of restoring other registers.<div><div><br></div><div>Also, unless you absolutely need to be compatible with MSVC exceptions, don't use funclets for your new personality. Use landingpads. They are better and will get you better code.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 4, 2016 at 2:27 PM, Carlo Kok via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I've modified llvm to emit vc++ compatible SEH structures for my personality on x86/Windows and my handler works fine, but the only thing I can't figure out is how to call these funclets, they look like:<br>
<br>
<br>
Catch:<br>
<br>
"?catch$3@?0?m3@4HA":<br>
LBB4_3:                                 # %BasicBlock26<br>
        pushl   %ebp<br>
        pushl   %eax<br>
        addl    $12, %ebp<br>
        movl    %esp, -28(%ebp)<br>
        movl    $LBB4_5, %eax<br>
        addl    $4, %esp<br>
        popl    %ebp<br>
        retl                            # CATCHRET<br>
<br>
<br>
cleanup:<br>
"?dtor$2@?0?m2@4HA":<br>
LBB3_2:<br>
        pushl   %ebp<br>
        subl    $8, %esp<br>
        addl    $12, %ebp<br>
        movl    %ebp, %eax<br>
        movl    %esp, %ecx<br>
        movl    %eax, 4(%ecx)<br>
        movl    $1, (%ecx)<br>
        calll   m2$Fin<br>
        addl    $8, %esp<br>
        popl    %ebp<br>
        retl                            # CLEANUPRET<br>
<br>
<br>
What do I pass to these to get a valid frame on the other end?<br>
<br>
The cleanup one calls the finally and properly returns, but what about the catch?<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Carlo Kok<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</font></span></blockquote></div><br></div>