[llvm-dev] [Dwarf] Register a local variable in DIBuilder and locate it later with a DwarfContext

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 2 08:18:08 PDT 2018


"IR" often refers to the general concept/semantics, not only the textual
format in .ll files (there are 3 main forms - bitcode, textual IR, and the
in-memory representation (llvm::Module, etc - constructed using IRBuilder)).

A great place to start is to look at what Clang does to produce debug info
- it uses IRBuilder, for instance. So you could look at how Clang uses the
IRBuilder when compiling a small source file containing a local variable.
You'll find it calls into DIBuilder (the debug info equivalent of
IRBuilder) for constructing types and the location descriptions (see
"insertDeclare"/insertDbgValueIntrinsic", etc.).

On Sun, Apr 1, 2018 at 2:17 PM Vivien Millet via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi Paul,
> How can i make this call to intrinsic from the c++ code ?
> I'm not working with the IR language, but directly in C++ with
> IRBuilder::CreateAlloca.
> My goal is that one :
> - Generate machine code with an instance of the class 'IRBuilder'
> - Emit 'ObjFile' class instance with MCJIT
> - Create a DwarfContext instance directly from the emitted ObjFile object
> (DwarfContextInMemory) (on JitEventListener::NotifyObjectEmitted)
> - Use this DwarfContext to step into my home made runtime debugger.
>
> Now I can perform step over/into/out in my debugger using the DwarfContext
> instance without problem, but I'm still stuck on how
> to watch my local variables in my debugger (i can't figure out how to
> locate them in registers/stack from that DwarfContext)
>
> Thanks for your help
>
> 2018-04-01 20:17 GMT+02:00 <paul.robinson at sony.com>:
>
>> Binding the alloca to the debug-info metadata is not automatic.  You need
>> to emit an intrinsic function call to llvm.dbg.declare to bind the two
>> together.
>>
>> If you are simply trying to emit DWARF for your program, the rest of the
>> processing should already be in place for that.  If you are trying to do
>> something else, you would need to describe that so we understand what you
>> need.
>>
>> --paulr
>>
>>
>>
>> *From:* llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] *On Behalf Of *Vivien
>> Millet via llvm-dev
>> *Sent:* Saturday, March 31, 2018 7:33 AM
>> *To:* llvm-dev
>> *Subject:* [llvm-dev] [Dwarf] Register a local variable in DIBuilder and
>> locate it later with a DwarfContext
>>
>>
>>
>> Hi,
>>
>> First, considering I'm using an IRBuilder and a DIBuilder to build my
>> program, how can I automatically bind the CreateAlloca with my named local
>> variable inside the DIBuilder ? Is it automatic with the Twine name of
>> CreateAlloca ? And/Or should I use DIBuilder::createAutoVariable and how ?
>>
>>
>> Then, I'm wondering how to locate back my local variable in memory
>> (register or stack) once i have a DwarfContext ready.
>>
>> I'm a bit lost with all this pipeline, sorry If my question seem trivial.
>>
>> Thanks !
>>
>> Vivien
>>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180402/da4d1215/attachment.html>


More information about the llvm-dev mailing list