I mean, we just skip over instructions without a DebugLoc: void CodeViewDebug::beginInstruction(const MachineInstr *MI) { DebugHandlerBase::beginInstruction(MI); // Ignore DBG_VALUE locations and function prologue. if (!Asm || !CurFn || MI->isDebugValue() || MI->getFlag(MachineInstr::FrameSetup)) return; DebugLoc DL = MI->getDebugLoc(); if (DL == PrevInstLoc || !DL) return; maybeRecordLocation(DL, Asm->MF); } Seems reasonable to extend the condition with ' || DL->getLine() == 0'. I'm not aware of a good way to say "this instruction is not associated with any line" in CodeView. On Wed, Aug 17, 2016 at 12:51 PM, Adrian Prantl via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Note that clang is also assigning line 0 to code that doesn't have a > corresponding source location. So CodeView needs to deal with this already, > though I don't know how it currently handles this. > > -- adrian > > > On Aug 17, 2016, at 11:43 AM, Robinson, Paul via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > > > > I've been playing with Fred Riss's "line 0" patch for DWARF > > (https://reviews.llvm.org/D16569) but in adapting it for current trunk, > > I find the DwarfDebug stuff has been refactored to allow either DWARF > > or CodeView. That's all good, but the question is whether the "line 0" > > patch should be DWARF-specific or common. The DWARF spec explicitly > > states that code not associated with any particular source location > > should be associated with line number 0. I don't know what CodeView > > (or debuggers that consume CodeView) would think of seeing "line 0" show > > up in the debug info. > > > > Does anybody know? > > Thanks, > > --paulr > > > > _______________________________________________ > > LLVM Developers mailing list > > llvm-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > _______________________________________________ > 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/20160817/332c1a12/attachment.html>
On Wed, Aug 17, 2016 at 1:09 PM, Reid Kleckner via llvm-dev < llvm-dev at lists.llvm.org> wrote:> I mean, we just skip over instructions without a DebugLoc: > > void CodeViewDebug::beginInstruction(const MachineInstr *MI) { > DebugHandlerBase::beginInstruction(MI); > > // Ignore DBG_VALUE locations and function prologue. > if (!Asm || !CurFn || MI->isDebugValue() || > MI->getFlag(MachineInstr::FrameSetup)) > return; > DebugLoc DL = MI->getDebugLoc(); > if (DL == PrevInstLoc || !DL) > return; > maybeRecordLocation(DL, Asm->MF); > } > > Seems reasonable to extend the condition with ' || DL->getLine() == 0'. > I'm not aware of a good way to say "this instruction is not associated with > any line" in CodeView. >Perhaps we could set emit line 0 as line number 0xfeefee (AlwaysStepIntoLineNumber). https://blogs.msdn.microsoft.com/jmstall/2005/06/19/line-hidden-and-0xfeefee-sequence-points/> On Wed, Aug 17, 2016 at 12:51 PM, Adrian Prantl via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Note that clang is also assigning line 0 to code that doesn't have a >> corresponding source location. So CodeView needs to deal with this already, >> though I don't know how it currently handles this. >> >> -- adrian >> >> > On Aug 17, 2016, at 11:43 AM, Robinson, Paul via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> > >> > I've been playing with Fred Riss's "line 0" patch for DWARF >> > (https://reviews.llvm.org/D16569) but in adapting it for current trunk, >> > I find the DwarfDebug stuff has been refactored to allow either DWARF >> > or CodeView. That's all good, but the question is whether the "line 0" >> > patch should be DWARF-specific or common. The DWARF spec explicitly >> > states that code not associated with any particular source location >> > should be associated with line number 0. I don't know what CodeView >> > (or debuggers that consume CodeView) would think of seeing "line 0" show >> > up in the debug info. >> > >> > Does anybody know? >> > Thanks, >> > --paulr >> > >> > _______________________________________________ >> > LLVM Developers mailing list >> > llvm-dev at lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> > > > _______________________________________________ > 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/20160817/7f510af4/attachment.html>
Fred's patch does some bookkeeping to identify instructions that aren't properly attributed anywhere, and turn that into a line-0 record for DWARF in beginInstruction(). Given that CodeView has a "nothing to see here" line number, which happens to be different from DWARF's, I'm now inclined to put the bookkeeping into the base class and let the DWARF and CodeView subclasses use it as appropriate. Thanks guys! --paulr From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of David Majnemer via llvm-dev Sent: Wednesday, August 17, 2016 1:23 PM To: Reid Kleckner Cc: llvm-dev at lists.llvm.org Subject: Re: [llvm-dev] CodeView and "line 0" ? On Wed, Aug 17, 2016 at 1:09 PM, Reid Kleckner via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote: I mean, we just skip over instructions without a DebugLoc: void CodeViewDebug::beginInstruction(const MachineInstr *MI) { DebugHandlerBase::beginInstruction(MI); // Ignore DBG_VALUE locations and function prologue. if (!Asm || !CurFn || MI->isDebugValue() || MI->getFlag(MachineInstr::FrameSetup)) return; DebugLoc DL = MI->getDebugLoc(); if (DL == PrevInstLoc || !DL) return; maybeRecordLocation(DL, Asm->MF); } Seems reasonable to extend the condition with ' || DL->getLine() == 0'. I'm not aware of a good way to say "this instruction is not associated with any line" in CodeView. Perhaps we could set emit line 0 as line number 0xfeefee (AlwaysStepIntoLineNumber). https://blogs.msdn.microsoft.com/jmstall/2005/06/19/line-hidden-and-0xfeefee-sequence-points/ On Wed, Aug 17, 2016 at 12:51 PM, Adrian Prantl via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote: Note that clang is also assigning line 0 to code that doesn't have a corresponding source location. So CodeView needs to deal with this already, though I don't know how it currently handles this. -- adrian> On Aug 17, 2016, at 11:43 AM, Robinson, Paul via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote: > > I've been playing with Fred Riss's "line 0" patch for DWARF > (https://reviews.llvm.org/D16569) but in adapting it for current trunk, > I find the DwarfDebug stuff has been refactored to allow either DWARF > or CodeView. That's all good, but the question is whether the "line 0" > patch should be DWARF-specific or common. The DWARF spec explicitly > states that code not associated with any particular source location > should be associated with line number 0. I don't know what CodeView > (or debuggers that consume CodeView) would think of seeing "line 0" show > up in the debug info. > > Does anybody know? > Thanks, > --paulr > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev_______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org<mailto: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/20160817/144ae313/attachment.html>