mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 00:06:50 +00:00
[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. llvm-svn: 297230
This commit is contained in:
parent
9accea6feb
commit
a03cbcc6a6
@ -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);
|
||||
|
507
llvm/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
Normal file
507
llvm/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user