Sent from my iPhone

> On Jul 14, 2014, at 7:18 PM, jing...@apple.com wrote:
> 
> These would be API's on SBValue, not necessarily ValueObject.  

That's fine. I was mostly concerned about the internal layer. It just didn't 
seem to me that a ValueObject would be the guy to ask that kind of question to.

> The problem is that you have to hang them off something that the SB API's 
> expose.  We aren't exposing the SystemRuntime to the SB API's.  For instance 
> in the stuff Jason did for Queues, this just got hung off of threads.  I 
> think in general the APIs will be clearer if we, like Jason did, we hang 
> information off the objects they naturally belong to rather than expose to 
> the SB layer "how we got them..."
> 
> So we could either do something like:
> 
> size_t
> SBProcess::GetNumHistoryFramesForAddress(SBAddress, const char *type);
> 
> size_t
> SBProcess::GetHistoryFrameAtIndexForAddress(SBAddress, const char *type, 
> size_t idx);
> 
> 
> etc.  Then you would get the history list passing in the address each time.  
> That's kind of gross.  We could make this a little better by returning an 
> SBThreadList (what we ain't got yet).

It would probably be easy to make an SBThreadList for that matter
Also, what do you mean by type here? malloc/free? We should probably if at all 
have an enum here to describe "memory management event" rather than a char*

In general, I don't hate this process-based scheme. Address spaces are a 
property of a process so it seems to fit neatly within a textbook description 
of memory management at the process level.

> Or we could hang it off of an address directly.  But we want this to be 
> convenient for Xcode to use as well, and it deals mostly with SBValues, so 
> making it grab out an address seems awkward.
> 

Not sure if it's exposed to SBValue but we do have a GetPointerValue() API on 
ValueObject that tends to do the right thing. But, again, I was more interested 
in why hanging the API off our internal ValueObject than the public SBValue.

> So since the SBValue is the thing that will have an allocation history, it 
> seems reasonable to ask it directly.  If it was made up to point to a random 
> address, and that address has ASAN history, I'm not sure why it would be 
> wrong to return that.  

It wouldn't. My argument was more along the lines of "don't use a ValueObject 
just because you hope it won't ever contain a bogus address". Whatever source 
you use to acquire it (random number generators included) if you give a valid 
address, you should get valid info back.

> And if the address had no history it would be fine to say so.
> 

Yes, totally.

> Jim
> 
> 
>> On Jul 14, 2014, at 6:41 PM, Enrico Granata <egran...@apple.com> wrote:
>> 
>> Hi,
>> I have to say I am not so sure this API makes entirely sense on a 
>> ValueObject. I do see the rationale: use the ValueObject containing the 
>> pointer as the source of the pointer value to then look up.
>> However, it's entirely possible to craft VOs from scratch, so there is no 
>> additional guarantee that you will get a valid result back just because a VO 
>> claims to be a Foo* at 0x123! Given that it doesn't buy us anything, a VO is 
>> a pretty heavyweight tool and it seems you wouldn't use anything but an 
>> address out of it. So why not just use an address as input?
>> 
>> I think Jason has been working on a SystemRuntime component for this kind of 
>> "underlying execution environment, tell me things" behavior.
>> It might be a good design here to sync up with him and see if it makes sense 
>> to add these ASanInfo calls to the SR, possibly taking an lldb::addr_t (or 
>> an lldb_private::Address, if you feel you might need that kind of detailed 
>> info) instead of a ValueObject (since an address is what you really care 
>> about anyway, it makes everyone's life easier not having to trade in a 
>> complicated creature like a VO)
>> 
>> Sent from my iPhone
>> 
>>> On Jul 14, 2014, at 6:24 PM, Kuba Břečka <kuba.bre...@gmail.com> wrote:
>>> 
>>> Hi, 
>>> 
>>> I'm trying to create a better support for debugging ASan-enabled binaries 
>>> in LLDB. I already started by proposing some API into the ASan runtime 
>>> library (http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-July/074656.html), 
>>> which should enable the debugger to query various additional information 
>>> the runtime can provide. Basically this means:
>>> 
>>> * malloc/free traces - given a memory address, the ASan runtime can return 
>>> recorded stack trace(s) of how that chunk of memory was allocated and/or 
>>> freed.
>>> 
>>> * shadow mapping information - these say how exactly is a memory address 
>>> mapped into the shadow memory and back.
>>> 
>>> * locating a memory address - ASan tracks globals and stack variables, so 
>>> it can provide a name (and size) given such a memory address; for heap 
>>> addresses it can give out the starting address and size of that chunk.
>>> 
>>> * gathering report information - when ASan detects an error, the reporting 
>>> mechanism can provide additional information, e.g. what kind of bug was 
>>> found ("heap-use-after-free").
>>> 
>>> For the malloc/free stack traces, it seems the best way to add this feature 
>>> would be to extend the ValueObject class with a generic API to retrieve a 
>>> list of HistoryThread objects, with some additional enum/constant-string to 
>>> tell the type of individual threads. Something like:
>>>    
>>>    ThreadList &
>>>    ValueObject::GetStackTraces() { ... }
>>> 
>>> The API for this should be reusable for other libraries/tools, for example 
>>> malloc_history could provide a very similar information. Since I want this 
>>> to be available in the SB API as well, Python scripting seems not to be the 
>>> way to go.
>>> 
>>> The goal is to have ASan-aware LLDB commands, such as:
>>> 
>>>    (lldb) expr -x 0xf00f00
>>>    // prints out the value of the expression, and if it's a pointer also
>>>    // prints the malloc and free stack traces
>>>    (lldb) memory read --shadow 0xf00f00
>>>    // prints out the corresponding shadow memory instead
>>>    (lldb) memory locate 0xf00f00
>>>    // says it's a stack variable with name "foo", size, starting address
>>> 
>>> I'll send patch(es) shortly, but do you have any comments/hints on the idea 
>>> in general?
>>> 
>>> Thanks,
>>> Kuba
>>> 
>>> _______________________________________________
>>> lldb-dev mailing list
>>> lldb-dev@cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev@cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to