Higuoxing created this revision.
Higuoxing added reviewers: jhenderson, grimar, MaskRay.
Herald added subscribers: llvm-commits, lldb-commits, cmtice, hiraditya, 
aprantl, emaste.
Herald added a reviewer: espindola.
Herald added a reviewer: alexshap.
Herald added a reviewer: rupprecht.
Herald added projects: LLDB, LLVM.
Higuoxing added a parent revision: D82621: [DWARFYAML][debug_info] Teach 
yaml2obj emit correct DWARF64 unit header..
Higuoxing edited the summary of this revision.

'InitialLength' is replaced with 'Format' (DWARF32 by default) and 'Length' in 
this patch.
Besides, test cases for DWARFv4 and DWARFv5, DWARF32 and DWARF64 is
added.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82622

Files:
  lldb/test/API/functionalities/source-map/a.yaml
  lldb/unittests/Expression/DWARFExpressionTest.cpp
  lldb/unittests/Symbol/Inputs/inlined-functions.yaml
  lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
  llvm/include/llvm/ObjectYAML/DWARFYAML.h
  llvm/lib/ObjectYAML/DWARFEmitter.cpp
  llvm/lib/ObjectYAML/DWARFVisitor.cpp
  llvm/lib/ObjectYAML/DWARFYAML.cpp
  llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
  llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml
  llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
  llvm/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
  llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
  llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
  llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
  llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
  llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
  llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
  llvm/tools/obj2yaml/dwarf2yaml.cpp
  llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
  llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp
  llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp

Index: llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp
===================================================================
--- llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp
+++ llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp
@@ -1437,8 +1437,7 @@
         - Attribute:       DW_AT_high_pc
           Form:            DW_FORM_addr
   debug_info:
-    - Length:
-        TotalLength:     52
+    - Length:          52
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -1517,8 +1516,7 @@
         - Attribute:       DW_AT_high_pc
           Form:            DW_FORM_data4
   debug_info:
-    - Length:
-        TotalLength:     44
+    - Length:          44
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -1617,8 +1615,7 @@
         - Attribute:       DW_AT_artificial
           Form:            DW_FORM_flag_present
   debug_info:
-    - Length:
-        TotalLength:     68
+    - Length:          68
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -1722,8 +1719,7 @@
         - Attribute:       DW_AT_high_pc
           Form:            DW_FORM_data4
   debug_info:
-    - Length:
-        TotalLength:     78
+    - Length:          78
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -1836,8 +1832,7 @@
         - Attribute:       DW_AT_call_line
           Form:            DW_FORM_data4
   debug_info:
-    - Length:
-        TotalLength:     74
+    - Length:          74
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -2092,8 +2087,7 @@
         - Attribute:       DW_AT_decl_line
           Form:            DW_FORM_data1
   debug_info:
-    - Length:
-        TotalLength:     103
+    - Length:          103
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -2299,7 +2293,6 @@
   //
   // 0x0000004e:   NULL
 
-
   StringRef yamldata = R"(
   debug_str:
     - ''
@@ -2342,8 +2335,7 @@
         - Attribute:       DW_AT_high_pc
           Form:            DW_FORM_addr
   debug_info:
-    - Length:
-        TotalLength:     75
+    - Length:          75
       Version:         4
       AbbrOffset:      0
       AddrSize:        4
@@ -2485,8 +2477,7 @@
         - Attribute:       DW_AT_high_pc
           Form:            DW_FORM_addr
   debug_info:
-    - Length:
-        TotalLength:     103
+    - Length:          103
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp
===================================================================
--- llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp
+++ llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp
@@ -34,8 +34,7 @@
           - Attribute:       DW_AT_call_data_location
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     0
+      - Length:          0
         Version:         5
         UnitType:        DW_UT_compile
         AbbrOffset:      0
Index: llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
===================================================================
--- llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
+++ llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
@@ -1368,8 +1368,7 @@
                          "    Children:        DW_CHILDREN_yes\n"
                          "    Attributes:\n"
                          "debug_info:\n"
-                         "  - Length:\n"
-                         "      TotalLength:          0\n"
+                         "  - Length:          0\n"
                          "    Version:         4\n"
                          "    AbbrOffset:      0\n"
                          "    AddrSize:        8\n"
@@ -1902,8 +1901,7 @@
           - Attribute:       DW_AT_type
             Form:            DW_FORM_ref4
     debug_info:
-      - Length:
-          TotalLength:     22
+      - Length:          22
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -1951,8 +1949,7 @@
           - Attribute:       DW_AT_type
             Form:            DW_FORM_ref_addr
     debug_info:
-      - Length:
-          TotalLength:     22
+      - Length:          22
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -1992,8 +1989,7 @@
           - Attribute:       DW_AT_ranges
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2030,8 +2026,7 @@
           - Attribute:       DW_AT_ranges
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     17
+      - Length:          17
         Version:         5
         UnitType:        DW_UT_compile
         AbbrOffset:      0
@@ -2068,8 +2063,7 @@
           - Attribute:       DW_AT_stmt_list
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2103,8 +2097,7 @@
           - Attribute:       DW_AT_name
             Form:            DW_FORM_strp
     debug_info:
