[llvm] r297230 - [ObjectYAML] Fix issue with DWARF2 AddrSize 8

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 7 13:34:35 PST 2017


Author: cbieneman
Date: Tue Mar  7 15:34:35 2017
New Revision: 297230

URL: http://llvm.org/viewvc/llvm-project?rev=297230&view=rev
Log:
[ObjectYAML] Fix issue with DWARF2 AddrSize 8

In my refactoring I introduced a bug where we were using the reference size instead of the offset size for DW_FORM_strp and similar forms.

This patch resolves the error and adds a test case testing all the DWARF forms for DWARF2 AddrSize 8. There is similar coverage already in the DWARFDebugInfoTest sources that covers the parser. Once I migrate the DWARFGenerator APIs to be built on the YAML tools they will be fully covered under the same tests.

Added:
    llvm/trunk/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
Modified:
    llvm/trunk/lib/ObjectYAML/DWARFVisitor.cpp

Modified: llvm/trunk/lib/ObjectYAML/DWARFVisitor.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/DWARFVisitor.cpp?rev=297230&r1=297229&r2=297230&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/DWARFVisitor.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/DWARFVisitor.cpp Tue Mar  7 15:34:35 2017
@@ -34,10 +34,14 @@ void DWARFYAML::VisitorImpl<T>::onVariab
   }
 }
 
