[llvm] r352889 - [DWARF v5] Fix DWARF emitter and consumer to produce/expect a uleb for a location description's length.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 4 01:31:28 PST 2019


Merged to 8.0 in r353029.

On Fri, Feb 1, 2019 at 6:11 PM Wolfgang Pieb via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: wolfgangp
> Date: Fri Feb  1 09:11:58 2019
> New Revision: 352889
>
> URL: http://llvm.org/viewvc/llvm-project?rev=352889&view=rev
> Log:
> [DWARF v5] Fix DWARF emitter and consumer to produce/expect a uleb for a location description's length.
>
> Reviewer: davide, JDevliegere
>
> Differential Revision: https://reviews.llvm.org/D57550
>
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>     llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
>     llvm/trunk/test/CodeGen/X86/debug-loclists.ll
>     llvm/trunk/test/DebugInfo/X86/dwarfdump-debug-loclists.test
>     llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_loclists_startx_length.s
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=352889&r1=352888&r2=352889&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Fri Feb  1 09:11:58 2019
> @@ -1978,8 +1978,10 @@ void DebugLocEntry::finalize(const AsmPr
>  void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) {
>    // Emit the size.
>    Asm->OutStreamer->AddComment("Loc expr size");
> -  Asm->emitInt16(DebugLocs.getBytes(Entry).size());
> -
> +  if (getDwarfVersion() >= 5)
> +    Asm->EmitULEB128(DebugLocs.getBytes(Entry).size());
> +  else
> +    Asm->emitInt16(DebugLocs.getBytes(Entry).size());
>    // Emit the entry.
>    APByteStreamer Streamer(*Asm);
>    emitDebugLocEntry(Streamer, Entry);
>
> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp?rev=352889&r1=352888&r2=352889&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp Fri Feb  1 09:11:58 2019
> @@ -183,7 +183,8 @@ DWARFDebugLoclists::parseOneLocationList
>      }
>
>      if (Kind != dwarf::DW_LLE_base_address) {
> -      unsigned Bytes = Data.getU16(Offset);
> +      unsigned Bytes =
> +          Version >= 5 ? Data.getULEB128(Offset) : Data.getU16(Offset);
>        // A single location description describing the location of the object...
>        StringRef str = Data.getData().substr(*Offset, Bytes);
>        *Offset += Bytes;
>
> Modified: llvm/trunk/test/CodeGen/X86/debug-loclists.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/debug-loclists.ll?rev=352889&r1=352888&r2=352889&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/debug-loclists.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/debug-loclists.ll Fri Feb  1 09:11:58 2019
> @@ -11,7 +11,7 @@
>  ; CHECK-NEXT:               DW_AT_type [DW_FORM_ref4]     (cu + 0x0040 => {0x00000040} "A")
>
>  ; CHECK:      .debug_loclists contents:
> -; CHECK-NEXT: 0x00000000: locations list header: length = 0x00000017, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
> +; CHECK-NEXT: 0x00000000: locations list header: length = 0x00000015, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
>  ; CHECK-NEXT: 0x00000000:
>  ; CHECK-NEXT:  [0x0000000000000000, 0x0000000000000004): DW_OP_breg5 RDI+0
>  ; CHECK-NEXT:  [0x0000000000000004, 0x0000000000000012): DW_OP_breg3 RBX+0
> @@ -32,13 +32,13 @@
>  ; ASM-NEXT:  .byte 4                               # DW_LLE_offset_pair
>  ; ASM-NEXT:  .uleb128 .Lfunc_begin0-.Lfunc_begin0  # starting offset
>  ; ASM-NEXT:  .uleb128 .Ltmp0-.Lfunc_begin0         # ending offset
> -; ASM-NEXT:  .short 2                              # Loc expr size
> +; ASM-NEXT:  .byte 2                               # Loc expr size
>  ; ASM-NEXT:  .byte 117                             # DW_OP_breg5
>  ; ASM-NEXT:  .byte 0                               # 0
>  ; ASM-NEXT:  .byte 4                               # DW_LLE_offset_pair
>  ; ASM-NEXT:  .uleb128 .Ltmp0-.Lfunc_begin0         # starting offset
>  ; ASM-NEXT:  .uleb128 .Ltmp1-.Lfunc_begin0         # ending offset
> -; ASM-NEXT:  .short 2                              # Loc expr size
> +; ASM-NEXT:  .byte 2                               # Loc expr size
>  ; ASM-NEXT:  .byte 115                             # DW_OP_breg3
>  ; ASM-NEXT:  .byte 0                               # 0
>  ; ASM-NEXT:  .byte 0                               # DW_LLE_end_of_list
>
> Modified: llvm/trunk/test/DebugInfo/X86/dwarfdump-debug-loclists.test
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dwarfdump-debug-loclists.test?rev=352889&r1=352888&r2=352889&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/dwarfdump-debug-loclists.test (original)
> +++ llvm/trunk/test/DebugInfo/X86/dwarfdump-debug-loclists.test Fri Feb  1 09:11:58 2019
> @@ -9,7 +9,7 @@
>  # CHECK-NEXT:    [0x0000000000000700, 0x0000000000000710): DW_OP_breg5 RDI+0
>
>  # CHECK:      .debug_loclists contents:
> -# CHECK-NEXT: 0x00000000: locations list header: length = 0x0000002f, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
> +# CHECK-NEXT: 0x00000000: locations list header: length = 0x0000002c, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
>  # CHECK-NEXT: 0x00000000:
>  # CHECK-NEXT:   [0x0000000000000000, 0x0000000000000010): DW_OP_breg5 RDI+0
>  # CHECK-NEXT:   [0x0000000000000530, 0x0000000000000540): DW_OP_breg6 RBP-8, DW_OP_deref
> @@ -37,7 +37,7 @@
>    .byte  4                       # DW_LLE_offset_pair
>    .uleb128 0x0                   #   starting offset
>    .uleb128 0x10                  #   ending offset
> -  .short  2                      # Loc expr size
> +  .byte  2                       # Loc expr size
>    .byte  117                     # DW_OP_breg5
>    .byte  0                       # 0
>
> @@ -47,7 +47,7 @@
>    .byte  4                       # DW_LLE_offset_pair
>    .uleb128 0x30                  #   starting offset
>    .uleb128 0x40                  #   ending offset
> -  .short  3                      # Loc expr size
> +  .byte  3                       # Loc expr size
>    .byte  118                     # DW_OP_breg6
>    .byte  120                     # -8
>    .byte  6                       # DW_OP_deref
> @@ -55,7 +55,7 @@
>    .byte  8                       # DW_LLE_start_length
>    .quad  0x700                   # Some address
>    .uleb128 0x10                  #   length
> -  .short  2                      # Loc expr size
> +  .byte  2                       # Loc expr size
>    .byte  117                     # DW_OP_breg5
>    .byte  0                       # 0
>
>
> Modified: llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_loclists_startx_length.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_loclists_startx_length.s?rev=352889&r1=352888&r2=352889&view=diff
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_loclists_startx_length.s (original)
> +++ llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_loclists_startx_length.s Fri Feb  1 09:11:58 2019
> @@ -6,7 +6,7 @@
>  # the final version which uses ULEB128 and not the U32.
>
>  # CHECK:         .debug_loclists contents:
> -# CHECK-NEXT:    0x00000000: locations list header: length = 0x0000000f, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
> +# CHECK-NEXT:    0x00000000: locations list header: length = 0x0000000e, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
>  # CHECK-NEXT:    0x00000000:
>  # CHECK-NEXT:    Addr idx 1 (w/ length 16): DW_OP_reg5 RDI
>
> @@ -21,7 +21,7 @@
>   .byte 3          # DW_LLE_startx_length
>   .byte 0x01       # Index
>   .uleb128 0x10    # Length
> - .short 1         # Loc expr size
> + .byte 1          # Loc expr size
>   .byte 85         # DW_OP_reg5
>   .byte 0          # DW_LLE_end_of_list
>  .Ldebug_loclist_table_end0:
>
>
> _______________________________________________
> 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