[LLVMdev] Questions about attaching DWARF source code debugging information to generated LLVM-IR.

Christian Schafmeister chris.schaf at verizon.net
Tue Apr 23 21:37:20 PDT 2013


One other thing that may or may not illuminate the situation.

When I run under gdb (on OS X 10.8.3 this is an ancient version of gdb 6.3.5 - but it works with clang compiled C++ code) I get the following error when I try to list a line in dwarf1.lsp:

Dwarf Error: Cannot handle DW_FORM_<unknown> in DWARF reader [in module /Users/meister/Development/cando/src/tests/core/dwarf1.bundle]
(gdb)


---------- full gdb transcript follows ----------

(gdb) run
Reading symbols for shared libraries ++++++++++++++++++++++.............................. done
Using lisp-source-directory --> /Users/meister/Development/cando/src/lisp
../../src/core/lisp.cc:206 BRIDGE-COMMON-LISP startup
../../src/core/corePackage.cc:393 - exported symbol[*LOAD-VERBOSE*]
../../src/core/foundation.cc:627 - The symbol[LOGIOR] has already been assigned a function and will not be redefined
../../src/core/foundation.cc:627 - The symbol[NAN] has already been assigned a function and will not be redefined
Loading interpreted file: /Users/meister/Development/cando/src/lisp/brcl/cmp/jit-setup.lsp
Currently the (LOG x) macro is: ( LOG X )
Compiler LOG macro will slow down compilation

Useful commands:
(load-boot stage &key :interp t )   - Load the minimal system
(compile-boot stage &key :reload t) - Compile whatever parts of the system have changed
(clean-boot stage)                  - Remove all boot files after after-file
Available modules: ( LSP/FOUNDATION LSP/EXPORT LSP/DEFMACRO LSP/HELPFILE LSP/EVALMACROS LSP/LOGGING LSP/MAKEARRAY :TINY :PRE-CMP CMP/CMPSETUP CMP/CMPGLOBALS CMP/CMPVAR CMP/COMPILE-MAIN CMP/LLVM-IR CMP/EXCEPTION-HANDLING CMP/DEBUGINFO CMP/LAMBDA-LIST CMP/COMPILE-VAR-LOOKUPS CMP/CMPQUOTE CMP/COMPILER CMP/COMPILE-FILE CMP/COMPILE-BUNDLE CMP/CMPWALK LSP/SETF LSP/SETFREST LSP/LISTLIB :CMP :STAGE1 LSP/PREDLIB LSP/SHARPMACROS LSP/CMUUTIL LSP/SEQMACROS LSP/SEQLIB LSP/SEQ LSP/ASSERT LSP/DEFSTRUCT LSP/IOLIB LSP/MODULE LSP/TRACE LSP/LOOP2 LSP/PACKLIB LSP/DEFPACKAGE LSP/FORMAT :STAGE2 CLOS/PACKAGE CLOS/HIERARCHY CMP/CMPREPL CLOS/CPL CLOS/STD-SLOT-VALUE CLOS/SLOT CLOS/BOOT CLOS/KERNEL CLOS/METHOD CLOS/COMBIN CLOS/STD-ACCESSORS CLOS/DEFCLASS CLOS/SLOTVALUE CLOS/STANDARD CLOS/BUILTIN CLOS/CHANGE CLOS/STDMETHOD CLOS/GENERIC CLOS/FIXUP :FRONT CLOS/CONDITIONS CLOS/PRINT CLOS/STREAMS LSP/PPRINT :CLOS )

BRIDGE-COMMON-LISP (copyright Christian E. Schafmeister 2013) - 1.0

CORE>>> (defun gdb () (break "break"))