-      - Length:
-          TotalLength:     12
+      - Length:          12
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2145,8 +2138,7 @@
           - Attribute:       DW_AT_type
             Form:            DW_FORM_ref_addr
     debug_info:
-      - Length:
-          TotalLength:     22
+      - Length:          22
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2187,8 +2179,7 @@
           - Attribute:       DW_AT_stmt_list
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2256,8 +2247,7 @@
           - Attribute:       DW_AT_stmt_list
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2327,8 +2317,7 @@
           - Attribute:       DW_AT_stmt_list
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2399,8 +2388,7 @@
           - Attribute:       DW_AT_stmt_list
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2476,8 +2464,7 @@
           - Attribute:       DW_AT_stmt_list
             Form:            DW_FORM_sec_offset
     debug_info:
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2486,8 +2473,7 @@
             Values:
               - Value:           0x0000000000000001
               - Value:           0x0000000000000000
-      - Length:
-          TotalLength:     16
+      - Length:          16
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2603,8 +2589,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     46
+      - Length:          46
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2663,8 +2648,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     52
+      - Length:          52
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2721,8 +2705,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     55
+      - Length:          55
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2788,8 +2771,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     85
+      - Length:          85
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2850,8 +2832,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     34
+      - Length:          34
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2907,8 +2888,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     71
+      - Length:          71
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
@@ -2970,8 +2950,7 @@
           - Attribute:       DW_AT_high_pc
             Form:            DW_FORM_addr
     debug_info:
-      - Length:
-          TotalLength:     73
+      - Length:          73
         Version:         4
         AbbrOffset:      0
         AddrSize:        8
