[llvm] r285355 - Update .debug_line section version information to match DWARF version.

Ekaterina Romanova via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 27 15:37:26 PDT 2016


Author: kromanova
Date: Thu Oct 27 17:37:25 2016
New Revision: 285355

URL: http://llvm.org/viewvc/llvm-project?rev=285355&view=rev
Log:
Update .debug_line section version information to match DWARF version.

In the past the compiler always emitted .debug_line version 2, though some opcodes from DWARF 3 (e.g. DW_LNS_set_prologue_end, DW_LNS_set_epilogue_begin or DW_LNS_set_isa) and from DWARF 4 could be emitted by the compiler. 

This patch changes version information of .debug_line to exactly match the DWARF version. For .debug_line version 4, a new field maximum_operations_per_instruction is emitted. 

Differential Revision: https://reviews.llvm.org/D16697


Added:
    llvm/trunk/test/DebugInfo/X86/debug-line-version.s
Modified:
    llvm/trunk/lib/MC/MCDwarf.cpp
    llvm/trunk/test/DebugInfo/AArch64/line-header.ll
    llvm/trunk/test/DebugInfo/Generic/empty.ll
    llvm/trunk/test/DebugInfo/X86/empty.ll
    llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll
    llvm/trunk/test/MC/ELF/debug-line.s
    llvm/trunk/test/MC/ELF/debug-line2.s
    llvm/trunk/test/MC/ELF/debug-loc.s
    llvm/trunk/test/MC/ELF/discriminator.s
    llvm/trunk/test/MC/ELF/empty-dwarf-lines.s
    llvm/trunk/test/MC/MachO/file.s
    llvm/trunk/test/MC/MachO/gen-dwarf.s
    llvm/trunk/test/MC/MachO/loc.s

Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Thu Oct 27 17:37:25 2016
@@ -263,8 +263,8 @@ MCDwarfLineTableHeader::Emit(MCStreamer
   emitAbsValue(*MCOS,
                MakeStartMinusEndExpr(*MCOS, *LineStartSym, *LineEndSym, 4), 4);
 
-  // Next 2 bytes is the Version, which is Dwarf 2.
-  MCOS->EmitIntValue(2, 2);
+  // Next 2 bytes is the Version.
+  MCOS->EmitIntValue(context.getDwarfVersion(), 2);
 
   // Create a symbol for the end of the prologue (to be set when we get there).
   MCSymbol *ProEndSym = context.createTempSymbol(); // Lprologue_end
@@ -279,6 +279,11 @@ MCDwarfLineTableHeader::Emit(MCStreamer
 
   // Parameters of the state machine, are next.
   MCOS->EmitIntValue(context.getAsmInfo()->getMinInstAlignment(), 1);
+  // maximum_operations_per_instruction 
+  // For non-VLIW architectures this field is always 1.
+  // FIXME: VLIW architectures need to update this field accordingly.
+  if (context.getDwarfVersion() >= 4)
+    MCOS->EmitIntValue(1, 1);
   MCOS->EmitIntValue(DWARF2_LINE_DEFAULT_IS_STMT, 1);
   MCOS->EmitIntValue(Params.DWARF2LineBase, 1);
   MCOS->EmitIntValue(Params.DWARF2LineRange, 1);

Modified: llvm/trunk/test/DebugInfo/AArch64/line-header.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/AArch64/line-header.ll?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/AArch64/line-header.ll (original)
+++ llvm/trunk/test/DebugInfo/AArch64/line-header.ll Thu Oct 27 17:37:25 2016
@@ -3,4 +3,4 @@
 
 ; check line table length is correctly calculated for both big and little endian
 CHECK-LABEL: .debug_line contents:
-CHECK: total_length: 0x0000003c
+CHECK: total_length: 0x0000003d

Modified: llvm/trunk/test/DebugInfo/Generic/empty.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/empty.ll?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/Generic/empty.ll (original)
+++ llvm/trunk/test/DebugInfo/Generic/empty.ll Thu Oct 27 17:37:25 2016
@@ -9,7 +9,7 @@
 ; Expect no line table entry since there are no functions and file references in this compile unit
 ; CHECK: .debug_line contents:
 ; CHECK: Line table prologue:
-; CHECK: total_length: 0x00000019
+; CHECK: total_length: 0x0000001a
 ; CHECK-NOT: file_names[
 
 ; CHECK: .debug_pubnames contents:

Added: llvm/trunk/test/DebugInfo/X86/debug-line-version.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-line-version.s?rev=285355&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/debug-line-version.s (added)
+++ llvm/trunk/test/DebugInfo/X86/debug-line-version.s Thu Oct 27 17:37:25 2016
@@ -0,0 +1,39 @@
+// RUN: llvm-mc -g -dwarf-version 2 -triple  i686-pc-linux-gnu %s -filetype=obj -o - | llvm-dwarfdump - | FileCheck --check-prefix=DWARF2 %s
+// RUN: llvm-mc -g -dwarf-version 3 -triple  i686-pc-linux-gnu %s -filetype=obj -o -  |llvm-dwarfdump - | FileCheck --check-prefix=DWARF3 %s
+// RUN: llvm-mc -g -dwarf-version 4 -triple  i686-pc-linux-gnu %s -filetype=obj -o - | llvm-dwarfdump - | FileCheck  --check-prefix=DWARF4 %s
+
+
+// Check that we generate debug_line version that matches the dwarf version.
+// For DWARF-4, additionally check that maximum_operations_per_instruction
+// field is emitted.
+
+    .text
+    .globl foo
+    .type foo, @function
+    .align 4
+foo:
+    ret
+    .size foo, .-foo
+
+// DWARF2: Compile Unit: length = {{.*}} version = 0x0002
+// DWARF2: Line table prologue:
+// DWARF2-NEXT:    total_length: 0x00000077
+// DWARF2-NEXT:         version: 2
+// DWARF2-NEXT: prologue_length: 0x00000062
+// DWARF2-NOT: max_ops_per_inst: 1
+
+// DWARF3: Compile Unit: length = {{.*}} version = 0x0003
+// DWARF3: Line table prologue:
+// DWARF3-NEXT:    total_length: 0x00000077
+// DWARF3-NEXT:         version: 3
+// DWARF3-NEXT: prologue_length: 0x00000062
+// DWARF3-NOT: max_ops_per_inst: 1
+
+
+// DWARF4: Compile Unit: length = {{.*}} version = 0x0004
+// DWARF4: Line table prologue:
+// DWARF4-NEXT:    total_length: 0x00000078
+// DWARF4-NEXT:         version: 4
+// DWARF4-NEXT: prologue_length: 0x00000063
+// DWARF4: max_ops_per_inst: 1
+

Modified: llvm/trunk/test/DebugInfo/X86/empty.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/empty.ll?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/empty.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/empty.ll Thu Oct 27 17:37:25 2016
@@ -4,7 +4,7 @@
 ; Expect no line table entry since there are no functions and file references in this compile unit
 ; CHECK: .debug_line contents:
 ; CHECK: Line table prologue:
-; CHECK: total_length: 0x00000019
+; CHECK: total_length: 0x0000001a
 ; CHECK-NOT: file_names[
 
 ; CHECK: .debug_pubnames contents:

Modified: llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll Thu Oct 27 17:37:25 2016
@@ -15,7 +15,7 @@
 ; CHECK: DW_AT_high_pc [DW_FORM_data4]          (0x00000010)
 
 ; CHECK: DW_TAG_compile_unit
-; CHECK: DW_AT_stmt_list [DW_FORM_sec_offset]   (0x0000003c)
+; CHECK: DW_AT_stmt_list [DW_FORM_sec_offset]   (0x0000003d)
 ; CHECK: DW_AT_low_pc [DW_FORM_addr]            (0x0000000000000010)
 ; CHECK: DW_AT_high_pc [DW_FORM_data4]          (0x00000009)
 ; CHECK: DW_TAG_subprogram
@@ -25,10 +25,10 @@
 
 ; CHECK: .debug_line contents:
 ; CHECK-NEXT: Line table prologue:
-; CHECK-NEXT: total_length: 0x00000038
+; CHECK-NEXT: total_length: 0x00000039
 ; CHECK: file_names[  1]    0 0x00000000 0x00000000 simple.c
 ; CHECK: Line table prologue:
-; CHECK-NEXT: total_length: 0x00000039
+; CHECK-NEXT: total_length: 0x0000003a
 ; CHECK: file_names[  1]    0 0x00000000 0x00000000 simple2.c
 ; CHECK-NOT: file_names
 

Modified: llvm/trunk/test/MC/ELF/debug-line.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/debug-line.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/debug-line.s (original)
+++ llvm/trunk/test/MC/ELF/debug-line.s Thu Oct 27 17:37:25 2016
@@ -18,17 +18,17 @@
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset:
-// CHECK-NEXT:     Size: 57
+// CHECK-NEXT:     Size: 58
 // CHECK-NEXT:     Link: 0
 // CHECK-NEXT:     Info: 0
 // CHECK-NEXT:     AddressAlignment: 1
 // CHECK-NEXT:     EntrySize: 0
 // CHECK-NEXT:     SectionData (
 
-// CHECK-NEXT:       0000: 35000000 02001C00 00000101 FB0E0D00
-// CHECK-NEXT:       0010: 01010101 00000001 00000100 666F6F2E
-// CHECK-NEXT:       0020: 63000000 00000009 02000000 00000000
-// CHECK-NEXT:       0030: 00154B21 02080001 01
+// CHECK-NEXT:       0000: 36000000 04001D00 00000101 01FB0E0D
+// CHECK-NEXT:       0010: 00010101 01000000 01000001 00666F6F  
+// CHECK-NEXT:       0020: 2E630000 00000000 09020000 00000000  
+// CHECK-NEXT:       0030: 0000154B 21020800 0101              
 // CHECK-NEXT:     )
 // CHECK-NEXT:   }
 

Modified: llvm/trunk/test/MC/ELF/debug-line2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/debug-line2.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/debug-line2.s (original)
+++ llvm/trunk/test/MC/ELF/debug-line2.s Thu Oct 27 17:37:25 2016
@@ -10,16 +10,16 @@
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset:
-// CHECK-NEXT:     Size: 56
+// CHECK-NEXT:     Size: 57
 // CHECK-NEXT:     Link: 0
 // CHECK-NEXT:     Info: 0
 // CHECK-NEXT:     AddressAlignment: 1
 // CHECK-NEXT:     EntrySize: 0
 // CHECK-NEXT:     SectionData (
-// CHECK-NEXT:       0000: 34000000 02001C00 00000101 FB0E0D00
-// CHECK-NEXT:       0010: 01010101 00000001 00000100 666F6F2E
-// CHECK-NEXT:       0020: 63000000 00000009 02000000 00000000
-// CHECK-NEXT:       0030: 00011302 01000101
+// CHECK-NEXT:      0000: 35000000 04001D00 00000101 01FB0E0D  |5...............|
+// CHECK-NEXT:      0010: 00010101 01000000 01000001 00666F6F  |.............foo|
+// CHECK-NEXT:      0020: 2E630000 00000000 09020000 00000000  |.c..............|
+// CHECK-NEXT:      0030: 00000113 02010001 01                 |.........|
 // CHECK-NEXT:     )
 // CHECK-NEXT:   }
 

Modified: llvm/trunk/test/MC/ELF/debug-loc.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/debug-loc.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/debug-loc.s (original)
+++ llvm/trunk/test/MC/ELF/debug-loc.s Thu Oct 27 17:37:25 2016
@@ -15,7 +15,7 @@
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset:
-// CHECK-NEXT:     Size: 61
+// CHECK-NEXT:     Size: 62
 // CHECK-NEXT:     Link: 0
 // CHECK-NEXT:     Info: 0
 // CHECK-NEXT:     AddressAlignment: 1

Modified: llvm/trunk/test/MC/ELF/discriminator.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/discriminator.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/discriminator.s (original)
+++ llvm/trunk/test/MC/ELF/discriminator.s Thu Oct 27 17:37:25 2016
@@ -53,7 +53,7 @@ foo:
 
 # CHECK:      Relocations [
 # CHECK:        Section ({{[^ ]+}}) .rel.debug_line {
-# CHECK-NEXT:     0x2D R_386_32 .text 0x0
+# CHECK-NEXT:     0x2E R_386_32 .text 0x0
 # CHECK-NEXT:   }
 
 # DWARF-DUMP: Address            Line   Column File   ISA Discriminator Flags

Modified: llvm/trunk/test/MC/ELF/empty-dwarf-lines.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/empty-dwarf-lines.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/empty-dwarf-lines.s (original)
+++ llvm/trunk/test/MC/ELF/empty-dwarf-lines.s Thu Oct 27 17:37:25 2016
@@ -15,7 +15,7 @@ c:
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset: 0x44
-// CHECK-NEXT:     Size: 39
+// CHECK-NEXT:     Size: 40
 // CHECK-NEXT:     Link: 0
 // CHECK-NEXT:     Info: 0
 // CHECK-NEXT:     AddressAlignment: 1

Modified: llvm/trunk/test/MC/MachO/file.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/file.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/file.s (original)
+++ llvm/trunk/test/MC/MachO/file.s Thu Oct 27 17:37:25 2016
@@ -8,7 +8,7 @@
 // CHECK-NEXT:    Name: __debug_line
 // CHECK-NEXT:    Segment: __DWARF
 // CHECK-NEXT:    Address: 0x1
-// CHECK-NEXT:    Size: 0x28
+// CHECK-NEXT:    Size: 0x29
 // CHECK-NEXT:    Offset: 237
 // CHECK-NEXT:    Alignment: 0
 // CHECK-NEXT:    RelocationOffset: 0x0
@@ -20,8 +20,8 @@
 // CHECK-NEXT:    Reserved1: 0x0
 // CHECK-NEXT:    Reserved2: 0x0
 // CHECK-NEXT:    SectionData (
-// CHECK-NEXT:      0000: 24000000 02001E00 00000101 FB0E0D00
-// CHECK-NEXT:      0010: 01010101 00000001 00000164 69720000
-// CHECK-NEXT:      0020: 666F6F00 01000000
+// CHECK-NEXT:      0000: 25000000 04001F00 00000101 01FB0E0D  |%...............|
+// CHECK-NEXT:      0010: 00010101 01000000 01000001 64697200  |............dir.|
+// CHECK-NEXT:      0020: 00666F6F 00010000 00                 |.foo.....|
 // CHECK-NEXT:    )
 // CHECK-NEXT:  }

Modified: llvm/trunk/test/MC/MachO/gen-dwarf.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/gen-dwarf.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/gen-dwarf.s (original)
+++ llvm/trunk/test/MC/MachO/gen-dwarf.s Thu Oct 27 17:37:25 2016
@@ -89,7 +89,7 @@ _x:	.long 1
 // CHECK: .debug_line contents:
 // CHECK: Line table prologue:
 // We don't check the total_length as it includes lengths of temp paths
-// CHECK:         version: 2
+// CHECK:         version: 4
 // We don't check the prologue_length as it too includes lengths of temp paths
 // CHECK: min_inst_length: 1
 // CHECK: default_is_stmt: 1

Modified: llvm/trunk/test/MC/MachO/loc.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/loc.s?rev=285355&r1=285354&r2=285355&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/loc.s (original)
+++ llvm/trunk/test/MC/MachO/loc.s Thu Oct 27 17:37:25 2016
@@ -9,10 +9,10 @@
 // CHECK:     Name: __debug_line (5F 5F 64 65 62 75 67 5F 6C 69 6E 65 00 00 00 00)
 // CHECK:     Segment: __DWARF (5F 5F 44 57 41 52 46 00 00 00 00 00 00 00 00 00)
 // CHECK:     Address: 0x1
-// CHECK:     Size: 0x33
+// CHECK:     Size: 0x34
 // CHECK:     Offset: 237
 // CHECK:     Alignment: 0
-// CHECK:     RelocationOffset: 0x120
+// CHECK:     RelocationOffset: 0x124
 // CHECK:     RelocationCount: 1
 // CHECK:     Type: 0x0
 // CHECK:     Attributes [ (0x20000)
@@ -21,15 +21,15 @@
 // CHECK:     Reserved1: 0x0
 // CHECK:     Reserved2: 0x0
 // CHECK:     SectionData (
-// CHECK:       0000: 2F000000 02001A00 00000101 FB0E0D00  |/...............|
-// CHECK:       0010: 01010101 00000001 00000100 666F6F00  |............foo.|
-// CHECK:       0020: 00000000 00050200 00000003 3F010201  |............?...|
-// CHECK:       0030: 000101                               |...|
+// CHECK:       0000: 30000000 04001B00 00000101 01FB0E0D  |0...............|
+// CHECK:       0010: 00010101 01000000 01000001 00666F6F  |.............foo|
+// CHECK:       0020: 00000000 00000502 00000000 033F0102  |.............?..|
+// CHECK:       0030: 01000101   
 // CHECK:     )
 // CHECK:   }
 // CHECK: ]
 // CHECK: Relocations [
 // CHECK:   Section __debug_line {
-// CHECK:     0x27 0 2 0 GENERIC_RELOC_VANILLA 0 __text
+// CHECK:     0x28 0 2 0 GENERIC_RELOC_VANILLA 0 __text
 // CHECK:   }
 // CHECK: ]




More information about the llvm-commits mailing list