[llvm-dev] Why LLVM doesn't have debug information of function right parentheses?
Simon Cook via llvm-dev
llvm-dev at lists.llvm.org
Thu Aug 3 08:05:55 PDT 2017
I have implemented this exact behavior in an out of tree LLVM fork I
maintain, where one of my users needed this behavior, and it seems to
work well. What we have done is extend the definition of DISubprogram to
contain a new field "endLine" which holds the line number of the closing
brace. A pass late in our backend uses this information to set the
DebugLoc of return instructions in our programs.
I haven't yet tidied up and submitted this upstream for review, as
without a consumer of this information, the extension itself is rather
dead, but could if some backends would find that information useful and
make use of it.
Thanks,
Simon
On 03/08/17 15:13, Robinson, Paul via llvm-dev wrote:
> I've had this request from my users as well, but it has never been high
> enough on the priority list to look at closely.
>
> I think it would be feasible to have the actual ret instruction
> associated with the closing brace, while the load/computation of the
> return value would be associated with the `return` statement; but that's
> as far as I got when I looked at this before.
>
> --paulr
>
>
>
> P.S. The word "parenthesis" plural "parentheses" refers specifically to
> these characters: ( )
>
> Generally [ ] are "square brackets" or sometimes just "brackets" while {
> } are called "braces" or "curly brackets."
>
>
>
> *From:*llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] *On Behalf Of
> *Frozen via llvm-dev
> *Sent:* Wednesday, August 02, 2017 11:19 PM
> *To:* llvm-dev at lists.llvm.org
> *Subject:* [llvm-dev] Why LLVM doesn't have debug information of
> function right parentheses?
>
>
>
> Simple Case:
>
> 1.int main()
> 2.{
> 3. int i = 0;
> 4. return 0;
> 5.}
>
> compile command: clang -g a.c
>
> In LLVM IR, we have one attribute named "scopeLine" to indicate the left
> parentheses. But we don't have one attribute to indicate the right
> parentheses (line 5 in this example).
>
> So if we use gdb to debug it:
> (gdb) b main
> Breakpoint 1 at 0x100005c8: file a.c, line 3.
> (gdb) r
> Breakpoint 1, main () at a.c:3
> 3 int i = 0;
> Missing separate debuginfos,
> (gdb) n
> 4 return 0;
> (gdb) n
> 0x00003fffb7db4580 in generic_start_main.isra.0
> We can not stop at line 5.
>
> But GCC can stop at line 5
> (gdb) b main
> Breakpoint 1 at 0x100005e0: file a.c, line 3.
> (gdb) r
> Breakpoint 1, main () at a.c:3
> 3 int i = 0;
> Missing separate debuginfos
> (gdb) n
> 4 return 0;
> (gdb) n
> 5 }
> (gdb)
>
>
>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
More information about the llvm-dev
mailing list