Index: llvm/tools/obj2yaml/dwarf2yaml.cpp
===================================================================
--- llvm/tools/obj2yaml/dwarf2yaml.cpp
+++ llvm/tools/obj2yaml/dwarf2yaml.cpp
@@ -165,7 +165,8 @@
 void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {
   for (const auto &CU : DCtx.compile_units()) {
     DWARFYAML::Unit NewUnit;
-    NewUnit.Length.setLength(CU->getLength());
+    NewUnit.Format = CU->getFormat();
+    NewUnit.Length = CU->getLength();
     NewUnit.Version = CU->getVersion();
     if(NewUnit.Version >= 5)
       NewUnit.Type = (dwarf::UnitType)CU->getUnitType();
Index: llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
===================================================================
--- llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
+++ llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
@@ -200,8 +200,7 @@
         - Attribute: 0x01
           Form:      DW_FORM_addrx4         ## 0x2c
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -262,8 +261,7 @@
             - Value: 0x1234             ## DW_FORM_addrx2
             - Value: 0x123456           ## DW_FORM_addrx3 (unimplemented)
             - Value: 0x12345678         ## DW_FORM_addrx4
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       ## Test another unit type.
       UnitType:   DW_UT_compile
@@ -272,8 +270,7 @@
       Entries:
         - AbbrCode: 0
           Values:   []
-    - Length:
-        TotalLength: 0x5678
+    - Length:     0x5678
       ## Test DWARFv4
       Version:    4
       AbbrOffset: 0x5678
@@ -440,8 +437,7 @@
       Children:   DW_CHILDREN_no
       Attributes: []
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -470,8 +466,7 @@
       Children:   DW_CHILDREN_no
       Attributes: []
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -539,8 +534,7 @@
       Children:   DW_CHILDREN_no
       Attributes: []
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -568,8 +562,7 @@
   Machine: EM_X86_64
 DWARF:
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -620,8 +613,7 @@
         - Attribute: DW_AT_high_pc
           Form:      DW_FORM_data4
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -659,8 +651,7 @@
   Machine: EM_X86_64
 DWARF:
   debug_info:
-    - Length:
-        TotalLength: 0x1234
+    - Length:     0x1234
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -695,9 +686,8 @@
   Machine: EM_X86_64
 DWARF:
   debug_info:
-    - Length:
-        TotalLength:   0xffffffff
-        TotalLength64: 0x0c
+    - Format:     DWARF64
+      Length:     0x0c
       Version:    5
       UnitType:   DW_UT_type
       AbbrOffset: 0x1234
@@ -727,9 +717,8 @@
   Machine: EM_X86_64
 DWARF:
   debug_info:
-    - Length:
-        TotalLength:   0xffffffff
-        TotalLength64: 0x0c
+    - Format:     DWARF64
+      Length:     0x0c
       Version:    4
       AbbrOffset: 0x1234
       AddrSize:   8
Index: llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
===================================================================
--- llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
+++ llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
@@ -391,8 +391,7 @@
         - Attribute:       DW_AT_external
           Form:            DW_FORM_flag_present
   debug_info:
-    - Length:
-        TotalLength:     113
+    - Length:          113
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
===================================================================
--- llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
+++ llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
@@ -574,8 +574,7 @@
       - DieOffset:       0x000000D8
         Name:            char
   debug_info:
-    - Length:
-        TotalLength:     220
+    - Length:          220
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
===================================================================
--- llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
+++ llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
@@ -407,8 +407,7 @@
           - DieOffset:       0x0000006F
             Name:            char
       debug_info:
-        - Length:
-            TotalLength:     115
+        - Length:          115
           Version:         4
           AbbrOffset:      0
           AddrSize:        4
@@ -886,8 +885,7 @@
           - DieOffset:       0x00000076
             Name:            char
       debug_info:
-        - Length:
-            TotalLength:     122
+        - Length:          122
           Version:         4
           AbbrOffset:      0
           AddrSize:        8
Index: llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
===================================================================
--- llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
+++ llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
@@ -223,8 +223,7 @@
         - LowOffset:       0x0000000000001000
           HighOffset:      0x0000000000002000
   debug_info:
-    - Length:
-        TotalLength:     99
+    - Length:          99
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
===================================================================
--- llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
+++ llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml
@@ -1,4 +1,10 @@
-# RUN: yaml2obj %s | obj2yaml | FileCheck %s
+## This file contains test cases for generating .debug_info
+## section in object files from the DWARF entry of Mach-O YAML inputs.
+
+## a) Test that yaml2obj emits a DWARF32 .debug_info sections and obj2yaml
+## converts it back.
+
+# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s --check-prefix=DWARF32
 
 --- !mach-o
 FileHeader:      
@@ -384,8 +390,7 @@
         - Address:         0x0000000100000F50
           Length:          52
   debug_info:      
-    - Length:          
-        TotalLength:     118
+    - Length:          118
       Version:         5
       UnitType:        DW_UT_compile
       AbbrOffset:      0
@@ -507,69 +512,190 @@
 ...
 
 
-#CHECK: DWARF:           
-#CHECK:   debug_info:      
-#CHECK:     - Length:          
-#CHECK:         TotalLength:     118
-#CHECK:       Version:         5
-#CHECK:       UnitType:        DW_UT_compile
-#CHECK:       AbbrOffset:      0
-#CHECK:       AddrSize:        8
-#CHECK:       Entries:         
-#CHECK:         - AbbrCode:        0x00000001
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x000000000000000C
-#CHECK:             - Value:           0x0000000000000038
-#CHECK:             - Value:           0x0000000000000000
-#CHECK:             - Value:           0x0000000000000046
-#CHECK:             - Value:           0x0000000100000F50
-#CHECK:             - Value:           0x0000000000000034
-#CHECK:         - AbbrCode:        0x00000002
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000100000F50
-#CHECK:             - Value:           0x0000000000000034
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:               BlockData:       [ 0x56 ]
-#CHECK:             - Value:           0x0000000000000076
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000003
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000060
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:         - AbbrCode:        0x00000003
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000002
-#CHECK:               BlockData:       [ 0x91, 0x78 ]
-#CHECK:             - Value:           0x000000000000007B
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000003
-#CHECK:             - Value:           0x0000000000000060
-#CHECK:         - AbbrCode:        0x00000003
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000002
-#CHECK:               BlockData:       [ 0x91, 0x70 ]
-#CHECK:             - Value:           0x0000000000000080
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000003
-#CHECK:             - Value:           0x0000000000000067
-#CHECK:         - AbbrCode:        0x00000000
-#CHECK:           Values:          
-#CHECK:         - AbbrCode:        0x00000004
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000085
-#CHECK:             - Value:           0x0000000000000005
-#CHECK:             - Value:           0x0000000000000004
-#CHECK:         - AbbrCode:        0x00000005
-#CHECK:           Values:          
-#CHECK:             - Value:           0x000000000000006C
-#CHECK:         - AbbrCode:        0x00000005
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000071
-#CHECK:         - AbbrCode:        0x00000004
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000089
-#CHECK:             - Value:           0x0000000000000006
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:         - AbbrCode:        0x00000000
-#CHECK:           Values:          
+#      DWARF32: debug_info:
+# DWARF32-NEXT:   - Length:     118
+# DWARF32-NEXT:     Version:    5
+# DWARF32-NEXT:     UnitType:   DW_UT_compile
+# DWARF32-NEXT:     AbbrOffset: 0
+# DWARF32-NEXT:     AddrSize:   8
+# DWARF32-NEXT:     Entries:
+# DWARF32-NEXT:       - AbbrCode: 0x00000001
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x000000000000000C
+# DWARF32-NEXT:           - Value: 0x0000000000000038
+# DWARF32-NEXT:           - Value: 0x0000000000000000
+# DWARF32-NEXT:           - Value: 0x0000000000000046
+# DWARF32-NEXT:           - Value: 0x0000000100000F50
+# DWARF32-NEXT:           - Value: 0x0000000000000034
+# DWARF32-NEXT:       - AbbrCode: 0x00000002
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000100000F50
+# DWARF32-NEXT:           - Value: 0x0000000000000034
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:             BlockData: [ 0x56 ]
+# DWARF32-NEXT:           - Value: 0x0000000000000076
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000003
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000060
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:       - AbbrCode: 0x00000003
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000002
+# DWARF32-NEXT:             BlockData: [ 0x91, 0x78 ]
+# DWARF32-NEXT:           - Value: 0x000000000000007B
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000003
+# DWARF32-NEXT:           - Value: 0x0000000000000060
+# DWARF32-NEXT:       - AbbrCode:        0x00000003
+# DWARF32-NEXT:         Values:          
+# DWARF32-NEXT:           - Value:           0x0000000000000002
+# DWARF32-NEXT:             BlockData:       [ 0x91, 0x70 ]
+# DWARF32-NEXT:           - Value:           0x0000000000000080
+# DWARF32-NEXT:           - Value:           0x0000000000000001
+# DWARF32-NEXT:           - Value:           0x0000000000000003
+# DWARF32-NEXT:           - Value:           0x0000000000000067
+# DWARF32-NEXT:       - AbbrCode:        0x00000000
+# DWARF32-NEXT:         Values:          
+# DWARF32-NEXT:       - AbbrCode:        0x00000004
+# DWARF32-NEXT:         Values:          
+# DWARF32-NEXT:           - Value:           0x0000000000000085
+# DWARF32-NEXT:           - Value:           0x0000000000000005
+# DWARF32-NEXT:           - Value:           0x0000000000000004
+# DWARF32-NEXT:       - AbbrCode:        0x00000005
+# DWARF32-NEXT:         Values:          
+# DWARF32-NEXT:           - Value:           0x000000000000006C
+# DWARF32-NEXT:       - AbbrCode:        0x00000005
+# DWARF32-NEXT:         Values:          
+# DWARF32-NEXT:           - Value:           0x0000000000000071
+# DWARF32-NEXT:       - AbbrCode:        0x00000004
+# DWARF32-NEXT:         Values:          
+# DWARF32-NEXT:           - Value:           0x0000000000000089
+# DWARF32-NEXT:           - Value:           0x0000000000000006
+# DWARF32-NEXT:           - Value:           0x0000000000000001
+# DWARF32-NEXT:       - AbbrCode:        0x00000000
+# DWARF32-NEXT:         Values:          
+
+## b) Test that yaml2obj emits a correct unit header and obj2yaml is able to convert it back.
+
+## Test DWARF32 unit header.
+
+# RUN: yaml2obj --docnum=2 -DFORMAT=DWARF32 %s -o %t2.dwarf32.o
+# RUN: llvm-readobj --hex-dump=__debug_info %t2.dwarf32.o | \
+# RUN:   FileCheck %s --check-prefix=DWARF32-HEADER
+
+#      DWARF32-HEADER: Hex dump of section '__debug_info':
+# DWARF32-HEADER-NEXT: 0x00000000 0c000000 05000108 00000000 01341200 .............4..
+##                                ^-------                            unit_header (4-byte)
+##                                         ^---                       version (2-byte)
+##                                             ^-                     unit_type (1-byte)
+##                                               ^-                   address_size (1-byte)
+##                                                  ^-------          deubug_abbrev_offset (4-byte)
+# DWARF32-HEADER-NEXT: 0x00000010 00                                  .
+
+# RUN: obj2yaml %t2.dwarf32.o | FileCheck %s --check-prefix=DWARF32-YAML
+
+#      DWARF32-YAML: debug_info:
+# DWARF32-YAML-NEXT:   - Length:     12
+# DWARF32-YAML-NEXT:     Version:    5
+# DWARF32-YAML-NEXT:     UnitType:   DW_UT_compile
+# DWARF32-YAML-NEXT:     AbbrOffset: 0x0000000000000000
+# DWARF32-YAML-NEXT:     AddrSize:   8
+# DWARF32-YAML-NEXT:     Entries:
+# DWARF32-YAML-NEXT:       - AbbrCode: 0x00000001
+# DWARF32-YAML-NEXT:         Values:
+# DWARF32-YAML-NEXT:           - Value: 0x0000000000001234
+
+--- !mach-o
+FileHeader:
+  magic:      0xFEEDFACF
+  cputype:    0x01000007
+  cpusubtype: 0x00000003
+  filetype:   0x0000000A
+  ncmds:      1
+  sizeofcmds: 232
+  flags:      0x00000000
+  reserved:   0x00000000
+LoadCommands:
+  - cmd:      LC_SEGMENT_64
+    cmdsize:  232
+    segname:  __DWARF
+    vmaddr:   0x00
+    vmsize:   0x00
+    fileoff:  0x00
+    filesize: 0x00
+    maxprot:  0
+    initprot: 0
+    nsects:   2
+    flags:    0
+    Sections:
+      - sectname:  __debug_abbrev
+        segname:   __DWARF
+        addr:      0x00
+        size:      12
+        offset:    528
+        align:     0
+        reloff:    0x00000000
+        nreloc:    0
+        flags:     0x00000000
+        reserved1: 0x00000000
+        reserved2: 0x00000000
+        reserved3: 0x00000000
+      - sectname:  __debug_info
+        segname:   __DWARF
+        addr:      0x00
+        size:      0xffff
+        offset:    1070
+        align:     0
+        reloff:    0x00000000
+        nreloc:    0
+        flags:     0x00000000
+        reserved1: 0x00000000
+        reserved2: 0x00000000
+        reserved3: 0x00000000
+DWARF:
+  debug_abbrev:    
+    - Code:     1
+      Tag:      DW_TAG_compile_unit
+      Children: DW_CHILDREN_no
+      Attributes:
+        - Attribute: DW_AT_producer
+          Form:      DW_FORM_strp
+  debug_info:
+    - Format:     [[FORMAT]]
+      Length:     12
+      Version:    5
+      UnitType:   DW_UT_compile
+      AbbrOffset: 0
+      AddrSize:   8
+      Entries:
+        - AbbrCode: 1
+          Values:
+            - Value: 0x1234
+
+## Test DWARF64 unit header.
+
+# RUN: yaml2obj --docnum=2 -DFORMAT=DWARF64 %s -o %t2.dwarf64.o
+# RUN: llvm-readobj --hex-dump=__debug_info %t2.dwarf64.o | \
+# RUN:   FileCheck %s --check-prefix=DWARF64-HEADER
+
+#      DWARF64-HEADER: Hex dump of section '__debug_info':
+# DWARF64-HEADER-NEXT: 0x00000000 ffffffff 0c000000 00000000 05000108 ................
+##                                ^-------------------------          unit_length (12-byte)
+##                                                           ^---     version (2-byte)
+##                                                               ^-   unit_type (1-byte)
+##                                                                 ^- address_size (1-byte)
+# DWARF64-HEADER-NEXT: 0x00000010 00000000 00000000 01341200 00000000 .........4......
+##                                ^----------------                   debug_abbrev_offset (8-byte)
+# DWARF64-HEADER-NEXT: 0x00000020 00                                  .
+
+# RUN: obj2yaml %t2.dwarf64.o | FileCheck %s --check-prefix=DWARF64-YAML
+
+#      DWARF64-YAML: debug_info:
+# DWARF64-YAML-NEXT:   - Format:     DWARF64
+# DWARF64-YAML-NEXT:     Length:     12
+# DWARF64-YAML-NEXT:     Version:    5
+# DWARF64-YAML-NEXT:     UnitType:   DW_UT_compile
+# DWARF64-YAML-NEXT:     AbbrOffset: 0x0000000000000000
+# DWARF64-YAML-NEXT:     AddrSize:   8
Index: llvm/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
===================================================================
--- llvm/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
+++ llvm/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
@@ -334,8 +334,7 @@
         - Attribute:       0x201A
           Form:            DW_FORM_addr
   debug_info:      
-    - Length:          
-        TotalLength:     168
+    - Length:          168
       Version:         2
       AbbrOffset:      0
       AddrSize:        8
@@ -416,8 +415,7 @@
 ...
 
 #CHECK:   debug_info:      
-#CHECK:     - Length:          
-#CHECK:         TotalLength:     168
+#CHECK:     - Length:          168
 #CHECK:       Version:         2
 #CHECK:       AbbrOffset:      0
 #CHECK:       AddrSize:        8
Index: llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
===================================================================
--- llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
+++ llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
@@ -213,8 +213,7 @@
         - LowOffset:       0x0000000000000000
           HighOffset:      0x0000000000001000
   debug_info:
-    - Length:
-        TotalLength:     82
+    - Length:          82
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml
===================================================================
--- llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml
+++ llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml
@@ -423,8 +423,7 @@
       - DieOffset:       0x00000071
         Name:            char
   debug_info:      
-    - Length:          
-        TotalLength:     117
+    - Length:          117
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
===================================================================
--- llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
+++ llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml
@@ -1,4 +1,10 @@
-# RUN: yaml2obj %s | obj2yaml | FileCheck %s
+## This file contains test cases for generating .debug_info
+## section in object files from the DWARF entry of Mach-O YAML inputs.
+
+## a) Test that yaml2obj emits a DWARF32 .debug_info sections and obj2yaml
+## converts it back.
+
+# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s --check-prefix=DWARF32
 
 --- !mach-o
 FileHeader:      
@@ -384,8 +390,7 @@
         - Address:         0x0000000100000F50
           Length:          52
   debug_info:      
-    - Length:          
-        TotalLength:     117
+    - Length:          117
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
@@ -507,68 +512,187 @@
 ...
 
 
-#CHECK: DWARF:           
-#CHECK:   debug_info:      
-#CHECK:     - Length:          
-#CHECK:         TotalLength:     117
-#CHECK:       Version:         4
-#CHECK:       AbbrOffset:      0
-#CHECK:       AddrSize:        8
-#CHECK:       Entries:         
-#CHECK:         - AbbrCode:        0x00000001
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x000000000000000C
-#CHECK:             - Value:           0x0000000000000038
-#CHECK:             - Value:           0x0000000000000000
-#CHECK:             - Value:           0x0000000000000046
-#CHECK:             - Value:           0x0000000100000F50
-#CHECK:             - Value:           0x0000000000000034
-#CHECK:         - AbbrCode:        0x00000002
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000100000F50
-#CHECK:             - Value:           0x0000000000000034
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:               BlockData:       [ 0x56 ]
-#CHECK:             - Value:           0x0000000000000076
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000003
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000060
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:         - AbbrCode:        0x00000003
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000002
-#CHECK:               BlockData:       [ 0x91, 0x78 ]
-#CHECK:             - Value:           0x000000000000007B
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000003
-#CHECK:             - Value:           0x0000000000000060
-#CHECK:         - AbbrCode:        0x00000003
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000002
-#CHECK:               BlockData:       [ 0x91, 0x70 ]
-#CHECK:             - Value:           0x0000000000000080
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:             - Value:           0x0000000000000003
-#CHECK:             - Value:           0x0000000000000067
-#CHECK:         - AbbrCode:        0x00000000
-#CHECK:           Values:          
-#CHECK:         - AbbrCode:        0x00000004
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000085
-#CHECK:             - Value:           0x0000000000000005
-#CHECK:             - Value:           0x0000000000000004
-#CHECK:         - AbbrCode:        0x00000005
-#CHECK:           Values:          
-#CHECK:             - Value:           0x000000000000006C
-#CHECK:         - AbbrCode:        0x00000005
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000071
-#CHECK:         - AbbrCode:        0x00000004
-#CHECK:           Values:          
-#CHECK:             - Value:           0x0000000000000089
-#CHECK:             - Value:           0x0000000000000006
-#CHECK:             - Value:           0x0000000000000001
-#CHECK:         - AbbrCode:        0x00000000
-#CHECK:           Values:          
+#      DWARF32: debug_info:
+# DWARF32-NEXT:   - Length:     117
+# DWARF32-NEXT:     Version:    4
+# DWARF32-NEXT:     AbbrOffset: 0
+# DWARF32-NEXT:     AddrSize:   8
+# DWARF32-NEXT:     Entries:
+# DWARF32-NEXT:       - AbbrCode: 0x00000001
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x000000000000000C
+# DWARF32-NEXT:           - Value: 0x0000000000000038
+# DWARF32-NEXT:           - Value: 0x0000000000000000
+# DWARF32-NEXT:           - Value: 0x0000000000000046
+# DWARF32-NEXT:           - Value: 0x0000000100000F50
+# DWARF32-NEXT:           - Value: 0x0000000000000034
+# DWARF32-NEXT:       - AbbrCode: 0x00000002
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000100000F50
+# DWARF32-NEXT:           - Value: 0x0000000000000034
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:             BlockData: [ 0x56 ]
+# DWARF32-NEXT:           - Value: 0x0000000000000076
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000003
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000060
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:       - AbbrCode:        0x00000003
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000002
+# DWARF32-NEXT:             BlockData: [ 0x91, 0x78 ]
+# DWARF32-NEXT:           - Value: 0x000000000000007B
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000003
+# DWARF32-NEXT:           - Value: 0x0000000000000060
+# DWARF32-NEXT:       - AbbrCode: 0x00000003
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000002
+# DWARF32-NEXT:             BlockData: [ 0x91, 0x70 ]
+# DWARF32-NEXT:           - Value: 0x0000000000000080
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:           - Value: 0x0000000000000003
+# DWARF32-NEXT:           - Value: 0x0000000000000067
+# DWARF32-NEXT:       - AbbrCode: 0x00000000
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:       - AbbrCode: 0x00000004
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000085
+# DWARF32-NEXT:           - Value: 0x0000000000000005
+# DWARF32-NEXT:           - Value: 0x0000000000000004
+# DWARF32-NEXT:       - AbbrCode: 0x00000005
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x000000000000006C
+# DWARF32-NEXT:       - AbbrCode: 0x00000005
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000071
+# DWARF32-NEXT:       - AbbrCode: 0x00000004
+# DWARF32-NEXT:         Values:
+# DWARF32-NEXT:           - Value: 0x0000000000000089
+# DWARF32-NEXT:           - Value: 0x0000000000000006
+# DWARF32-NEXT:           - Value: 0x0000000000000001
+# DWARF32-NEXT:       - AbbrCode: 0x00000000
+# DWARF32-NEXT:         Values:
+
+## b) Test that yaml2obj emits a correct unit header and obj2yaml is able to convert it back.
+
+## Test DWARF32 unit header.
+
+# RUN: yaml2obj --docnum=2 -DFORMAT=DWARF32 %s -o %t2.dwarf32.o
+# RUN: llvm-readobj --hex-dump=__debug_info %t2.dwarf32.o | \
+# RUN:   FileCheck %s --check-prefix=DWARF32-HEADER
+
+#      DWARF32-HEADER: Hex dump of section '__debug_info':
+# DWARF32-HEADER-NEXT: 0x00000000 0c000000 04000000 00000801 34120000 ............4...
+##                                ^-------                            unit_length (4-byte)
+##                                         ^---                       version (2-byte)
+##                                             ^--------              debug_abbrev_offset (4-byte)
+##                                                      ^-            address_size (1-byte)
+
+# RUN: obj2yaml %t2.dwarf32.o | FileCheck %s --check-prefix=DWARF32-YAML
+
+#      DWARF32-YAML: debug_info:
+# DWARF32-YAML-NEXT:   - Length:     12
+# DWARF32-YAML-NEXT:     Version:    4
+# DWARF32-YAML-NEXT:     AbbrOffset: 0
+# DWARF32-YAML-NEXT:     AddrSize:   8
+# DWARF32-YAML-NEXT:     Entries:
+# DWARF32-YAML-NEXT:       - AbbrCode: 0x00000001
+# DWARF32-YAML-NEXT:         Values:
+# DWARF32-YAML-NEXT:           - Value: 0x0000000000001234
+
+--- !mach-o
+FileHeader:
+  magic:      0xFEEDFACF
+  cputype:    0x01000007
+  cpusubtype: 0x00000003
+  filetype:   0x0000000A
+  ncmds:      1
+  sizeofcmds: 232
+  flags:      0x00000000
+  reserved:   0x00000000
+LoadCommands:
+  - cmd:      LC_SEGMENT_64
+    cmdsize:  232
+    segname:  __DWARF
+    vmaddr:   0x00
+    vmsize:   0x00
+    fileoff:  0x00
+    filesize: 0x00
+    maxprot:  0
+    initprot: 0
+    nsects:   2
+    flags:    0
+    Sections:
+      - sectname:  __debug_abbrev
+        segname:   __DWARF
+        addr:      0x00
+        size:      12
+        offset:    528
+        align:     0
+        reloff:    0x00000000
+        nreloc:    0
+        flags:     0x00000000
+        reserved1: 0x00000000
+        reserved2: 0x00000000
+        reserved3: 0x00000000
+      - sectname:  __debug_info
+        segname:   __DWARF
+        addr:      0x00
+        size:      0xffff
+        offset:    1070
+        align:     0
+        reloff:    0x00000000
+        nreloc:    0
+        flags:     0x00000000
+        reserved1: 0x00000000
+        reserved2: 0x00000000
+        reserved3: 0x00000000
+DWARF:
+  debug_abbrev:    
+    - Code:     1
+      Tag:      DW_TAG_compile_unit
+      Children: DW_CHILDREN_no
+      Attributes:
+        - Attribute: DW_AT_producer
+          Form:      DW_FORM_strp
+  debug_info:
+    - Format:     [[FORMAT]]
+      Length:     12
+      Version:    4
+      AbbrOffset: 0
+      AddrSize:   8
+      Entries:
+        - AbbrCode: 1
+          Values:
+            - Value: 0x1234
+
+## Test DWARF64 unit header.
+
+# RUN: yaml2obj --docnum=2 -DFORMAT=DWARF64 %s -o %t2.dwarf64.o
+# RUN: llvm-readobj --hex-dump=__debug_info %t2.dwarf64.o | \
+# RUN:   FileCheck %s --check-prefix=DWARF64-HEADER
+
+#      DWARF64-HEADER: Hex dump of section '__debug_info':
+# DWARF64-HEADER-NEXT: 0x00000000 ffffffff 0c000000 00000000 04000000 ................
+##                                ^-------------------------          unit_length (12-byte)
+##                                                           ^---     version (2-byte)
+##                                                               ^--- debug_abbrev_offset (8-byte)
+# DWARF64-HEADER-NEXT: 0x00000010 00000000 00000801 34120000 00000000 ........4.......
+##                                -------------
+##                                             ^-                     address_size (1-byte)
+
+# RUN: obj2yaml %t2.dwarf64.o | FileCheck %s --check-prefix=DWARF64-YAML
+
+#      DWARF64-YAML: debug_info:
+# DWARF64-YAML-NEXT:   - Format:     DWARF64
+# DWARF64-YAML-NEXT:     Length:     12
+# DWARF64-YAML-NEXT:     Version:    4
+# DWARF64-YAML-NEXT:     AbbrOffset: 0
+# DWARF64-YAML-NEXT:     AddrSize:   8
+# DWARF64-YAML-NEXT:     Entries:
+# DWARF64-YAML-NEXT:       - AbbrCode: 0x00000001
+# DWARF64-YAML-NEXT:         Values:
+# DWARF64-YAML-NEXT:           - Value: 0x0000000000001234
Index: llvm/lib/ObjectYAML/DWARFYAML.cpp
===================================================================
--- llvm/lib/ObjectYAML/DWARFYAML.cpp
+++ llvm/lib/ObjectYAML/DWARFYAML.cpp
@@ -132,6 +132,7 @@
 }
 
 void MappingTraits<DWARFYAML::Unit>::mapping(IO &IO, DWARFYAML::Unit &Unit) {
+  IO.mapOptional("Format", Unit.Format, dwarf::DWARF32);
   IO.mapRequired("Length", Unit.Length);
   IO.mapRequired("Version", Unit.Version);
   if (Unit.Version >= 5)
Index: llvm/lib/ObjectYAML/DWARFVisitor.cpp
===================================================================
--- llvm/lib/ObjectYAML/DWARFVisitor.cpp
+++ llvm/lib/ObjectYAML/DWARFVisitor.cpp
@@ -9,6 +9,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "DWARFVisitor.h"
+#include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/ObjectYAML/DWARFYAML.h"
 #include "llvm/Support/Errc.h"
 #include "llvm/Support/Error.h"
@@ -36,7 +37,7 @@
 }
 
 static unsigned getOffsetSize(const DWARFYAML::Unit &Unit) {
-  return Unit.Length.isDWARF64() ? 8 : 4;
+  return Unit.Format == dwarf::DWARF64 ? 8 : 4;
 }
 
 static unsigned getRefSize(const DWARFYAML::Unit &Unit) {
Index: llvm/lib/ObjectYAML/DWARFEmitter.cpp
===================================================================
--- llvm/lib/ObjectYAML/DWARFEmitter.cpp
+++ llvm/lib/ObjectYAML/DWARFEmitter.cpp
@@ -207,18 +207,18 @@
 
 protected:
   void onStartCompileUnit(const DWARFYAML::Unit &CU) override {
-    writeInitialLength(CU.Length, OS, DebugInfo.IsLittleEndian);
+    writeInitialLength(CU.Format, CU.Length, OS, DebugInfo.IsLittleEndian);
     writeInteger((uint16_t)CU.Version, OS, DebugInfo.IsLittleEndian);
     if (CU.Version >= 5) {
       writeInteger((uint8_t)CU.Type, OS, DebugInfo.IsLittleEndian);
       writeInteger((uint8_t)CU.AddrSize, OS, DebugInfo.IsLittleEndian);
       cantFail(writeVariableSizedInteger(CU.AbbrOffset,
-                                         CU.Length.isDWARF64() ? 8 : 4, OS,
-                                         DebugInfo.IsLittleEndian));
+                                         CU.Format == dwarf::DWARF64 ? 8 : 4,
+                                         OS, DebugInfo.IsLittleEndian));
     } else {
       cantFail(writeVariableSizedInteger(CU.AbbrOffset,
-                                         CU.Length.isDWARF64() ? 8 : 4, OS,
-                                         DebugInfo.IsLittleEndian));
+                                         CU.Format == dwarf::DWARF64 ? 8 : 4,
+                                         OS, DebugInfo.IsLittleEndian));
       writeInteger((uint8_t)CU.AddrSize, OS, DebugInfo.IsLittleEndian);
     }
   }
