Török Edwin wrote:> [snip] >>> Something like this (you can of course cache TheMetadata and MDDbgKind) >>> >>> llvm::MetadataContext *TheMetadata = M->getContext().getMetadata(); >>> MDDbgKind = TheMetadata->getMDKind("dbg"); >>> if (MDDbgKind) { >>> if (MDNode *Dbg = TheMetadata->getMD(MDDbgKind, I)) { >>> DILocation Loc(Dbg); >>> ... >>> Loc.getDirectory() >>> Loc.getFilename() >>> Loc.getLineNumber() >>> Loc.getColumnNumber() >>> .... >>> } >>> >>> >> A grep through my LLVM 2.7 source tree does not find MetadataContext >> anywhere. Is this something that was added to LLVM mainline after the >> LLVM 2.7 branch was created? >> > > It should be there, include/llvm/Metadata.h. >Odd. I just looked in there, and MetadataContext is not defined in that file.> >> I'm using the release_27 branch of LLVM, so I'm limited to facilities >> within that branch. >> > > The example I've given is from code way older than the 2.7 branch (Dec > 2009 or so). >Is is possible that someone removed it? -- John T.> Best regards, > --Edwin >
On 03/16/2010 05:30 PM, John Criswell wrote:> Török Edwin wrote: >> [snip] >>>> Something like this (you can of course cache TheMetadata and MDDbgKind) >>>> >>>> llvm::MetadataContext *TheMetadata = M->getContext().getMetadata(); >>>> MDDbgKind = TheMetadata->getMDKind("dbg"); >>>> if (MDDbgKind) { >>>> if (MDNode *Dbg = TheMetadata->getMD(MDDbgKind, I)) { >>>> DILocation Loc(Dbg); >>>> ... >>>> Loc.getDirectory() >>>> Loc.getFilename() >>>> Loc.getLineNumber() >>>> Loc.getColumnNumber() >>>> .... >>>> } >>>> >>> A grep through my LLVM 2.7 source tree does not find MetadataContext >>> anywhere. Is this something that was added to LLVM mainline after the >>> LLVM 2.7 branch was created? >>> >> >> It should be there, include/llvm/Metadata.h. >> > > Odd. I just looked in there, and MetadataContext is not defined in that > file.Ah, the method got moved to the instruction itself! dbgKind = Context->getMDKindID("dbg"); if (MDNode *Dbg = I->getMetadata(dbgKind)) { ...
Török Edwin wrote:> [snip] > > Ah, the method got moved to the instruction itself! > > dbgKind = Context->getMDKindID("dbg"); > if (MDNode *Dbg = I->getMetadata(dbgKind)) { > ... >Thanks! This appears to work. I also have code that looks up debug information for GlobalVariables and regular LLVM Value *'s. For the former, I think I can look up their debug information by using the DebugInfoFinder class and iterating through all the MDNodes for global variables (using the global_variable_begin()/global_variable_end() methods). Is this the best way to do it, or is there a better way? For LLVM Value *s, I'm not sure how to get the debug information if they come from alloca instructions. Is the best option to look for a use of the Value in a llvm.dbg.declare() call and then grab the debug metadata from that? -- John T.
Apparently Analagous Threads
- [LLVMdev] Replacement for findStopPoint() in LLVM 2.7
- [LLVMdev] Replacement for findStopPoint() in LLVM 2.7
- [LLVMdev] Replacement for findStopPoint() in LLVM 2.7
- [LLVMdev] How to read v3.3 dbg metadata using v3.4 LLVM
- [LLVMdev] How to read v3.3 dbg metadata using v3.4 LLVM