On Thu, Aug 28, 2014 at 8:30 AM, Colin Riley <co...@codeplay.com> wrote:

>  Yeah, I've been thinking about the different streams you'd need. A
> difficult one is a call stack on a platform, with frames on different
> ABIs/Targets representing cross-architecture calls.
>
> If anyone here has ever used the Cell PPU/SPU gdb, which had this feature,
> I think you'll agree it's absolute gold in terms of value.
>
>
That was one thing I was thinking of!


> Sadly I can't attend this years meeting, but I'll write a BOF proposal and
> send it in anyway with one of the other Codeplayers there to host.
>
>
Drats!  Sorry we'll miss you there, Colin.  I'm sure we'll appreciate
whoever does come from Codeplay!


> Colin
>
>
>
> On 28/08/2014 15:00, Todd Fiala wrote:
>
> It might be nice to mock up just the debugger command streams we think are
> needed/wanted to handle several common usages of the heterogeneous
> processor debugging scenarios on this thread before putting any code behind
> it.  That way we can talk through it a bit with concrete examples to
> further illuminate the kinds of changes/support we'll need.
>
>
> On Wed, Aug 27, 2014 at 11:21 PM, Matthew Gardiner <m...@csr.com> wrote:
>
>> Yes, a "device" abstraction seems to be the correct controlling entity.
>> In fact, from an embedded debugging perspective it is __the__ logical
>> entity which groups "debuggable opportunities" together. However, when Jim
>> mentions "this coordinating entity should not be restricted to different
>> devices " and alludes to control over different targets (which are in
>> __some_way__ associated in the debugging user's mind), but may be running
>> on different machines etc.; then I think that conceptually we are still
>> talking about the same thing, but the name "device" then becomes
>> questionable. I can only really think of something a tad wooly like
>> "DebugScenario", "DebugSession" or "DeploymentScenario"... :-(
>>
>> Yes, the Platform should remain just being the Platform.
>>
>> Regarding "debuggable opportunities" - solely these are just the "Target"
>> objects that we already have? (In fact Colin's original post does in fact
>> just state "that can take multiple targets together and understand how they
>> operate...").
>>
>> What's really tricky, I think, is how to make the device/scenario
>> controlling entity look very generic on the outside, but within be able to
>> coordinate very target specific activities. It seems that the
>> debuggable_oppurtunity/target would require some way of communicating the
>> kind of multi-target features it can support e.g.
>>
>> CanStopOthers
>> CanBeUnselectedAsActive
>> ...and so on...
>>
>> Interested to see how things pan out.
>>
>> Matt
>>
>>
>> jing...@apple.com wrote:
>>
>>>  Right, it seems to me clear that you need two entities.
>>>
>>> One knows what targets can be created in a given debugging scenario, and
>>> how to hook up to them.  Then you need another to manage picking some
>>> subset of these targets, and coordinating the processes running in each of
>>> them.
>>>
>>> The Platform seemed the logical place to do the first job.  However,
>>> Matthew is right that at present the Platforms are homogenous, and more
>>> deal with OS details.  So maybe it would be better to keep the Platform
>>> more about OS details, then we could add a "device" abstraction that
>>> represents composite entities with multiple debuggable opportunities, and
>>> then each of these "debuggable opportunities" would have a Platform to
>>> represent the OS like features of this opportunity (need some good word for
>>> this.)  That might be a better way to go.  Note that the "debuggable
>>> opportunities" are more general than just different devices on a board.
>>> For instance, you could imagine debugging the kernel, and a user-space
>>> process running on that OS, and coordinating those just as you would a main
>>> processor and a co-processor...  To make matters a little confusing, a
>>> "device" might represent all the processes running on a single OS, since
>>> that's not formally different from the more straightforward device
>>> scenario.  So in some ways a platform IS also a device in this sense.
>>> Maybe the abstraction is more a target provider, and the Platform is a
>>> homogenous target provider, in addition to its OS duties, and a device is a
>>> heterogenous target provider?
>>>
>>> But in either case, once you've chosen to attach to several debug
>>> sockets, there's the whole business that Matthew mentions of coordinating
>>> the sessions.  That is clearly a whole different kettle of fish from just
>>> "what can I attach to".
>>>
>>> BTW, this coordinating entity should not be restricted to different
>>> devices.  At that level, of course, it is really about coordinating targets
>>> & their process regardless of where they come from.  For instance you'd
>>> want to be able to use the same structure to coordinate debugging message
>>> passing or socket traffic, etc on two user space processes on the same or
>>> different systems.  It would also be interesting to model this coordination
>>> in a way that could also be extended to threads in a single process.  Right
>>> now, each thread's behavior is programmed using the ThreadPlans which work
>>> only on a per thread basis and don't make any attempt to coordinate
>>> threads.  But it would be useful (and more so when you start doing keep
>>> alive debugging) to have some way to program "when thread A does X, wait
>>> for thread B to do Y..."  That isn't formally different from two processes
>>> or several co-processors.  Be interesting to see how much of the
>>> coordination we could make very general.
>>>
>>> Jim
>>>
>>>
>>>
>>>  On Aug 27, 2014, at 7:55 AM, Todd Fiala <tfi...@google.com> wrote:
>>>>
>>>>  Greg and Jim both mentioned using the Platform class as the place to
>>>>> implement this kind of thing.
>>>>>
>>>> I think Jim later mentioned a higher-level concept is needed to do some
>>>> of the orchestration that we'd want to enable, IIRC.
>>>>
>>>>
>>>> On Tue, Aug 26, 2014 at 11:18 PM, Matthew Gardiner <m...@csr.com>
>>>> wrote:
>>>> Hi Colin,
>>>>
>>>> Multiple target debugging is a massive interest to us at CSR. We design
>>>> chips with various processor types (e.g. kalimba, XAP, 8051, ARM etc) and
>>>> on several of our chips we have multiple-processors. There are lots of
>>>> combinations of setups that we have either already done, or are actively
>>>> experimenting on. Generally, we have heterogenous setups (e.g. XAP+8051, or
>>>> 4*XAP+kalimba+8051) etc.
>>>>
>>>> I see that lldb already supports the concept of a target list, an
>>>> active target and manual switching between current targets. However, as
>>>> Colin alludes, there are several features associated with multiple-target
>>>> which require control from a higher-level.
>>>>
>>>> What we currently have in our existing debuggers is options of the
>>>> form, "I'm debugging targets A and B, if A stops do I want B stop as
>>>> well?". The answer to that question is very much specific to that user's
>>>> current debug scenario. Of course, getting B to stop if A does, is best
>>>> implemented in the hardware, and typically a register will be available as
>>>> a mechanism to configure this feature. In our (CSRs) world probably one of
>>>> the processors will have access to the associated hardware block, and our
>>>> debugger will talk to this target to access the feature.
>>>>
>>>> So, of course, if non-active target(s) stops whilst stepping/running
>>>> the active one, some notification needs to be passed up, informing the
>>>> debug session controller of this, and determining whether or not to switch
>>>> active target.
>>>>
>>>> Greg and Jim both mentioned using the Platform class as the place to
>>>> implement this kind of thing. However, does the Platform not only deal in
>>>> homogenous entities? Is it correct to use this concept to control different
>>>> processor families. With my limited lldb architectural knowledge, I would
>>>> have thought that the most likely candidate to control this is the Debugger
>>>> object itself.
>>>>
>>>> Matt
>>>>
>>>>
>>>>
>>>> Colin Riley wrote:
>>>> Has anybody done any work on integrating features into LLDB to allow
>>>> for 'meaningful' simultaneous multiple target debugging? There are various
>>>> scenarios in which this is a very valuable feature:
>>>>
>>>> 1) coprocessor debugging, in single-process systems (i.e, embedded DSP
>>>> alongside say a host CPU core)
>>>> 2) graphical debugging, e.g. games: ideally you want to be able to
>>>> debug the CPU code alongside any GPU workgroups, and have a single
>>>> interface to any shared resources such as memory.
>>>>
>>>> We've done work like this in the past to LLDB, it's not been
>>>> contributed back because we couldn't do so for commercial reasons (and it's
>>>> not in a state to contribute back, either). However in the future I think
>>>> this will become a 'killer app' feature for LLDB and we should be planning
>>>> to support it.
>>>>
>>>> At the moment we can have multiple targets, processes etc running in an
>>>> LLDB session. However I am failing to see any system for communication and
>>>> interpretation of multiple targets as a whole. If we take the DSP/CPU
>>>> situation, I may be watching a CPU memory location whilst at the same time
>>>> single-stepping through the DSP. It's currently undefined and a bit unknown
>>>> as to how this situation would work in LLDB as stands. From what I can see,
>>>> it's quite hard to use the current independent target framework to achieve
>>>> a meaningful debugging session.
>>>>
>>>> It's as though we'd want some sort of session object, that can take
>>>> multiple targets together and understand how they operate as to achieve
>>>> some sort of well-defined behaviour in how it's debugged. I.e, in the
>>>> DSP/CPU scenario, the session object would understand the DSP has access to
>>>> the CPU memory, and as such, if we're currently on the DSP single stepping,
>>>> it would allow a CPU watchpoint event through to the DSP session, with an
>>>> ability to switch target.
>>>>
>>>> There are many more items we'd need to allow communication between. A
>>>> quick example, we have an LLDB version here that supports non-stop mode
>>>> debugging (see
>>>> https://sourceware.org/gdb/current/onlinedocs/gdb/Non_002dStop-Mode.html
>>>> - and we _will_ contribute this back). At the moment stepping through one
>>>> thread and a breakpoint happens in another is a bit nasty: LLDB simply
>>>> switches to whatever thread id is greater. When this sort of usability
>>>> issue exists in a single-target fashion, we may need to look at extracting
>>>> this out into some sort of policy system that targets (and, these
>>>> theoretical session objects) can use to decide how to handle certain event
>>>> situations.
>>>>
>>>> Apologies if this is a bit of a brain dump. It's quite a complex
>>>> concept, which is why I think dialogue needs to start now as it's something
>>>> as I've mentioned we are actively doing at Codeplay, but when the time
>>>> comes to push upstream, want to do so in a way the community thinks is
>>>> valuable. There may be other viewpoints, like 'super debugservers' that can
>>>> manage multiple targets and spoof a single target to LLDB, for example.
>>>>
>>>> Any other opinions or thoughts out there? :)
>>>>
>>>> Colin
>>>>
>>>>
>>>>
>>>>
>>>> Member of the CSR plc group of companies. CSR plc registered in England
>>>> and Wales, registered number 4187346, registered office Churchill House,
>>>> Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
>>>> More information can be found at www.csr.com. Keep up to date with CSR
>>>> on our technical blog, www.csr.com/blog, CSR people blog,
>>>> www.csr.com/people, YouTube, www.youtube.com/user/CSRplc, Facebook,
>>>> www.facebook.com/pages/CSR/191038434253534, or follow us on Twitter at
>>>> www.twitter.com/CSR_plc.
>>>> New for 2014, you can now access the wide range of products powered by
>>>> aptX at www.aptx.com.
>>>>
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> lldb-dev@cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>>
>>>>
>>>>
>>>> --
>>>> Todd Fiala |     Software Engineer |     tfi...@google.com |
>>>> 650-943-3180
>>>>
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> lldb-dev@cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>>
>>>
>>>
>>>    To report this email as spam click
>>> https://www.mailcontrol.com/sr/7FVfGMSArIjGX2PQPOmvUq10po4Wab0lH8f98+JOKsNlI8w+ITj63RgscvXSUhTVZl0TLhIw4en5pl0FDW8fzw==
>>> .
>>>
>>
>>
>>
>
>
>  --
>   Todd Fiala |  Software Engineer |  tfi...@google.com |  650-943-3180
>
>
> --
> - Colin Riley
> Games Technology Director
>
> Codeplay Software Ltd
> 45 York Place, Edinburgh, EH1 3HP
> Tel: 0131 466 0503
> Fax: 0131 557 6600
> Website: http://www.codeplay.com
> Twitter: https://twitter.com/codeplaysoft
>
>
> This email and any attachments may contain confidential and /or privileged 
> information and is for use by the addressee only. If you are not the intended 
> recipient, please notify Codeplay Software Ltd immediately and delete the 
> message from your computer. You may not copy or forward it,or use or disclose 
> its contents to any other person. Any views or other information in this 
> message which do not relate to our business are not authorized by Codeplay 
> software Ltd, nor does this message form part of any contract unless so 
> stated.
> As internet communications are capable of data corruption Codeplay Software 
> Ltd does not accept any responsibility for any changes made to this message 
> after it was sent. Please note that Codeplay Software Ltd does not accept any 
> liability or responsibility for viruses and it is your responsibility to scan 
> any attachments.
> Company registered in England and Wales, number: 04567874
> Registered office: 81 Linkfield Street, Redhill RH1 6BY
>
>


-- 
Todd Fiala | Software Engineer | tfi...@google.com | 650-943-3180
_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to