mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
bd57f5d5a7
We should align the value of the field, not the overall section offset. This distinction matters if one of the debug_names contributions is not of size which is a multiple of four. The dwarf producers may choose to emit rounded contributions, but they are not required to do so. In the latter case, without this patch we would corrupt the parsing state, as we would adjust the offset even if subsequent contributions contained correctly rounded augmentation strings. llvm-svn: 328796
102 lines
3.7 KiB
ArmAsm
102 lines
3.7 KiB
ArmAsm
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj -o - | llvm-dwarfdump -debug-names - | FileCheck %s
|
|
.section .debug_str,"MS",@progbits,1
|
|
.Linfo_string0:
|
|
.asciz "foo"
|
|
.Linfo_string1:
|
|
.asciz "bar"
|
|
|
|
# Fake .debug_info. We just need it for the offsets to two "compile units" and
|
|
# two "DIEs"
|
|
.section .debug_info,"",@progbits
|
|
.Lcu_begin0:
|
|
.byte 0
|
|
.Ldie0:
|
|
.byte 0
|
|
.Lcu_begin1:
|
|
.byte 0
|
|
.Ldie1:
|
|
.byte 0
|
|
|
|
.section .debug_names,"",@progbits
|
|
.long .Lnames_end0-.Lnames_start0 # Header: contribution length
|
|
.Lnames_start0:
|
|
.short 5 # Header: version
|
|
.short 0 # Header: padding
|
|
.long 1 # Header: compilation unit count
|
|
.long 0 # Header: local type unit count
|
|
.long 0 # Header: foreign type unit count
|
|
.long 0 # Header: bucket count
|
|
.long 1 # Header: name count
|
|
.long .Lnames_abbrev_end0-.Lnames_abbrev_start0 # Header: abbreviation table size
|
|
.long 0 # Header: augmentation length
|
|
.long .Lcu_begin0 # Compilation unit 0
|
|
.long .Linfo_string0 # String 1: foo
|
|
.long .Lnames0-.Lnames_entries0 # Offset 1
|
|
.Lnames_abbrev_start0:
|
|
.byte 46 # Abbrev code
|
|
.byte 46 # DW_TAG_subprogram
|
|
.byte 3 # DW_IDX_die_offset
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 0 # End of abbrev
|
|
.byte 0 # End of abbrev
|
|
.byte 0 # End of abbrev list
|
|
.Lnames_abbrev_end0:
|
|
.Lnames_entries0:
|
|
.Lnames0:
|
|
.byte 46 # Abbrev code
|
|
.long .Ldie0-.Lcu_begin0 # DW_IDX_die_offset
|
|
.long 0 # End of list: foo
|
|
.p2align 2
|
|
.byte 42 # Deliberately misalign the next contribution
|
|
.Lnames_end0:
|
|
|
|
.long .Lnames_end1-.Lnames_start1 # Header: contribution length
|
|
.Lnames_start1:
|
|
.short 5 # Header: version
|
|
.short 0 # Header: padding
|
|
.long 1 # Header: compilation unit count
|
|
.long 0 # Header: local type unit count
|
|
.long 0 # Header: foreign type unit count
|
|
.long 0 # Header: bucket count
|
|
.long 1 # Header: name count
|
|
.long .Lnames_abbrev_end1-.Lnames_abbrev_start1 # Header: abbreviation table size
|
|
.long 0 # Header: augmentation length
|
|
.long .Lcu_begin1 # Compilation unit 0
|
|
.long .Linfo_string1 # String 1: bar
|
|
.long .Lnames1-.Lnames_entries1 # Offset 1
|
|
.Lnames_abbrev_start1:
|
|
.byte 52 # Abbrev code
|
|
.byte 52 # DW_TAG_variable
|
|
.byte 3 # DW_IDX_die_offset
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 0 # End of abbrev
|
|
.byte 0 # End of abbrev
|
|
.byte 0 # End of abbrev list
|
|
.Lnames_abbrev_end1:
|
|
.Lnames_entries1:
|
|
.Lnames1:
|
|
.byte 52 # Abbrev code
|
|
.long .Ldie1-.Lcu_begin1 # DW_IDX_die_offset
|
|
.long 0 # End of list: bar
|
|
.p2align 2
|
|
.Lnames_end1:
|
|
# CHECK: Name Index @ 0x0
|
|
# CHECK: Name 1 {
|
|
# CHECK-NEXT: String: 0x00000000 "foo"
|
|
# CHECK-NEXT: Entry @ 0x37 {
|
|
# CHECK-NEXT: Abbrev: 0x2E
|
|
# CHECK-NEXT: Tag: DW_TAG_subprogram
|
|
# CHECK-NEXT: DW_IDX_die_offset: 0x00000001
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: }
|
|
|
|
# CHECK: Name Index @ 0x41
|
|
# CHECK: Name 1 {
|
|
# CHECK-NEXT: String: 0x00000004 "bar"
|
|
# CHECK-NEXT: Entry @ 0x78 {
|
|
# CHECK-NEXT: Abbrev: 0x34
|
|
# CHECK-NEXT: Tag: DW_TAG_variable
|
|
# CHECK-NEXT: DW_IDX_die_offset: 0x00000001
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: }
|