labath added a comment. I'm not sure if I'll have time to go through this again, but it seems ok. One question inline, though.
In D89283#2348815 <https://reviews.llvm.org/D89283#2348815>, @wallace wrote: > The diff is the now ready for review. There are a few updates, including some > design decisions after some chats with Greg. > > - Now the dump command includes disassembly information and symbol context > information whenever relevant, e.g. I should've said something earlier, but I think the decision to the actual disassembling in a separate patch was a good one. This patch was big enough as it was. > - I tried to use yaml to represent the binary fails, but it doesn't work. The > yaml representation doesn't have all the required information and the decoder > complaints about missing memory. At this point it's better to just include > the binary and have strong tests. That makes me sad, but I am not going to hold this patch over that. I would encourage you to find and implement the missing bits in yaml2obj though... ================ Comment at: lldb/packages/Python/lldbsuite/test/lldbtest.py:2111 # Fail fast if 'cmd' is not meaningful. - if not cmd or len(cmd) == 0: + if not allowEmptyCmd and (not cmd or len(cmd) == 0): raise Exception("Bad 'cmd' parameter encountered") ---------------- I think that we could just drop the len(cmd)==0 check. It's pretty unlikely that anyone will do that by accident (and have all of his checks will still pass)... ================ Comment at: lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:53-56 +size_t DecodedThread::SetPosition(size_t new_position) { + m_position = std::min(new_position, GetLastPosition()); + return m_position; +} ---------------- I don't see this used anywhere. And if it's not used, how is the dump command implemented? (I'm guessing this is used to implement per-thread "last dumped instruction" positions. I'm not sure if that feature is worth it (the `list` command doesn't have that), but if that's the case maybe the name should also be more specific, as that position is unlikely to be useful for anything else.) ================ Comment at: lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp:109 + else { + consumeError(decoded_thread.takeError()); + return 0; ---------------- wallace wrote: > labath wrote: > > wallace wrote: > > > labath wrote: > > > > I'm having doubts about this "I have an thread but was not able to > > > > decode _anything_ about it" state is worth it. Having many different > > > > ways to report errors just increases the chance of something going > > > > wrong, and in `TraverseInstructions` you're already treating this state > > > > as a pseudo-instruction. > > > > > > > > Maybe that representation should be used all the way down? Or (and this > > > > may be even better) we avoid creating such Threads in the first place > > > > (print an error/warning when the target is created). > > > > Maybe that representation should be used all the way down? > > > > > > I'll follow that path. This will create consistency through the code > > > > > > > > > > Or (and this may be even better) we avoid creating such Threads in the > > > > first place (print an error/warning when the target is created). > > > > > > I wish I could do that, but decoding is very expensive and should be done > > > lazily. According to Intel and my tests, if a thread was traced during T > > > seconds, then decoding takes around 10T, which is a big amount of time if > > > you were tracing 10 threads for 5 seconds, which would take 500 seconds > > > to decode. At least for know we are not doing parallel decoding. I > > > imagine at some point we'll have to work on that. > > If you can pull that off -- great. However, I have doubts (and judging by > > the other comments, you're starting to have some too) regarding how long > > will you be able to postpone the decoding. For example, lldb very much > > likes to know the PC value of each thread (can you really blame it?) -- so > > much that we've added a special field to the gdb-remote stop-reply packet > > which lists the pc values of all threads. > > > > That leads me to believe that you'll need to decode at least the last block > > of each thread's trace very early on > Yes, I ended up understanding more of LLDB and it seems that it'll be as you > describe. I'll try to limit the initial decoding to at most the PC of each > thread, which would indeed be very beneficial, because we could catch early > some critical errors. I'll do that early decoding in another diff. Sounds good. I am slightly worried about the emphasis on sequential instruction numbers in this design. It seems like it'd be hard to avoid decoding the entire trace if one needs to assign a sequential id to each instruction. But let's see how it goes... CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89283/new/ https://reviews.llvm.org/D89283 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits