[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