> On Apr 22, 2015, at 6:56 AM, Pavel Labath <lab...@google.com> wrote: > > Forgot to add the list. > > On 22 April 2015 at 14:54, Pavel Labath <lab...@google.com> wrote: >> Hello, >> >> On 21 April 2015 at 18:04, Greg Clayton <gclay...@apple.com> wrote: >>> The main problem is 99% of all the EH frame info is valid only at call >>> sites. Because of this we don't use EH frame in the first frame and we >>> don't use it after async interrupt functions like sigtramp.
Small clarification on Greg's summary here. Since last summer, we've started using eh_frame for the currently-executing frame. Both gcc and clang were generating eh_frame which described the function prologues. And modern gcc's emit eh_frame which describes the epilogue. So Tong Shen, an intern at Google, added code to add epilogue instructions if it looked like the eh_frame was missing them. There's no guarantee that eh_frame unwind instructions will describe the prologue/epilogue, or that it will describe any important changes in the middle of the function except at places where the func can throw, or a callee can throw, but in practice the prologue at least is present. So we decided to try living off eh_frame for the currently executing frame, and it seems to be working OK. >> >> What I suggest is to change the logic to something like this: >> eh := GetEHFrameUnwindPlan(); >> if (I_know_how_to_augment(eh)) >> return Augment(eh) >> else if (Plan_is_very_complicated(eh)) >> return eh; // if the EH section contains a complicated plan, then >> our attempts to do instruction profiling will likely fail. Let's just >> stick to the EH plan instead. This sounds like a good idea. The augmentation detection code in UnwindAssembly-x86.cpp is kind of hacky (and it's done at two different layers in different ways) -- my main concern here was modifying a correct set of unwind instructions from eh_frame by adding incorrect garbage to it. So it goes out of its way to limit the augmentation to functions that look "straightforward". I had a similar problem with the objective c runtime on macosx. It has several hand-written assembly functions that the assembly instruction profiler cannot handle correctly. The maintainer of that solib added hand-written -- I added the DynamicLoader::AlwaysRelyOnEHUnwindInfo method for this case. The unwinder will call the DynamicLoader and say "should I trust the eh_frame for this solib?" and the MacOSX DynamicLoader plugin will say yes for libobjc functions. (this was back when we never used eh_frame instructions for the currently-executing frame) That would be another way to handle this -- to whitelist the libc solib on Linux. But I think your idea of flagging eh_frame which looks hand-written/complicated is a good one too. J _______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev