]> granicus.if.org Git - llvm/commitdiff
[ObjectYAML] Fix issue with DWARF2 AddrSize 8
authorChris Bieneman <beanz@apple.com>
Tue, 7 Mar 2017 21:34:35 +0000 (21:34 +0000)
committerChris Bieneman <beanz@apple.com>
Tue, 7 Mar 2017 21:34:35 +0000 (21:34 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297230 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ObjectYAML/DWARFVisitor.cpp
test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml [new file with mode: 0644]

index cb9ad7a4cb8cd19b5b6867f1da73f1db15af50cf..36a9f7638bd44b53c992f39d5832511b8bf495f5 100644 (file)
@@ -34,10 +34,14 @@ void DWARFYAML::VisitorImpl<T>::onVariableSizeValue(uint64_t U, unsigned Size) {
   }
 }
 
+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::VisitorImpl<T>::traverseDebugInfo() {
           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);
diff --git a/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml b/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
new file mode 100644 (file)
index 0000000..e91935b
--- /dev/null
@@ -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