[llvm-commits] [llvm] r120760 - in /llvm/trunk: include/llvm/MC/MCContext.h include/llvm/MC/MCDwarf.h lib/MC/MCAsmStreamer.cpp lib/MC/MCDwarf.cpp

Rafael Espíndola rafael.espindola at gmail.com
Thu Dec 2 16:36:15 PST 2010


> It may not be an option to skip .debug_line if there are file reference in already emitted debug info. So, for now, emit dummy line table entry to make older linker and assemblers happy. This is not a new behavior, original AsmPrinter emitted similar line table entries.

This should only be done if the target is know to have a broken linker.

> Modified:
>    llvm/trunk/include/llvm/MC/MCContext.h
>    llvm/trunk/include/llvm/MC/MCDwarf.h
>    llvm/trunk/lib/MC/MCAsmStreamer.cpp
>    llvm/trunk/lib/MC/MCDwarf.cpp
>
> Modified: llvm/trunk/include/llvm/MC/MCContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=120760&r1=120759&r2=120760&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCContext.h (original)
> +++ llvm/trunk/include/llvm/MC/MCContext.h Thu Dec  2 18:10:48 2010
> @@ -180,9 +180,6 @@
>     bool hasDwarfFiles() const {
>       return !MCDwarfFiles.empty();
>     }
> -    bool hasDwarfLines() const {
> -      return !MCLineSectionOrder.empty();
> -    }
>
>     const std::vector<MCDwarfFile *> &getMCDwarfFiles() {
>       return MCDwarfFiles;
>
> Modified: llvm/trunk/include/llvm/MC/MCDwarf.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCDwarf.h?rev=120760&r1=120759&r2=120760&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCDwarf.h (original)
> +++ llvm/trunk/include/llvm/MC/MCDwarf.h Thu Dec  2 18:10:48 2010
> @@ -209,7 +209,8 @@
>     // This emits the Dwarf file and the line tables.
>     //
>     static void Emit(MCStreamer *MCOS, const MCSection *DwarfLineSection,
> -                     MCSectionData *DLS, int PointerSize);
> +                     MCSectionData *DLS, int PointerSize,
> +                     const MCSection *TextSection = NULL);
>   };
>
>   class MCDwarfLineAddr {
>
> Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=120760&r1=120759&r2=120760&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Thu Dec  2 18:10:48 2010
> @@ -885,9 +885,9 @@
>
>  void MCAsmStreamer::Finish() {
>   // Dump out the dwarf file & directory tables and line tables.
> -  if (getContext().hasDwarfFiles() && getContext().hasDwarfLines() && TLOF) {
> +  if (getContext().hasDwarfFiles() && TLOF) {
>     MCDwarfFileTable::Emit(this, TLOF->getDwarfLineSection(), NULL,
> -                           PointerSize);
> +                           PointerSize, TLOF->getTextSection());
>   }
>  }
>
>
> Modified: llvm/trunk/lib/MC/MCDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=120760&r1=120759&r2=120760&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Thu Dec  2 18:10:48 2010
> @@ -241,7 +241,8 @@
>  void MCDwarfFileTable::Emit(MCStreamer *MCOS,
>                             const MCSection *DwarfLineSection,
>                             MCSectionData *DLS,
> -                            int PointerSize) {
> +                            int PointerSize,
> +                            const MCSection *TextSection) {
>   // Switch to the section where the table will be emitted into.
>   MCOS->SwitchSection(DwarfLineSection);
>
> @@ -339,6 +340,23 @@
>     delete Line;
>   }
>
> +  if (TextSection && MCLineSectionOrder.begin() == MCLineSectionOrder.end()) {
> +    // Emit dummy entry if line table is empty.
> +
> +    MCOS->SwitchSection(TextSection);
> +    MCSymbol *SectionEnd = MCOS->getContext().CreateTempSymbol();
> +    // Set the value of the symbol, as we are at the end of the section.
> +    MCOS->EmitLabel(SectionEnd);
> +
> +    // Switch back the the dwarf line section.
> +    MCOS->SwitchSection(DwarfLineSection);
> +
> +    // emit the sequence to set the address
> +    EmitDwarfSetAddress(MCOS, SectionEnd, PointerSize);
> +    // emit the sequence for the LineDelta (from 1) and a zero address delta.
> +    MCDwarfLineAddr::Emit(MCOS, INT64_MAX, 0);
> +  }
> +
>   // This is the end of the section, so set the value of the symbol at the end
>   // of this section (that was used in a previous expression).
>   MCOS->EmitLabel(LineEndSym);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list