[llvm-dev] Exception handling support for a target

陳韋任 via llvm-dev
2018-01-16T12:23:53Z

2018-01-16 18:18 GMT+08:00 Tim Northover <t.p.northover at gmail.com>:

> On 15 January 2018 at 12:49, 陳韋任 via llvm-dev <llvm-dev at
lists.llvm.org>
> wrote:
> >   - CFI directives:
> >
> >     This is for .eh_frame section. Basically all the targets insert
CFI
> > directives in FrameLowering, but I am not sure exactly when/where I
> should
> > do so.
>
> The directives are there to describe where the unwinder should look to
> find out what each register's value was when this function was called
> (well, each register that the caller expected to be preserved). So the
> directives have to have been emitted by the time any instruction is
> executed that could cause an exception to be thrown (typically either
> a call to another function or a compiler-generated call to __cxa_throw
> or similar when the source code itself contains "throw X").
>
> So normally the directives are emitted in the prologue when the
> registers actually get saved. Sometimes all in a bunch, sometimes
> interspersed with the saves, but it usually doesn't matter which. As
> you've discovered that happens in XYZFrameLowering


​Do we have to emit directives in the epilogue, too?​ One of my test case
fail due to the directives in the epilogue have been executed. After remov
​ing
 them from epilogue, the exception is caught as expected. Also, the
directives are also for debug purpose (.debug_frame), right? I guess I only
have to make sure directives work for exception handling, then debug works
as well?

--
Wei-Ren Chen (陳韋任)
Homepage: https://people.cs.nctu.edu.tw/~chenwj
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20180116/fedda1a7/attachment.html>