[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