[LLVMdev] Questions about attaching DWARF source code debugging information to generated LLVM-IR.
Christian Schafmeister
chris.schaf at verizon.net
Tue Apr 23 21:39:55 PDT 2013
Oh, and I cooked up a bogus function type for all of the functions - it returns an i32 and takes no arguments.
I was hoping that I could defer dealing with types until later down the road.
Could that be my problem here?
Best,
.Chris.
On Apr 24, 2013, at 12:37 AM, Christian Schafmeister <chris.schaf at verizon.net> wrote:
> 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