[llvm-commits] [llvm] r143509 - in /llvm/trunk: include/llvm/MC/MCContext.h lib/MC/MCContext.cpp lib/MC/MCParser/AsmParser.cpp tools/llvm-mc/llvm-mc.cpp

Nick Lewycky nicholas at mxc.ca
Tue Nov 1 20:56:05 PDT 2011


Kevin Enderby wrote:
> Author: enderby
> Date: Tue Nov  1 17:27:22 2011
> New Revision: 143509
>
> URL: http://llvm.org/viewvc/llvm-project?rev=143509&view=rev
> Log:
> First part of support for generating dwarf for assembly source files with the
> -g flag.  In this part we generate the .file for the source being assembled and
> the .loc's for the assembled instructions.
>
> The next part will be to generate the dwarf Compile Unit DIE and a dwarf
> subprogram DIE for each non-temporary label.

Cool!

> Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=143509&r1=143508&r2=143509&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
> +++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Tue Nov  1 17:27:22 2011
> @@ -464,6 +464,14 @@
>     HadError = false;
>     AsmCond StartingCondState = TheCondState;
>
> +  // If we are generating dwarf for assembly source files save the initial text
> +  // section and generate a .file directive.
> +  if (getContext().getGenDwarfForAssembly()) {
> +    getContext().setGenDwarfSection(getStreamer().getCurrentSection());
> +    getStreamer().EmitDwarfFileDirective(getContext().nextGenDwarfFileNumber(),
> +      StringRef(), SrcMgr.getMemoryBuffer(CurBuffer)->getBufferIdentifier());
> +  }
> +
>     // While we have input, parse each statement.
>     while (Lexer.isNot(AsmToken::Eof)) {
>       if (!ParseStatement()) continue;
> @@ -1211,6 +1219,18 @@
>       PrintMessage(IDLoc, SourceMgr::DK_Note, OS.str());
>     }
>
> +  // If we are generating dwarf for assembly source files and the current
> +  // section is the initial text section then generate a .loc directive for
> +  // the instruction.
> +  if (!HadError&&  getContext().getGenDwarfForAssembly()&&
> +      getContext().getGenDwarfSection() == getStreamer().getCurrentSection() ) {
> +    getStreamer().EmitDwarfLocDirective(getContext().getGenDwarfFileNumber(),
> +                                        SrcMgr.FindLineNumber(IDLoc, CurBuffer),
> +                                        0, DWARF2_LINE_DEFAULT_IS_STMT ?
> +					DWARF2_FLAG_IS_STMT : 0, 0, 0,

Tabs.

Nick



More information about the llvm-commits mailing list