Aaron Gray wrote:> Dear All, > > To add to this, what you want to do is find the appropriate debug stop > point intrinsic and then use it to look up the information for that > instruction. > > Here is some sample code from SAFECode that finds the debug information > associated with a CallInst (LLVM call instruction) held in the variable > CI. It uses the findStopPoint() function in llvm/Analyis/DebugInfo.h: > > // > // Get the line number and source file information for the call. > // > const DbgStopPointInst * StopPt = findStopPoint (CI); > Value * LineNumber; > Value * SourceFile; > if (StopPt) { > LineNumber = StopPt->getLineValue > SourceFile = StopPt->getFileName(); > } > > -- John T. > > Hi John, > > What I am after is to be able to emit line number information for COFF > (Common Object File Format) object module files, basically it comes down to > paired line numbers and virtual address offsets. > > I have not really set out to look at this yet, just feeling ahead, and was > prompted by Saman's question to have a look. > > So any pointers or help are most welcome, > > Aaron >So you are digging into the code generator issues. That's beyond my ken. The original question seemed to be interested in getting debug information corresponding to an LLVM instruction at the LLVM IR level. That's what the code above does. In your case, you need additional information about what the code generator is doing. Unfortunately, I can't help you with that, but hopefully someone else can. Sorry. -- John T.> > Török Edwin wrote: > >> On 2009-07-09 11:17, Aaron Gray wrote: >> >> >>>>> -----Original Message----- >>>>> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] >>>>> >>>>> >>>>> >>>> On >>>> >>>> >>>> >>>>> Behalf Of Saman Aliari Zonouz >>>>> Sent: Thursday, July 09, 2009 11:44 AM >>>>> To: llvmdev at cs.uiuc.edu >>>>> Subject: [LLVMdev] Source file information. >>>>> >>>>> Hi, >>>>> >>>>> I am new to LLVM, and need to find the line number and cpp source file >>>>> name for each instruction in a .bc file. I suppose llvm debugger might >>>>> have that feature but there is no documentation on it. Would you >>>>> >>>>> >>>>> >>>> please >>>> >>>> >>>> >>>>> give me some help how to do it? >>>>> >>>>> >>>>> >>>>> >>>> Compile the original .cpp file with clang -g option. >>>> The file/line is maintained in SDNodes with DebugLoc field. >>>> >>>> >>>> >>> Can you also get this information in LLVM ? >>> >>> >>> >> See Analysis/DebugInfo.h, and opt -print-dbginfo for an example of how >> to use it. >> >> >>> And what about with llvm-gcc ? >>> >>> >>> >> Yes, if compiled with -g. >> >> Best regards, >> --Edwin >> _______________________________________________ >> 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 > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
>Aaron Gray wrote: >> What I am after is to be able to emit line number information for COFF >> (Common Object File Format) object module files, basically it comes down >> to >> paired line numbers and virtual address offsets. >> >> I have not really set out to look at this yet, just feeling ahead, and >> was >> prompted by Saman's question to have a look. >> >> So any pointers or help are most welcome, >> >So you are digging into the code generator issues. That's beyond my ken. > >The original question seemed to be interested in getting debug >information corresponding to an LLVM instruction at the LLVM IR level. >That's what the code above does. In your case, you need additional >information about what the code generator is doing. Unfortunately, I >can't help you with that, but hopefully someone else can. > >Sorry.Okay :) What I need to find or write is somethng that maps MachineBasicBlocks to line numbers. Aaron> > Török Edwin wrote: > >> On 2009-07-09 11:17, Aaron Gray wrote: >> >> >>>>> -----Original Message----- >>>>> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] >>>>> >>>>> >>>>> >>>> On >>>> >>>> >>>> >>>>> Behalf Of Saman Aliari Zonouz >>>>> Sent: Thursday, July 09, 2009 11:44 AM >>>>> To: llvmdev at cs.uiuc.edu >>>>> Subject: [LLVMdev] Source file information. >>>>> >>>>> Hi, >>>>> >>>>> I am new to LLVM, and need to find the line number and cpp source file >>>>> name for each instruction in a .bc file. I suppose llvm debugger might >>>>> have that feature but there is no documentation on it. Would you >>>>> >>>>> >>>>> >>>> please >>>> >>>> >>>> >>>>> give me some help how to do it? >>>>> >>>>> >>>>> >>>>> >>>> Compile the original .cpp file with clang -g option. >>>> The file/line is maintained in SDNodes with DebugLoc field. >>>> >>>> >>>> >>> Can you also get this information in LLVM ? >>> >>> >>> >> See Analysis/DebugInfo.h, and opt -print-dbginfo for an example of how >> to use it. >> >> >>> And what about with llvm-gcc ? >>> >>> >>> >> Yes, if compiled with -g. >> >> Best regards, >> --Edwin >> _______________________________________________ >> 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 > > _______________________________________________ > 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
On Thu, Jul 9, 2009 at 8:40 AM, Aaron Gray<aaronngray.lists at googlemail.com> wrote:>>Aaron Gray wrote: >>> What I am after is to be able to emit line number information for COFF >>> (Common Object File Format) object module files, basically it comes down >>> to >>> paired line numbers and virtual address offsets. >>> >>> I have not really set out to look at this yet, just feeling ahead, and >>> was >>> prompted by Saman's question to have a look. >>> >>> So any pointers or help are most welcome, >>> >>So you are digging into the code generator issues. That's beyond my ken. >> >>The original question seemed to be interested in getting debug >>information corresponding to an LLVM instruction at the LLVM IR level. >>That's what the code above does. In your case, you need additional >>information about what the code generator is doing. Unfortunately, I >>can't help you with that, but hopefully someone else can. >> >>Sorry. > > Okay :) > > What I need to find or write is somethng that maps MachineBasicBlocks to > line numbers.Every MachineInstruction holds a DebugLoc accessible through MachineInstr::getDebugLoc(). http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?view=markup Then MachineFunction::getDebugLocTuple(DebugLoc) (http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFunction.h?view=markup) will transform that into a DebugLocTuple (http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DebugLoc.h?view=markup) which gives you the CompileUnit, line number, and column number. Use DebugInfo.h:DICompileUnit to interpret the CompileUnit. I've been looking at the AsmPrinter to figure out how debug info works so I can implement it in the JITEmitter (for oprofile). The AsmPrinter inserts a label anywhere the DebugLoc changes (AsmPrinter::processDebugLoc). The JITEmitter has the option of using getCurrentPCValue() to record line boundaries, so I don't know whether recording addresses directly or also using labels for the JIT will be better.
On Thu, Jul 9, 2009 at 8:40 AM, Aaron Gray<aaronngray.lists at googlemail.com> wrote:>>Aaron Gray wrote:> > What I need to find or write is somethng that maps MachineBasicBlocks to > line numbers.As mentioned earlier in the thread, each MachineInstruction has DebugLoc to record line number info. - Devang