<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 14, 2014 at 7:14 AM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I've added a comment in r222000.<br>
Thanks for bringing this up!<br></blockquote><div><br>Sure thing.<br><br>Looking at the comment - if the issue is that unwinders might give us something other than the obvious answer, could/should we narrow this fix a bit: instead of special casing a 1-frame stack, should we look to see if the end of the stack is the function we intend to skip (the sanitizers handler, I take it?) and only swallow that frame if it is? That way if we get other weird stacks we'll do the right thing and not consume them even if they have more than one frame.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
On Wed, Nov 12, 2014 at 9:48 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
><br>
><br>
> On Wed, Nov 12, 2014 at 1:03 AM, Evgeniy Stepanov<br>
> <<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>> wrote:<br>
>><br>
>> We remove frames that belong to the sanitizer runtime off the top of<br>
>> the stack trace.<br>
>><br>
>> This situation, when the unwinder returned a single-frame stack trace,<br>
>> was observed in an unusual environment where the CFI unwinder<br>
>> misbehaved for a yet unknown reason.<br>
><br>
><br>
> It'd be nice to have an explanation here at some point, otherwise I'd be<br>
> concerned about someone removing this code as meaningless.<br>
><br>
>><br>
>> It involved building ASan runtime<br>
>> with a custom build system (neither make or cmake), and I can't<br>
>> reproduce the results in a test.<br>
>><br>
>> On Wed, Nov 12, 2014 at 1:46 AM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
>> ><br>
>> ><br>
>> > On Fri, Nov 7, 2014 at 4:03 AM, Evgeniy Stepanov<br>
>> > <<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>><br>
>> > wrote:<br>
>> >><br>
>> >> Author: eugenis<br>
>> >> Date: Fri Nov  7 06:03:07 2014<br>
>> >> New Revision: 221520<br>
>> >><br>
>> >> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=221520&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=221520&view=rev</a><br>
>> >> Log:<br>
>> >> [sanitizer] Never remove the last frame off the stack trace.<br>
>> ><br>
>> ><br>
>> > Test case? I'm also not quite sure what this is doing - why are we<br>
>> > popping/ignoring frames exactly?<br>
>> ><br>
>> >><br>
>> >><br>
>> >> It can only make it worse.<br>
>> >><br>
>> >> Modified:<br>
>> >><br>
>> >><br>
>> >> compiler-rt/trunk/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc<br>
>> >><br>
>> >> Modified:<br>
>> >><br>
>> >> compiler-rt/trunk/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc<br>
>> >> URL:<br>
>> >><br>
>> >> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc?rev=221520&r1=221519&r2=221520&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc?rev=221520&r1=221519&r2=221520&view=diff</a><br>
>> >><br>
>> >><br>
>> >> ==============================================================================<br>
>> >> ---<br>
>> >><br>
>> >> compiler-rt/trunk/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc<br>
>> >> (original)<br>
>> >> +++<br>
>> >><br>
>> >> compiler-rt/trunk/lib/sanitizer_common/sanitizer_unwind_posix_libcdep.cc Fri<br>
>> >> Nov  7 06:03:07 2014<br>
>> >> @@ -116,7 +116,7 @@ void BufferedStackTrace::SlowUnwindStack<br>
>> >>    // We need to pop a few frames so that pc is on top.<br>
>> >>    uptr to_pop = LocatePcInTrace(pc);<br>
>> >>    // trace_buffer[0] belongs to the current function so we always pop<br>
>> >> it.<br>
>> >> -  if (to_pop == 0)<br>
>> >> +  if (to_pop == 0 && size > 1)<br>
>> >>      to_pop = 1;<br>
>> >>    PopStackFrames(to_pop);<br>
>> >>    trace_buffer[0] = pc;<br>
>> >><br>
>> >><br>
>> >> _______________________________________________<br>
>> >> llvm-commits mailing list<br>
>> >> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
>> >> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
>> ><br>
>> ><br>
><br>
><br>
</div></div></blockquote></div><br></div></div>