254 lines
8.8 KiB
YAML
254 lines
8.8 KiB
YAML
|
# This test verifies that if a DW_TAG_compile_unit has DW_AT_ranges that
|
||
|
# overlap, that it doesn't end up producing invalid errors claiming a child
|
||
|
# DW_TAG_subprogram DIE is not in the parant (CU) ranges. Prior to the commit
|
||
|
# that fixed this, a loop was iterating over all DW_AT_ranges for a DIE and
|
||
|
# stopping the loop if any intersecting ranges were found. This would cause
|
||
|
# the DW_TAG_subprogram DIEs, like "stripped2" and "main", to improperly report
|
||
|
# that they were not contained in the parent's address ranges
|
||
|
#
|
||
|
# The DWARF looks like:
|
||
|
# 0x0000000b: DW_TAG_compile_unit
|
||
|
# DW_AT_name ("/tmp/main.c")
|
||
|
# DW_AT_language (DW_LANG_C)
|
||
|
# DW_AT_low_pc (0x0000000000000000)
|
||
|
# DW_AT_ranges (0x00000000
|
||
|
# [0x0000000000002000, 0x0000000000003000)
|
||
|
# [0x0000000000000000, 0x0000000000000020)
|
||
|
# [0x0000000000000000, 0x0000000000000030)
|
||
|
# [0x0000000000001000, 0x0000000000002000))
|
||
|
#
|
||
|
# 0x0000001e: DW_TAG_subprogram
|
||
|
# DW_AT_name ("stripped1")
|
||
|
# DW_AT_low_pc (0x0000000000000000)
|
||
|
# DW_AT_high_pc (0x0000000000000020)
|
||
|
#
|
||
|
# 0x0000002f: DW_TAG_subprogram
|
||
|
# DW_AT_name ("stripped2")
|
||
|
# DW_AT_low_pc (0x0000000000000000)
|
||
|
# DW_AT_high_pc (0x0000000000000030)
|
||
|
#
|
||
|
# 0x00000044: DW_TAG_subprogram
|
||
|
# DW_AT_name ("main")
|
||
|
# DW_AT_low_pc (0x0000000000001000)
|
||
|
# DW_AT_high_pc (0x0000000000002000)
|
||
|
#
|
||
|
# 0x00000055: DW_TAG_subprogram
|
||
|
# DW_AT_name ("foo")
|
||
|
# DW_AT_low_pc (0x0000000000002000)
|
||
|
# DW_AT_high_pc (0x0000000000003000)
|
||
|
#
|
||
|
# 0x00000066: NULL
|
||
|
|
||
|
# RUN: yaml2obj %s | not llvm-dwarfdump --verify - | FileCheck %s --implicit-check-not=error:
|
||
|
|
||
|
# CHECK: error: DIE has overlapping ranges in DW_AT_ranges attribute: [0x0000000000000000, 0x0000000000000020) and [0x0000000000000000, 0x0000000000000030)
|
||
|
|
||
|
# CHECK: 0x0000000b: DW_TAG_compile_unit
|
||
|
# CHECK-NEXT: DW_AT_name ("/tmp/main.c")
|
||
|
# CHECK-NEXT: DW_AT_language (DW_LANG_C)
|
||
|
# CHECK-NEXT: DW_AT_low_pc (0x0000000000000000)
|
||
|
# CHECK-NEXT: DW_AT_ranges (0x00000000
|
||
|
# CHECK-NEXT: [0x0000000000002000, 0x0000000000003000)
|
||
|
# CHECK-NEXT: [0x0000000000000000, 0x0000000000000020)
|
||
|
# CHECK-NEXT: [0x0000000000000000, 0x0000000000000030)
|
||
|
# CHECK-NEXT: [0x0000000000001000, 0x0000000000002000))
|
||
|
|
||
|
# CHECK: error: DIEs have overlapping address ranges:
|
||
|
# CHECK: 0x0000002f: DW_TAG_subprogram
|
||
|
# CHECK-NEXT: DW_AT_name ("stripped2")
|
||
|
# CHECK-NEXT: DW_AT_low_pc (0x0000000000000000)
|
||
|
# CHECK-NEXT: DW_AT_high_pc (0x0000000000000030)
|
||
|
|
||
|
# CHECK: 0x0000001e: DW_TAG_subprogram
|
||
|
# CHECK-NEXT: DW_AT_name ("stripped1")
|
||
|
# CHECK-NEXT: DW_AT_low_pc (0x0000000000000000)
|
||
|
# CHECK-NEXT: DW_AT_high_pc (0x0000000000000020)
|
||
|
|
||
|
# CHECK: Verifying .debug_info references...
|
||
|
|
||
|
--- !mach-o
|
||
|
FileHeader:
|
||
|
magic: 0xFEEDFACF
|
||
|
cputype: 0x01000007
|
||
|
cpusubtype: 0x00000003
|
||
|
filetype: 0x00000001
|
||
|
ncmds: 4
|
||
|
sizeofcmds: 464
|
||
|
flags: 0x00002000
|
||
|
reserved: 0x00000000
|
||
|
LoadCommands:
|
||
|
- cmd: LC_SEGMENT_64
|
||
|
cmdsize: 392
|
||
|
segname: ''
|
||
|
vmaddr: 0
|
||
|
vmsize: 261
|
||
|
fileoff: 528
|
||
|
filesize: 261
|
||
|
maxprot: 7
|
||
|
initprot: 7
|
||
|
nsects: 4
|
||
|
flags: 0
|
||
|
Sections:
|
||
|
- sectname: __debug_abbrev
|
||
|
segname: __DWARF
|
||
|
addr: 0x0000000000000000
|
||
|
size: 36
|
||
|
offset: 0x00000210
|
||
|
align: 0
|
||
|
reloff: 0x00000000
|
||
|
nreloc: 0
|
||
|
flags: 0x00000000
|
||
|
reserved1: 0x00000000
|
||
|
reserved2: 0x00000000
|
||
|
reserved3: 0x00000000
|
||
|
- sectname: __debug_info
|
||
|
segname: __DWARF
|
||
|
addr: 0x0000000000000024
|
||
|
size: 103
|
||
|
offset: 0x00000234
|
||
|
align: 0
|
||
|
reloff: 0x00000000
|
||
|
nreloc: 0
|
||
|
flags: 0x00000000
|
||
|
reserved1: 0x00000000
|
||
|
reserved2: 0x00000000
|
||
|
reserved3: 0x00000000
|
||
|
- sectname: __debug_ranges
|
||
|
segname: __DWARF
|
||
|
addr: 0x000000000000008B
|
||
|
size: 80
|
||
|
offset: 0x0000029B
|
||
|
align: 0
|
||
|
reloff: 0x00000000
|
||
|
nreloc: 0
|
||
|
flags: 0x00000000
|
||
|
reserved1: 0x00000000
|
||
|
reserved2: 0x00000000
|
||
|
reserved3: 0x00000000
|
||
|
- sectname: __debug_str
|
||
|
segname: __DWARF
|
||
|
addr: 0x00000000000000DB
|
||
|
size: 42
|
||
|
offset: 0x000002EB
|
||
|
align: 0
|
||
|
reloff: 0x00000000
|
||
|
nreloc: 0
|
||
|
flags: 0x00000000
|
||
|
reserved1: 0x00000000
|
||
|
reserved2: 0x00000000
|
||
|
reserved3: 0x00000000
|
||
|
- cmd: LC_SYMTAB
|
||
|
cmdsize: 24
|
||
|
symoff: 0
|
||
|
nsyms: 0
|
||
|
stroff: 792
|
||
|
strsize: 8
|
||
|
- cmd: LC_BUILD_VERSION
|
||
|
cmdsize: 32
|
||
|
platform: 1
|
||
|
minos: 658944
|
||
|
sdk: 658944
|
||
|
ntools: 1
|
||
|
Tools:
|
||
|
- tool: 3
|
||
|
version: 34734080
|
||
|
- cmd: LC_DATA_IN_CODE
|
||
|
cmdsize: 16
|
||
|
dataoff: 792
|
||
|
datasize: 0
|
||
|
LinkEditData:
|
||
|
StringTable:
|
||
|
- ' '
|
||
|
- ''
|
||
|
- ''
|
||
|
- ''
|
||
|
- ''
|
||
|
- ''
|
||
|
- ''
|
||
|
DWARF:
|
||
|
debug_str:
|
||
|
- ''
|
||
|
- '/tmp/main.c'
|
||
|
- stripped1
|
||
|
- stripped2
|
||
|
- main
|
||
|
- foo
|
||
|
debug_abbrev:
|
||
|
- Table:
|
||
|
- Code: 0x00000001
|
||
|
Tag: DW_TAG_compile_unit
|
||
|
Children: DW_CHILDREN_yes
|
||
|
Attributes:
|
||
|
- Attribute: DW_AT_name
|
||
|
Form: DW_FORM_strp
|
||
|
- Attribute: DW_AT_language
|
||
|
Form: DW_FORM_data2
|
||
|
- Attribute: DW_AT_low_pc
|
||
|
Form: DW_FORM_addr
|
||
|
- Attribute: DW_AT_ranges
|
||
|
Form: DW_FORM_sec_offset
|
||
|
- Code: 0x00000002
|
||
|
Tag: DW_TAG_subprogram
|
||
|
Children: DW_CHILDREN_no
|
||
|
Attributes:
|
||
|
- Attribute: DW_AT_name
|
||
|
Form: DW_FORM_strp
|
||
|
- Attribute: DW_AT_low_pc
|
||
|
Form: DW_FORM_addr
|
||
|
- Attribute: DW_AT_high_pc
|
||
|
Form: DW_FORM_data4
|
||
|
- Code: 0x00000003
|
||
|
Tag: DW_TAG_subprogram
|
||
|
Children: DW_CHILDREN_no
|
||
|
Attributes:
|
||
|
- Attribute: DW_AT_name
|
||
|
Form: DW_FORM_strp
|
||
|
- Attribute: DW_AT_low_pc
|
||
|
Form: DW_FORM_addr
|
||
|
- Attribute: DW_AT_high_pc
|
||
|
Form: DW_FORM_addr
|
||
|
debug_ranges:
|
||
|
- Offset: 0x00000000
|
||
|
AddrSize: 0x08
|
||
|
Entries:
|
||
|
- LowOffset: 0x0000000000002000
|
||
|
HighOffset: 0x0000000000003000
|
||
|
- LowOffset: 0x0000000000000000
|
||
|
HighOffset: 0x0000000000000020
|
||
|
- LowOffset: 0x0000000000000000
|
||
|
HighOffset: 0x0000000000000030
|
||
|
- LowOffset: 0x0000000000001000
|
||
|
HighOffset: 0x0000000000002000
|
||
|
debug_info:
|
||
|
- Version: 4
|
||
|
AddrSize: 8
|
||
|
Entries:
|
||
|
- AbbrCode: 0x00000001
|
||
|
Values:
|
||
|
- Value: 0x0000000000000001
|
||
|
- Value: 0x0000000000000002
|
||
|
- Value: 0x0000000000000000
|
||
|
- Value: 0x0000000000000000
|
||
|
- AbbrCode: 0x00000002
|
||
|
Values:
|
||
|
- Value: 0x000000000000000D
|
||
|
- Value: 0x0000000000000000
|
||
|
- Value: 0x0000000000000020
|
||
|
- AbbrCode: 0x00000003
|
||
|
Values:
|
||
|
- Value: 0x0000000000000017
|
||
|
- Value: 0x0000000000000000
|
||
|
- Value: 0x0000000000000030
|
||
|
- AbbrCode: 0x00000002
|
||
|
Values:
|
||
|
- Value: 0x0000000000000021
|
||
|
- Value: 0x0000000000001000
|
||
|
- Value: 0x0000000000001000
|
||
|
- AbbrCode: 0x00000002
|
||
|
Values:
|
||
|
- Value: 0x0000000000000026
|
||
|
- Value: 0x0000000000002000
|
||
|
- Value: 0x0000000000001000
|
||
|
- AbbrCode: 0x00000000
|
||
|
...
|