[llvm-dev] DWARF gotchas moving from 3.7.1 to 3.9.0

David Jones via llvm-dev llvm-dev at lists.llvm.org
Thu Nov 17 18:45:57 PST 2016

I recently upgraded a codebase to use LLVM 3.9.0, up from 3.7.1.

All seems to work well, except that I am unable to generate debug

However, if I run objdump -g on the generated object file, it reports that
the compile unit has no children:

Contents of the .debug_abbrev section:

  Number TAG (0x0)
   1      DW_TAG_compile_unit    [no children]
    DW_AT_producer     DW_FORM_strp
    DW_AT_language     DW_FORM_data2
    DW_AT_name         DW_FORM_strp
    DW_AT_stmt_list    DW_FORM_sec_offset
    DW_AT value: 0     DW_FORM value: 0

The IR generated for 3.9.0 passes the IR verifier without complaint
(including the debug into verifier). I can run llc manually on my IR
without complaint. However, I am not able to ascertain whether llc runs the
debug info verifier by default.

One of the changes I had to make to get my code to compile was to remove
the function argument (of Function* type) from the call to
DIBuilder::createFunction(). This appears to be my problem, as my functions
do not appear to have debug info:

>From my 3.7.1 code:

define void @func(%artype*) #4 !dbg !5 {
!5 = distinct !DISubprogram(n...)

>From 3.9.0:

define void @func(%artype*) #4 {

What must I do to attach the DISubprogram metadata node to my Function,
assuming this is the problem?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161117/2e573bed/attachment.html>

More information about the llvm-dev mailing list