<div dir="ltr"><font face="monospace">On Sat, 20 Nov 2021 at 19:12, Fāng-ruì Sòng <<a href="mailto:maskray@google.com">maskray@google.com</a>> wrote:<br>><br>> On 2021-11-20, Momchil Velikov wrote:<br>> >How about instead we exchange the meaning of 2 and 3 so we get<br>> >  - 1, sync unwind tables<br>> >  - 2, "minimal" async unwind tables<br>> >  - 3, full async unwind tables<br>> >Then on the principle that we should always emit CFI information that the<br>> >`uwtable` requested<br>> >(as it may be an ABI mandate), possibly optimised, depending on the<br>> >`nounwind` attribute, we would get:<br>> ><br>> >          | nounwind 0           |  nounwind 1<br>> >----------+----------------------+--------------<br>> >uwtable 0 | sync, full           |  no CFI<br>> >----------+----------------------+--------------<br>> >uwtable 1 | sync, full           |  sync, full<br>> >----------+----------------------+--------------<br>> >uwtable 2 | async, full prologue,|<br>> >          | mininal epilogue     |  async, min<br>> >----------+----------------------+--------------<br>> >uwtable 3 | async, full          |  async, full<br>> ><br>> >as a starting point, and then backends may choose any of the entries<br>> >in the following rows of the same column, as a QOI decision.<br>><br>> I have trouble understanding "min" in the uwtable 2 row.<br>> What does it mean?<br><br>"min" would be minimal unwind information, suitable just for getting the list of callers.<br>Thus, if we request "minimal" asynchronous unwind tables, and a function has the<br>"nounwind" attribute, then we can fully honour that request and emit CFI instructions<br>for CFA and PC only, both in the prologue and the epilogue, whereas if we don't have<br>the "nounwind" attribute, there's no other option other than to also include CFI instructions<br>for CSRs as well, but only in the prologue, the epilogue stays the same.<br><br>> As IR attributes, I'd hope the behavior is strictly monotonic in every<br>> dimensions. I.e. If uwtable A provides some information, I'd expect that<br>> uwtable B provides at least the same amount of information if A < B.<br><br>I'm not sure how useful would that be, as the sensible end result would also<br>depend on the "nounwind" attribute.<br><br>Also, I'm basically equating "asynchronous unwind info" with generating CFI</font><div><font face="monospace">instructions for epilogues.<span class="gmail_default" style=""> </span>In principle, CFI for prologues could be different</font></div><div><font face="monospace">and slightly more compact if it does not need to be instruction precise, but<br>as a practical matter, I doubt extra complexity in implementation warrants</font></div><div><font face="monospace">supporting anything but instruction precise unwinding,<span class="gmail_default" style=""> </span>once a backend implements it.<br><br>So, the table above is <span class="gmail_default" style="">no good, better presented</span><span class="gmail_default" style=""> would be like:</span><br><br></font><div><font face="monospace">      <span class="gmail_default" style=""> </span>   | nounwind 0  |  nounwind 1<br>----------+-------------+--------------<br>uwtable 0 | <full,no>   |  <no,no><br>----------+-------------+--------------<br>uwtable 1 | <full,no>   |  <full,no><br>----------+-------------+--------------<br>uwtable 2 | <full,min> <span class="gmail_default" style="font-family:monospace,monospace;font-size:small"> </span>| <min, min><br>----------+-------------+--------------<br>uwtable 3 | <full,full> |  <full,full><br><br></font></div><div><font face="monospace">w<span class="gmail_default" style="">here </span></font></div><div><span class="gmail_default" style=""><font face="monospace"> - "full" means full unwind info - CFA, CSRs, return address</font></span></div><div><span class="gmail_default" style=""><font face="monospace"> - "min" is minimal, sans CSRs,</font></span></div><div><span class="gmail_default" style=""><font face="monospace"> - "no" is, well, no unwind info and</font></span></div><div><span class="gmail_default" style=""><font face="monospace"> - "<p,e>" is the kind generated for prologues and epilogues, respectively.</font></span></div><div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div></div><div><font face="monospace">~chill<br>--<br>Compiler scrub, Arm</font></div></div></div>