+unsigned getOffsetSize(const DWARFYAML::Unit &Unit) {
+  return Unit.Length.isDWARF64() ? 8 : 4;
+}
+
 unsigned getRefSize(const DWARFYAML::Unit &Unit) {
   if (Unit.Version == 2)
     return Unit.AddrSize;
-  return Unit.Length.isDWARF64() ? 8 : 4;
+  return getOffsetSize(Unit);
 }
 
 template <typename T> void DWARFYAML::VisitorImpl<T>::traverseDebugInfo() {
@@ -149,7 +153,7 @@ template <typename T> void DWARFYAML::Vi
           case dwarf::DW_FORM_GNU_strp_alt:
           case dwarf::DW_FORM_line_strp:
           case dwarf::DW_FORM_strp_sup:
-            onVariableSizeValue(FormVal->Value, getRefSize(Unit));
+            onVariableSizeValue(FormVal->Value, getOffsetSize(Unit));
             break;
           case dwarf::DW_FORM_ref_sig8:
             onValue((uint64_t)FormVal->Value);

Added: llvm/trunk/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml?rev=297230&view=auto
==============================================================================
--- llvm/trunk/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml (added)
+++ llvm/trunk/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml Tue Mar  7 15:34:35 2017
@@ -0,0 +1,507 @@
+# RUN: yaml2obj %s | obj2yaml | FileCheck %s
+
+--- !mach-o
+FileHeader:      
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x00000003
+  filetype:        0x0000000A
+  ncmds:           5
+  sizeofcmds:      1800
+  flags:           0x00000000
+  reserved:        0x00000000
+LoadCommands:    
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __PAGEZERO
+    vmaddr:          0
+    vmsize:          4294967296
+    fileoff:         0
+    filesize:        0
+    maxprot:         0
+    initprot:        0
+    nsects:          0
+    flags:           0
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         472
+    segname:         __TEXT
+    vmaddr:          4294967296
+    vmsize:          4096
+    fileoff:         0
+    filesize:        0
+    maxprot:         7
+    initprot:        5
+    nsects:          5
+    flags:           0
+    Sections:        
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x0000000100000F50
+        size:            52
+        offset:          0x00000000
+        align:           4
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __stubs
+        segname:         __TEXT
+        addr:            0x0000000100000F84
+        size:            6
+        offset:          0x00000000
+        align:           1
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000408
+        reserved1:       0x00000000
+        reserved2:       0x00000006
+        reserved3:       0x00000000
+      - sectname:        __stub_helper
+        segname:         __TEXT
+        addr:            0x0000000100000F8C
+        size:            26
+        offset:          0x00000000
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __cstring
+        segname:         __TEXT
+        addr:            0x0000000100000FA6
+        size:            14
+        offset:          0x00000000
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000002
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __unwind_info
+        segname:         __TEXT
+        addr:            0x0000000100000FB4
+        size:            72
+        offset:          0x00000000
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         232
+    segname:         __DATA
+    vmaddr:          4294971392
+    vmsize:          4096
+    fileoff:         0
+    filesize:        0
+    maxprot:         7
+    initprot:        3
+    nsects:          2
+    flags:           0
+    Sections:        
+      - sectname:        __nl_symbol_ptr
+        segname:         __DATA
+        addr:            0x0000000100001000
+        size:            16
+        offset:          0x00000000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000006
+        reserved1:       0x00000001
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __la_symbol_ptr
+        segname:         __DATA
+        addr:            0x0000000100001010
+        size:            8
+        offset:          0x00000000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000007
+        reserved1:       0x00000003
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __LINKEDIT
+    vmaddr:          4294975488
+    vmsize:          4096
+    fileoff:         4096
+    filesize:        60
+    maxprot:         7
+    initprot:        1
+    nsects:          0
+    flags:           0
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         952
+    segname:         __DWARF
+    vmaddr:          4294979584
+    vmsize:          4096
+    fileoff:         8192
+    filesize:        764
+    maxprot:         7
+    initprot:        3
+    nsects:          11
+    flags:           0
+    Sections:        
+      - sectname:        __debug_line
+        segname:         __DWARF
+        addr:            0x0000000100003000
+        size:            69
+        offset:          0x00002000
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_pubnames
+        segname:         __DWARF
+        addr:            0x0000000100003045
+        size:            27
+        offset:          0x00002045
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_pubtypes
+        segname:         __DWARF
+        addr:            0x0000000100003060
+        size:            35
+        offset:          0x00002060
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_aranges
+        segname:         __DWARF
+        addr:            0x0000000100003083
+        size:            48
+        offset:          0x00002083
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_info
+        segname:         __DWARF
+        addr:            0x00000001000030B3
+        size:            180
+        offset:          0x000020B3
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_abbrev
+        segname:         __DWARF
+        addr:            0x000000010000312C
+        size:            84
+        offset:          0x00002167
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_str
+        segname:         __DWARF
+        addr:            0x0000000100003178
+        size:            83
+        offset:          0x000021BB
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __apple_names
+        segname:         __DWARF
+        addr:            0x0000000100003206
+        size:            36
+        offset:          0x0000221E
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __apple_namespac
+        segname:         __DWARF
+        addr:            0x0000000100003242
+        size:            36
+        offset:          0x00002242
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __apple_types
+        segname:         __DWARF
+        addr:            0x0000000100003266
+        size:            114
+        offset:          0x00002266
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __apple_objc
+        segname:         __DWARF
+        addr:            0x00000001000032D8
+        size:            36
+        offset:          0x000022D8
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+DWARF:
+  debug_str:       
+    - World
+  debug_abbrev:    
+    - Code:            0x00000001
+      Tag:             DW_TAG_compile_unit
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       0x2000
+          Form:            DW_FORM_addr
+        - Attribute:       0x2001
+          Form:            DW_FORM_block
+        - Attribute:       DW_AT_MIPS_loop_begin
+          Form:            DW_FORM_block1
+        - Attribute:       DW_AT_MIPS_tail_loop_begin
+          Form:            DW_FORM_block2
+        - Attribute:       DW_AT_MIPS_epilog_begin
+          Form:            DW_FORM_block4
+        - Attribute:       DW_AT_MIPS_loop_unroll_factor
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_MIPS_software_pipeline_depth
+          Form:            DW_FORM_data2
+        - Attribute:       DW_AT_MIPS_linkage_name
+          Form:            DW_FORM_data4
+        - Attribute:       DW_AT_MIPS_stride
+          Form:            DW_FORM_data8
+        - Attribute:       DW_AT_MIPS_abstract_name
+          Form:            DW_FORM_string
+        - Attribute:       DW_AT_MIPS_clone_origin
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_MIPS_has_inlines
+          Form:            DW_FORM_ref_addr
+        - Attribute:       DW_AT_MIPS_stride_byte
+          Form:            DW_FORM_ref1
+        - Attribute:       DW_AT_MIPS_stride_elem
+          Form:            DW_FORM_ref2
+        - Attribute:       DW_AT_MIPS_ptr_dopetype
+          Form:            DW_FORM_ref4
+        - Attribute:       DW_AT_MIPS_allocatable_dopetype
+          Form:            DW_FORM_ref8
+        - Attribute:       DW_AT_MIPS_assumed_shape_dopetype
+          Form:            DW_FORM_ref_sig8
+        - Attribute:       DW_AT_MIPS_assumed_size
+          Form:            DW_FORM_ref_udata
+        - Attribute:       0x2012
+          Form:            DW_FORM_flag
+        - Attribute:       0x2013
+          Form:            DW_FORM_flag
+        - Attribute:       0x2014
+          Form:            DW_FORM_flag_present
+        - Attribute:       0x2015
+          Form:            DW_FORM_sdata
+        - Attribute:       0x2017
+          Form:            DW_FORM_udata
+        - Attribute:       0x2018
+          Form:            DW_FORM_GNU_ref_alt
+        - Attribute:       0x2019
+          Form:            DW_FORM_sec_offset
+        - Attribute:       0x201A
+          Form:            DW_FORM_addr
+  debug_info:      
+    - Length:          
+        TotalLength:     168
+      Version:         2
+      AbbrOffset:      0
+      AddrSize:        8
+      Entries:         
+        - AbbrCode:        0x00000001
+          Values:          
+            - Value:           0x0123456789ABCDEF
+            - Value:           0x000000000000000A
+              BlockData:       
+                - 0x01
+                - 0x02
+                - 0x03
+                - 0x04
+                - 0x05
+                - 0x06
+                - 0x07
+                - 0x08
+                - 0x09
+                - 0x00
+            - Value:           0x000000000000000A
+              BlockData:       
+                - 0x01
+                - 0x02
+                - 0x03
+                - 0x04
+                - 0x05
+                - 0x06
+                - 0x07
+                - 0x08
+                - 0x09
+                - 0x00
+            - Value:           0x000000000000000A
+              BlockData:       
+                - 0x01
+                - 0x02
+                - 0x03
+                - 0x04
+                - 0x05
+                - 0x06
+                - 0x07
+                - 0x08
+                - 0x09
+                - 0x00
+            - Value:           0x000000000000000A
+              BlockData:       
+                - 0x01
+                - 0x02
+                - 0x03
+                - 0x04
+                - 0x05
+                - 0x06
+                - 0x07
+                - 0x08
+                - 0x09
+                - 0x00
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000002345
+            - Value:           0x000000006789ABCD
+            - Value:           0x0011223344556677
+            - Value:           0x0000000000000000
+              CStr:            Hello
+            - Value:           0x0000000000000000
+            - Value:           0x0000000012345678
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000002345
+            - Value:           0x000000006789ABCD
+            - Value:           0x0011223344556677
+            - Value:           0xAABBCCDDEEFF0011
+            - Value:           0xFFFFFFFFFFFFFFFE
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000000
+            - Value:           0x0000000000000001
+            - Value:           0x8000000000000000
+            - Value:           0xFFFFFFFFFFFFFFFE
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000002
+            - Value:           0x0123456789ABCDEF
+...
+
+#CHECK:   debug_info:      
+#CHECK:     - Length:          
+#CHECK:         TotalLength:     168
+#CHECK:       Version:         2
+#CHECK:       AbbrOffset:      0
+#CHECK:       AddrSize:        8
+#CHECK:       Entries:         
+#CHECK:         - AbbrCode:        0x00000001
+#CHECK:           Values:          
+#CHECK:             - Value:           0x0123456789ABCDEF
+#CHECK:             - Value:           0x000000000000000A
+#CHECK:               BlockData:       
+#CHECK:                 - 0x01
+#CHECK:                 - 0x02
+#CHECK:                 - 0x03
+#CHECK:                 - 0x04
+#CHECK:                 - 0x05
+#CHECK:                 - 0x06
+#CHECK:                 - 0x07
+#CHECK:                 - 0x08
+#CHECK:                 - 0x09
+#CHECK:                 - 0x00
+#CHECK:             - Value:           0x000000000000000A
+#CHECK:               BlockData:       
+#CHECK:                 - 0x01
+#CHECK:                 - 0x02
+#CHECK:                 - 0x03
+#CHECK:                 - 0x04
+#CHECK:                 - 0x05
+#CHECK:                 - 0x06
+#CHECK:                 - 0x07
+#CHECK:                 - 0x08
+#CHECK:                 - 0x09
+#CHECK:                 - 0x00
+#CHECK:             - Value:           0x000000000000000A
+#CHECK:               BlockData:       
+#CHECK:                 - 0x01
+#CHECK:                 - 0x02
+#CHECK:                 - 0x03
+#CHECK:                 - 0x04
+#CHECK:                 - 0x05
+#CHECK:                 - 0x06
+#CHECK:                 - 0x07
+#CHECK:                 - 0x08
+#CHECK:                 - 0x09
+#CHECK:                 - 0x00
+#CHECK:             - Value:           0x000000000000000A
+#CHECK:               BlockData:       
+#CHECK:                 - 0x01
+#CHECK:                 - 0x02
+#CHECK:                 - 0x03
+#CHECK:                 - 0x04
+#CHECK:                 - 0x05
+#CHECK:                 - 0x06
+#CHECK:                 - 0x07
+#CHECK:                 - 0x08
+#CHECK:                 - 0x09
+#CHECK:                 - 0x00
+#CHECK:             - Value:           0x0000000000000001
+#CHECK:             - Value:           0x0000000000002345
+#CHECK:             - Value:           0x000000006789ABCD
+#CHECK:             - Value:           0x0011223344556677
+#CHECK:               CStr:            Hello
+#CHECK:             - Value:           0x0000000000000000
+#CHECK:             - Value:           0x0000000012345678
+#CHECK:             - Value:           0x0000000000000001
+#CHECK:             - Value:           0x0000000000002345
+#CHECK:             - Value:           0x000000006789ABCD
+#CHECK:             - Value:           0x0011223344556677
+#CHECK:             - Value:           0xAABBCCDDEEFF0011
+#CHECK:             - Value:           0xFFFFFFFFFFFFFFFE
+#CHECK:             - Value:           0x0000000000000001
+#CHECK:             - Value:           0x0000000000000000
+#CHECK:             - Value:           0x0000000000000001
+#CHECK:             - Value:           0xFFFFFFFFFFFFFFFE
+#CHECK:             - Value:           0x0000000000000001
+#CHECK:             - Value:           0x0000000000000002
+#CHECK:             - Value:           0x0123456789ABCDEF




More information about the llvm-commits mailing list