<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><blockquote type="cite"><div>On Jul 18, 2014, at 4:55 PM, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jul 18, 2014 at 2:11 PM, Renato Golin <span dir="ltr"><<a href="mailto:renato.golin@linaro.org" target="_blank">renato.golin@linaro.org</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The alternative is to use the unwind tables that both GCC and LLVM<br>
generate even on C code, and that the ABI tells us to use, but their<br>
argument is that's too slow. I don't know LLDB, but GDB uses tables,<br>
but also the hidden logic (for faster unwinding), so I guess that with<br>
code produced by LLVM, it just uses the tables.<br></blockquote><div><br></div><div>It's not just sanitizers that need to be able to get fast, accurate stack traces.  Consider sampling profilers that capture call stacks.  Using the unwind tables is disruptively slow to the process under profile.</div>
</div></div></div>
</div></blockquote></div><br><div>Why not do the unwind table parsing after the fact? Especially for a profiler, there’s no reason to do that during the actual profile collection.</div></body></html>