[llvm-dev] [RFC] Generate Debug Information for Labels in Function
Adrian Prantl via llvm-dev
llvm-dev at lists.llvm.org
Thu Mar 29 11:58:55 PDT 2018
> On Mar 29, 2018, at 11:51 AM, paul.robinson at sony.com wrote:
>
>
>
>> -----Original Message-----
>> From: aprantl at apple.com [mailto:aprantl at apple.com]
>> Sent: Thursday, March 29, 2018 2:23 PM
>> To: Robinson, Paul
>> Cc: hsiangkai at gmail.com; llvm-dev at lists.llvm.org
>> Subject: Re: [llvm-dev] [RFC] Generate Debug Information for Labels in
>> Function
>>
>>
>>
>>> On Mar 29, 2018, at 10:55 AM, paul.robinson at sony.com wrote:
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of
>> via
>>>> llvm-dev
>>>> Sent: Thursday, March 29, 2018 1:54 PM
>>>> To: aprantl at apple.com; hsiangkai at gmail.com
>>>> Cc: llvm-dev at lists.llvm.org
>>>> Subject: Re: [llvm-dev] [RFC] Generate Debug Information for Labels in
>>>> Function
>>>>
>>>>> Based on that I think it might be sufficient to have a flag on an IR
>>>> label
>>>>> that marks a user-originated label and triggers the backend to create
>> a
>>>>> DW_TAG_label for it. If we do need source location information for the
>>>>> DW_TAG_label, we could grab it from the first instruction.
>>>>
>>>> Are there languages where labels are scoped? If so we'd need explicit
>>>> metadata to identify the parent scope. In C/C++ the only scope is the
>>>> containing function, which I'm guessing we wouldn't need to specify
>>>> (except for inlined functions? that might need some care to get right).
>>>>
>>>> I feel compelled to point out that the top instructions in a block do
>> not
>>>> necessarily have a valid source location so we might want to carry that
>>>> explicitly just for sanity's sake.
>>>
>>> That is, carry the source location explicitly on the label.
>>
>> Thanks that's a good point. I still wonder what a debugger would do with
>> the source location of a label though? For setting breakpoints it seems
>> redundant with the location of the next instruction. Does GCC emit source
>> location for a label, or just its name? If yes, does GDB do anything with
>> that information?
>>
>> -- adrian
>
> A GUI debugger might show the source text near the label definition.
> Suppose the first code after the label is an inlined function call.
> Using the instruction's location would take you to the source for the
> inlined function, not to the label and the source for the call.
Yes, but LLDB at least only looks at .debug_line to determine the source to display for a given PC. This is quite annoying at -O0 with always_inline constructors in libcxx.
A label immediately followed by an inlined instruction will be invisible to the .debug_line table. It would also be ambiguous whether the label is part of a (lexical, inlined) scope in the .debug_info section if it appears at the beginning that scope.
-- adrian
More information about the llvm-dev
mailing list