1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
## The test checks that llvm-dwp avoids an out of bound access when there is
## an unknown section identifier in an index section. Without the fix, the test
## failed when LLVM is built with UBSan.
## Note that additional sections (.debug_abbrev.dwo, .debug_info.dwo, and
## .debug_types.dwo) are required to reach the test points in the code.
# RUN: llvm-mc -triple x86_64-unknown-linux-gnu %s -filetype=obj -o %t.dwp
# RUN: llvm-dwp %t.dwp -o - | \
# RUN: llvm-dwarfdump -debug-cu-index -debug-tu-index - | \
# RUN: FileCheck %s
## Check that all known sections are preserved and no data for unknown section
## identifiers is copied.
# CHECK: .debug_cu_index contents:
# CHECK-NEXT: version = 2, units = 1, slots = 2
# CHECK: Index Signature INFO ABBREV
# CHECK-NOT: Unknown
# CHECK: -----
# CHECK-NEXT: 1 0x1100002222222222 [0x00000000, 0x00000014) [0x00000000, 0x00000009)
# CHECK-NOT: [
# CHECK: .debug_tu_index contents:
# CHECK-NEXT: version = 2, units = 1, slots = 2
# CHECK: Index Signature TYPES ABBREV
# CHECK-NOT: Unknown
# CHECK: -----
# CHECK-NEXT: 2 0x1100003333333333 [0x00000000, 0x00000019) [0x00000009, 0x00000014)
# CHECK-NOT: [
.section .debug_abbrev.dwo, "e", @progbits
.LCUAbbrevBegin:
.uleb128 1 # Abbreviation Code
.uleb128 0x11 # DW_TAG_compile_unit
.byte 0 # DW_CHILDREN_no
.uleb128 0x2131 # DW_AT_GNU_dwo_id
.uleb128 7 # DW_FORM_data8
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.LCUAbbrevEnd:
.LTUAbbrevBegin:
.uleb128 1 # Abbreviation Code
.uleb128 0x41 # DW_TAG_type_unit
.byte 1 # DW_CHILDREN_yes
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.uleb128 2 # Abbreviation Code
.uleb128 0x13 # DW_TAG_structure_type
.byte 0 # DW_CHILDREN_no
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.LTUAbbrevEnd:
.section .debug_info.dwo, "e", @progbits
.LCUBegin:
.long .LCUEnd-.LCUVersion # Length of Unit
.LCUVersion:
.short 4 # Version
.long 0 # Abbrev offset
.byte 8 # Address size
.uleb128 1 # Abbrev [1] DW_TAG_compile_unit
.quad 0x1100002222222222 # DW_AT_GNU_dwo_id
.LCUEnd:
.section .debug_types.dwo, "e", @progbits
.LTUBegin:
.long .LTUEnd-.LTUVersion # Length of Unit
.LTUVersion:
.short 4 # Version
.long 0 # Abbrev offset
.byte 8 # Address size
.quad 0x1100003333333333 # Type signature
.long .LTUType-.LTUBegin # Type offset
.uleb128 1 # Abbrev [1] DW_TAG_type_unit
.LTUType:
.uleb128 2 # Abbrev [2] DW_TAG_structure_type
.LTUEnd:
.section .debug_cu_index, "", @progbits
## Header:
.long 2 # Version
.long 4 # Section count
.long 1 # Unit count
.long 2 # Slot count
## Hash Table of Signatures:
.quad 0x1100002222222222
.quad 0
## Parallel Table of Indexes:
.long 1
.long 0
## Table of Section Offsets:
## Row 0:
.long 1 # DW_SECT_INFO
.long 3 # DW_SECT_ABBREV
.long 0 # Invalid ID, less than DW_SECT_INFO
.long 9 # Invalid ID, greater than DW_SECT_MACRO
## Row 1:
.long 0 # Offset in .debug_info.dwo
.long 0 # Offset in .debug_abbrev.dwo
.long 0
.long 0
## Table of Section Sizes:
.long .LCUEnd-.LCUBegin # Size in .debug_info.dwo
.long .LCUAbbrevEnd-.LCUAbbrevBegin # Size in .debug_abbrev.dwo
.long 1
.long 1
.section .debug_tu_index, "", @progbits
## Header:
.long 2 # Version
.long 4 # Section count
.long 1 # Unit count
.long 2 # Slot count
## Hash Table of Signatures:
.quad 0
.quad 0x1100003333333333
## Parallel Table of Indexes:
.long 0
.long 1
## Table of Section Offsets:
## Row 0:
.long 2 # DW_SECT_TYPES
.long 3 # DW_SECT_ABBREV
.long 0 # Invalid ID, less than DW_SECT_INFO
.long 9 # Invalid ID, greater than DW_SECT_MACRO
## Row 1:
.long 0 # Offset in .debug_types.dwo
.long .LTUAbbrevBegin-.debug_abbrev.dwo # Offset in .debug_abbrev.dwo
.long 0
.long 0
## Table of Section Sizes:
.long .LTUEnd-.LTUBegin # Size in .debug_types.dwo
.long .LTUAbbrevEnd-.LTUAbbrevBegin # Size in .debug_abbrev.dwo
.long 1
.long 1
|