[PATCH] D11635: DebugInfo: Emit DW_AT_address_class for non-0 address space
Matt Arsenault
Matthew.Arsenault at amd.com
Mon Aug 3 11:33:05 PDT 2015
On 08/03/2015 11:27 AM, David Blaikie wrote:
>
>
> On Mon, Aug 3, 2015 at 11:25 AM, Matt Arsenault
> <Matthew.Arsenault at amd.com <mailto:Matthew.Arsenault at amd.com>> wrote:
>
> On 07/31/2015 10:12 AM, David Blaikie wrote:
>>
>>
>> On Fri, Jul 31, 2015 at 9:59 AM, Matt Arsenault
>> <Matthew.Arsenault at amd.com <mailto:Matthew.Arsenault at amd.com>> wrote:
>>
>> On 07/31/2015 06:46 AM, Robinson, Paul wrote:
>>>
>>> The debug info generally should be mapping the source to the
>>> code/data as actually generated, even after optimizations
>>> shuffle things around. If the original code thinks it's
>>> allocating something in AS 0 but optimization puts it in AS
>>> 3, and the user asks the debugger to display the value, how
>>> does the debugger know to look in AS 3? Asking the debugger
>>> to troll around looking for an instruction that it might
>>> guess is loading/storing the value and assuming that address
>>> is the actual location… seems like asking a bit much.
>>>
>>> --paulr
>>>
>> It seems like a single attribute for the debug address space
>> isn't enough then to describe both.
>>
>>
>> Why do you need to describe the original address space, rather
>> than only the one where the value actually resides? What would
>> the debugger use this information for? Does this need to be
>> rendered to the user? For what reason?
> Yes, it should be shown to the user. It's part of the variable the
> source declared, just like the type name. In OpenCL it has a lot
> of consequences for how that variable behaves w.r.t.
> synchronization issues and other things. Although this leads me to
> another question for the clang component emitting it, whether the
> source address space ID as defined by clang should be emitted for
> this attribute, or the target mapped address space ID. Since these
> all end up as 0 on x86 for example, it probably should be the
> clang source ID in that case.
>
>>
>> (hmm, speaking of which - perhaps this shouldn't be an attribute
>> on the variable, but instead part of the DWARF expression
>> describing the location of the value? If it's possible that
>> optimizations would put the value in one location with one
>> address space at point A, and a different location in a different
>> address space at point B)
>>
> I don't know much about DWARF. I don't think there's any reason
> why a value would be duplicated into two different address spaces.
>
> I just checked the spec again and the description of
> DW_AT_address_class seems vague on what it is meant for. It says
> "DW_AT_address_class attribute to describe how objects having the
> given pointer or reference type ought to be dereferenced." which
> seems to not be describing what the source looks like.
>
>
> DWARF is somewhat intentionally vague.
>
> Let's start here: Why are you implementing this? Do you have users
> filing bugs about sub-optimal debugging behavior? Have you observed
> same? Does this patch help/address that behavior?
>
I'm upstreaming some of our internal debug info support patches for
AMDIL/HSAIL. This is the most important one, which currently reports the
backend address space ID which in this case happens to have a 1:1
mapping with the source language. Not having the address space at all in
the debug info is a show stopper for the OpenCL debugger. The question
of optimizations changing the address space is a bit of an academic
question at this point since HSAIL does not have any optimizations at
this time that do this.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150803/5182d611/attachment.html>
More information about the llvm-commits
mailing list