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

Vivien Millet via llvm-dev llvm-dev at lists.llvm.org
Tue Apr 3 03:45:37 PDT 2018


 Thanks I will try that, it seems to be exactly what I need for the IR<->DI
binding part !

Once i have done this, do you have an idea on how I can extract the
information back from my DwarfContext ?
I assume it should start with a call to DwarfContext::getDebugFrame(), but
I'm not really sure, I'm really lost with that format...
What i would like is to be able to provide my function address and get,
from a string "myLocalVar",  the information of the register/stack where
the variable is.
I m still digging the llvm source code to find...
Thanks !

2018-04-02 17:18 GMT+02:00 David Blaikie <dblaikie at gmail.com>:

> "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/20180403/09ee8602/attachment.html>


More information about the llvm-dev mailing list