; --> #<INTERPRETED :name GDB :llh #<LAMBDA-LIST-HANDLER :ClassifiedSymbols Cons_O::nil  :comment "">  :environment #[VALUE-ENVIRONMENT :id 27874
      ----NO METADATA----
       ]
 :declares Cons_O::nil :docstring """"  :code ((BLOCK GDB ( BREAK "break" )  )  ) >

CORE>>> (load-bundle "dwarf1.bundle")
Reading symbols for shared libraries .... done
Found function ___user_dwarf1 at address 0x1057ab7d0

("First line x -->" 1  ) 
"second line" break
../../src/core/primitives.cc:354 af_debug --> nil
  Frame   9, file "-StringInStream-", line 1, col 16,    iL-Func, in BREAK
       ( BREAK "break" )
The following restarts are available:
ABORT      a    Abort to REPL
Frame-9-Dbg(+ENV)[1]>
Program received signal SIGINT, Interrupt.
0x00007fff95666ffa in read ()
(gdb) l dwarf1.lsp:1
Dwarf Error: Cannot handle DW_FORM_<unknown> in DWARF reader [in module /Users/meister/Development/cando/src/tests/core/dwarf1.bundle]
(gdb)




On Apr 24, 2013, at 12:20 AM, Christian Schafmeister <chris.schaf at verizon.net> wrote:

> 
> I upgraded my versions of llvm, clang and compiler-rt to the top-of-tree versions from last night (r180162, April 24).
> 
> I recompiled debug versions of llvm, clang and my code.
> 
> I then regenerated my test case and the results were the same - I can list lines of dwarf1.lsp in lldb but I can't set break-points or do anything else (what else should I be able to do?).
> 
> The updated file that describes the test case is at: https://dl.dropboxusercontent.com/u/6229900/dwarf1_new.txt
> 
> I did have to make a few changes to my code to make it work with the latest llvm.  
> In particular DIBuilder::createCompileUnit required an additional parameter "SplitName". 
> But when I added that parameter and fixed a few other things the results were the same.
> 
> I think I'm generating the DWARF compile_unit, subprogram, lexical-block, and line-number information correctly but I can't seem to get it to work with lldb.
> 
> If anyone can take a look at it and suggest what I'm doing wrong or suggest tools that I can use to debug this problem - I'd greatly appreciate it.
> 
> Best,
> 
> .Chris.
> 
> 
> 
> 
> On Apr 23, 2013, at 6:32 PM, "Malea, Daniel" <daniel.malea at intel.com> wrote:
> 
>> I built SVN revision 180023, looks like it's slightly newer than yours:
>> 
>> LLVM (http://llvm.org/):
>> LLVM version 3.3svn
>> DEBUG build with assertions.
>> Built Apr 22 2013 (14:26:17).
>> Default target: x86_64-unknown-linux-gnu
>> Host CPU: corei7-avx
>> 
>> Registered Targets:
>>   aarch64  - AArch64
>>   arm      - ARM
>>   cpp      - C++ backend
>>   hexagon  - Hexagon
>>   mblaze   - MBlaze
>>   mips     - Mips
>>   mips64   - Mips64 [experimental]
>>   mips64el - Mips64el [experimental]
>>   mipsel   - Mipsel
>>   msp430   - MSP430 [experimental]
>>   nvptx    - NVIDIA PTX 32-bit
>>   nvptx64  - NVIDIA PTX 64-bit
>>   ppc32    - PowerPC 32
>>   ppc64    - PowerPC 64
>>   sparc    - Sparc
>>   sparcv9  - Sparc V9
>>   thumb    - Thumb
>>   x86      - 32-bit X86: Pentium-Pro and above
>>   x86-64   - 64-bit X86: EM64T and AMD64
>>   xcore    - XCore
>> 
>> 
>> 
>> 
>> On 2013-04-23 6:26 PM, "Christian Schafmeister" <chris.schaf at verizon.net>
>> wrote:
>> 
>>> Dan,
>>> 
>>> Thanks for taking time out to look at this.
>>> 
>>> I cut-and-pasted the IR into a text file and ran the following version of
>>> llc on it using "llc -filetype=obj dwarf1_paste.ll" and it didn't report
>>> any errors.
>>> I'll take a closer look at the CompileUnit DWARF entry in the IR.
>>> 
>>> But in the mean-time, which version of llc are you using?
>>> 
>>> I'm using:
>>> 
>>> LLVM (http://llvm.org/):
>>> LLVM version 3.3svn
>>> Optimized build with assertions.
>>> Built Apr 21 2013 (20:22:16).
>>> Default target: x86_64-apple-darwin12.3.0
>>> Host CPU: corei7-avx
>>> 
>>> Registered Targets:
>>>  arm      - ARM
>>>  cpp      - C++ backend
>>>  hexagon  - Hexagon
>>>  mblaze   - MBlaze
>>>  mips     - Mips
>>>  mips64   - Mips64 [experimental]
>>>  mips64el - Mips64el [experimental]
>>>  mipsel   - Mipsel
>>>  msp430   - MSP430 [experimental]
>>>  nvptx    - NVIDIA PTX 32-bit
>>>  nvptx64  - NVIDIA PTX 64-bit
>>>  ppc32    - PowerPC 32
>>>  ppc64    - PowerPC 64
>>>  sparc    - Sparc
>>>  sparcv9  - Sparc V9
>>>  thumb    - Thumb
>>>  x86      - 32-bit X86: Pentium-Pro and above
>>>  x86-64   - 64-bit X86: EM64T and AMD64
>>>  xcore    - XCore
>>> 
>>> 
>>> Best,
>>> 
>>> .Chris.
>>> 
>>> 
>>> 
>>> On Apr 23, 2013, at 5:18 PM, "Malea, Daniel" <daniel.malea at intel.com>
>>> wrote:
>>> 
>>>> Hmm, are you using a version of LLVM with asserts enabled (I.e. A debug
>>>> build)?
>>>> 
>>>> I cut-and-paste your IR into a text file and ran (a debug version of)
>>>> llc
>>>> on it, which caused the following assertion failure that seems related
>>>> to
>>>> some DWARF mishap:
>>>> 
>>>> 
>>>> llc: ../lib/CodeGen/AsmPrinter/DwarfDebug.cpp:1400: void
>>>> llvm::DwarfDebug::beginFunction(const llvm::MachineFunction*): Assertion
>>>> `TheCU && "Unable to find compile unit!"' failed.
>>>> 0  llc             0x00000000011d3ad6
>>>> 1  llc             0x00000000011d3d5d
>>>> 2  llc             0x00000000011d37ac
>>>> 3  libpthread.so.0 0x00007fa2aa6a7cb0
>>>> 4  libc.so.6       0x00007fa2a9afd425 gsignal + 53
>>>> 5  libc.so.6       0x00007fa2a9b00b8b abort + 379
>>>> 6  libc.so.6       0x00007fa2a9af60ee
>>>> 7  libc.so.6       0x00007fa2a9af6192
>>>> 8  llc             0x00000000009b0799
>>>> 9  llc             0x000000000099a197
>>>> 10 llc             0x000000000077b14d
>>>> 11 llc             0x0000000000cd7b81
>>>> 12 llc             0x00000000010d2aa0
>>>> 13 llc             0x00000000010d2c9b
>>>> 14 llc             0x00000000010d3013
>>>> 15 llc             0x00000000010d3628
>>>> 16 llc             0x00000000010d383b
>>>> 17 llc             0x000000000042781c
>>>> 18 llc             0x00000000004267cd
>>>> 19 libc.so.6       0x00007fa2a9ae876d __libc_start_main + 237
>>>> 20 llc             0x0000000000426129
>>>> Stack dump:
>>>> 0.	Program arguments: ./llvm/build-cmake/bin/llc christian.ll -o
>>>> christian
>>>> 1.	Running pass 'Function Pass Manager' on module 'christian.ll'.
>>>> 2.	Running pass 'X86 Assembly / Object Emitter' on function '@repl'
>>>> Aborted (core dumped)
>>>> 
>>>> 
>>>> It looks like something is wrong with one of your function definition.
>>>> Glancing at the IR though, I can't tell what though..
>>>> 
>>>> (PS. I attached a debugger and got a partial dump of the MachineFunction
>>>> that causes the assertion in beginFunction. See attached.
>>>> 
>>>> 
>>>> 
>>>> Good luck,
>>>> Dan
>>>> 
>>>> On 2013-04-23 4:55 PM, "Christian Schafmeister"
>>>> <chris.schaf at verizon.net>
>>>> wrote:
>>>> 
>>>>> 
>>>>> I didn't make it clear that I load my Common Lisp application into
>>>>> "lldb"
>>>>> and then load a compiled bundle into my application using dlopen (I'm
>>>>> on
>>>>> OS X and I'm generating a kind of shared library called a "bundle").
>>>>> Once
>>>>> everything is loaded, the functions from the bundle are accessible to
>>>>> my
>>>>> Common Lisp environment but I don't seem to be able to access the
>>>>> bundle
>>>>> metadata properly from lldb.
>>>>> 
>>>>> Best,
>>>>> 
>>>>> .Chris.
>>>>> 
>>>>> On Apr 23, 2013, at 4:30 PM, Christian Schafmeister
>>>>> <meister at temple.edu>
>>>>> wrote:
>>>>> 
>>>>>> 
>>>>>> Hey folks, 
>>>>>> 
>>>>>> I'm wrestling with adding DWARF source code file/line information to
>>>>>> my
>>>>>> generated LLVM-IR from my Common Lisp compiler.
>>>>>> 
>>>>>> I think I'm doing everything properly using the llvm::DIBuilder class
>>>>>> -
>>>>>> but when I load my Common Lisp application and load a compiled bundle
>>>>>> into it I don't seem to be able to access the metadata properly.
>>>>>> 
>>>>>> I can list source lines using "l -f dwarf0.lsp -l 1" but I can't set
>>>>>> break-points or do much else.
>>>>>> 
>>>>>> I've prepared a test case and put it in my public folder on dropbox:
>>>>>> https://dl.dropboxusercontent.com/u/6229900/dwarf1.txt
>>>>>> 
>>>>>> It's a flat text file containing six sections which you can jump to by
>>>>>> searching for "SECTION" (all caps).
>>>>>> I've added a few lines at each SECTION entry with thoughts about what
>>>>>> might be wrong or what is going on.
>>>>>> 
>>>>>> If one of you debugging gurus could take a few minutes to take a look
>>>>>> at it and give me some pointers I'd really, really appreciate it!
>>>>>> 
>>>>>> Best,
>>>>>> 
>>>>>> .Chris.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> LLVM Developers mailing list
>>>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>> 
>>>> <machine_assert.txt>
>>> 
>> 
> 





More information about the llvm-dev mailing list