[llvm] r373663 - DebugInfo: Generalize rnglist emission as a precursor to reusing it for loclist emission

via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 4 07:50:01 PDT 2019



> -----Original Message-----
> From: llvm-commits <llvm-commits-bounces at lists.llvm.org> On Behalf Of
> David Blaikie via llvm-commits
> Sent: Thursday, October 03, 2019 4:56 PM
> To: llvm-commits at lists.llvm.org
> Subject: [llvm] r373663 - DebugInfo: Generalize rnglist emission as a
> precursor to reusing it for loclist emission
> 
> Author: dblaikie
> Date: Thu Oct  3 13:56:23 2019
> New Revision: 373663
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=373663&view=rev
> Log:
> DebugInfo: Generalize rnglist emission as a precursor to reusing it for
> loclist emission
> 
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=373663&r1=373
> 662&r2=373663&view=diff
> ==========================================================================
> ====
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Thu Oct  3 13:56:23
> 2019
> @@ -2556,23 +2556,24 @@ void DwarfDebug::emitDebugARanges() {
>    }
>  }
> 
> -/// Emit a single range list. We handle both DWARF v5 and earlier.
> -static void emitRangeList(DwarfDebug &DD, AsmPrinter *Asm,
> -                          const RangeSpanList &List) {
> -
> +template <typename Ranges>
> +static void emitRangeList(DwarfDebug &DD, AsmPrinter *Asm, MCSymbol *Sym,
> +                          const Ranges &R, const DwarfCompileUnit &CU,
> +                          unsigned BaseAddressx, unsigned OffsetPair,
> +                          unsigned StartxLength, unsigned EndOfList,
> +                          StringRef (*StringifyEnum)(unsigned)) {
>    auto DwarfVersion = DD.getDwarfVersion();
>    // Emit our symbol so we can find the beginning of the range.
> -  Asm->OutStreamer->EmitLabel(List.getSym());
> +  Asm->OutStreamer->EmitLabel(Sym);
>    // Gather all the ranges that apply to the same section so they can
> share
>    // a base address entry.
>    MapVector<const MCSection *, std::vector<const RangeSpan *>>
> SectionRanges;
>    // Size for our labels.
>    auto Size = Asm->MAI->getCodePointerSize();
> 
> -  for (const RangeSpan &Range : List.getRanges())
> +  for (const RangeSpan &Range : R)
>      SectionRanges[&Range.Begin->getSection()].push_back(&Range);
> 
> -  const DwarfCompileUnit &CU = List.getCU();
>    const MCSymbol *CUBase = CU.getBaseAddress();
>    bool BaseIsSet = false;
>    for (const auto &P : SectionRanges) {
> @@ -2588,8 +2589,8 @@ static void emitRangeList(DwarfDebug &DD
>        BaseIsSet = true;
>        Base = DD.getSectionLabel(&P.second.front()->Begin->getSection());
>        if (DwarfVersion >= 5) {
> -        Asm->OutStreamer->AddComment("DW_RLE_base_addressx");
> -        Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_base_addressx, 1);
> +        Asm->OutStreamer->AddComment(StringifyEnum(BaseAddressx));
> +        Asm->OutStreamer->EmitIntValue(BaseAddressx, 1);
>          Asm->OutStreamer->AddComment("  base address index");
>          Asm->EmitULEB128(DD.getAddressPool().getIndex(Base));
>        } else {
> @@ -2612,8 +2613,8 @@ static void emitRangeList(DwarfDebug &DD
>        if (Base) {
>          if (DwarfVersion >= 5) {
>            // Emit DW_RLE_offset_pair when we have a base.

This comment should also go, or be rephrased.
--paulr

> -          Asm->OutStreamer->AddComment("DW_RLE_offset_pair");
> -          Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_offset_pair, 1);
> +          Asm->OutStreamer->AddComment(StringifyEnum(OffsetPair));
> +          Asm->emitInt8(OffsetPair);
>            Asm->OutStreamer->AddComment("  starting offset");
>            Asm->EmitLabelDifferenceAsULEB128(Begin, Base);
>            Asm->OutStreamer->AddComment("  ending offset");
> @@ -2623,8 +2624,8 @@ static void emitRangeList(DwarfDebug &DD
>            Asm->EmitLabelDifference(End, Base, Size);
>          }
>        } else if (DwarfVersion >= 5) {
> -        Asm->OutStreamer->AddComment("DW_RLE_startx_length");
> -        Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_startx_length, 1);
> +        Asm->OutStreamer->AddComment(StringifyEnum(StartxLength));
> +        Asm->emitInt8(StartxLength);
>          Asm->OutStreamer->AddComment("  start index");
>          Asm->EmitULEB128(DD.getAddressPool().getIndex(Begin));
>          Asm->OutStreamer->AddComment("  length");
> @@ -2636,8 +2637,8 @@ static void emitRangeList(DwarfDebug &DD
>      }
>    }
>    if (DwarfVersion >= 5) {
> -    Asm->OutStreamer->AddComment("DW_RLE_end_of_list");
> -    Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_end_of_list, 1);
> +    Asm->OutStreamer->AddComment(StringifyEnum(EndOfList));
> +    Asm->emitInt8(EndOfList);
>    } else {
>      // Terminate the list with two 0 values.
>      Asm->OutStreamer->EmitIntValue(0, Size);
> @@ -2645,6 +2646,15 @@ static void emitRangeList(DwarfDebug &DD
>    }
>  }
> 
> +/// Emit a single range list. We handle both DWARF v5 and earlier.
> +static void emitRangeList(DwarfDebug &DD, AsmPrinter *Asm,
> +                          const RangeSpanList &List) {
> +  emitRangeList(DD, Asm, List.getSym(), List.getRanges(), List.getCU(),
> +                dwarf::DW_RLE_base_addressx, dwarf::DW_RLE_offset_pair,
> +                dwarf::DW_RLE_startx_length, dwarf::DW_RLE_end_of_list,
> +                llvm::dwarf::RangeListEncodingString);
> +}
> +
>  static void emitDebugRangesImpl(DwarfDebug &DD, AsmPrinter *Asm,
>                                  const DwarfFile &Holder, MCSymbol
> *TableEnd) {
>    for (const RangeSpanList &List : Holder.getRangeLists())
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list