@@ -441,9 +441,7 @@
     Length = CU.Version >= 5 ? 8 : 7;
   }
 
-  virtual void onEndCompileUnit(DWARFYAML::Unit &CU) {
-    CU.Length.setLength(Length);
-  }
+  virtual void onEndCompileUnit(DWARFYAML::Unit &CU) { CU.Length = Length; }
 
   virtual void onStartDIE(DWARFYAML::Unit &CU, DWARFYAML::Entry &DIE) {
     Length += getULEB128Size(DIE.AbbrCode);
Index: llvm/include/llvm/ObjectYAML/DWARFYAML.h
===================================================================
--- llvm/include/llvm/ObjectYAML/DWARFYAML.h
+++ llvm/include/llvm/ObjectYAML/DWARFYAML.h
@@ -117,7 +117,8 @@
 };
 
 struct Unit {
-  InitialLength Length;
+  dwarf::DwarfFormat Format;
+  uint64_t Length;
   uint16_t Version;
   llvm::dwarf::UnitType Type; // Added in DWARF 5
   yaml::Hex64 AbbrOffset;
Index: lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
===================================================================
--- lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
+++ lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
@@ -56,8 +56,7 @@
       "      - Attribute:       DW_AT_byte_size\n"
       "        Form:            DW_FORM_data1\n"
       "debug_info:\n"
-      "  - Length:\n"
-      "      TotalLength:     0\n"
+      "  - Length:          0\n"
       "    Version:         4\n"
       "    AbbrOffset:      0\n"
       "    AddrSize:        8\n"
Index: lldb/unittests/Symbol/Inputs/inlined-functions.yaml
===================================================================
--- lldb/unittests/Symbol/Inputs/inlined-functions.yaml
+++ lldb/unittests/Symbol/Inputs/inlined-functions.yaml
@@ -342,8 +342,7 @@
         - Attribute:       DW_AT_type
           Form:            DW_FORM_ref4
   debug_info:      
-    - Length:          
-        TotalLength:     579
+    - Length:          579
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
Index: lldb/unittests/Expression/DWARFExpressionTest.cpp
===================================================================
--- lldb/unittests/Expression/DWARFExpressionTest.cpp
+++ lldb/unittests/Expression/DWARFExpressionTest.cpp
@@ -94,8 +94,7 @@
       "      - Attribute:       DW_AT_byte_size\n"
       "        Form:            DW_FORM_data1\n"
       "debug_info:\n"
-      "  - Length:\n"
-      "      TotalLength:     0\n"
+      "  - Length:          0\n"
       "    Version:         4\n"
       "    AbbrOffset:      0\n"
       "    AddrSize:        8\n"
Index: lldb/test/API/functionalities/source-map/a.yaml
===================================================================
--- lldb/test/API/functionalities/source-map/a.yaml
+++ lldb/test/API/functionalities/source-map/a.yaml
@@ -296,8 +296,7 @@
         - Attribute:       DW_AT_type
           Form:            DW_FORM_ref4
   debug_info:      
-    - Length:          
-        TotalLength:     122
+    - Length:          122
       Version:         4
       AbbrOffset:      0
       AddrSize:        8
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to