mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
f900b58379
It's not possible to do this in complete generality - a CU using a sec_offset DW_AT_ranges has no way of knowing where its rnglists contribution starts, so should not attempt to parse any full rnglist table/header to do so. And even using FORM_rnglistx there's no need to parse the header - the offset can be computed using the CU's DWARF format (32 or 64) to compute offset entry sizes, and then the list parsed at that offset without ever trying to find a rnglist contribution header immediately prior to the rnglists_base.
543 lines
25 KiB
ArmAsm
543 lines
25 KiB
ArmAsm
# RUN: llvm-mc %s -filetype obj -triple i386-pc-linux -o %t.o
|
|
# RUN: llvm-dwarfdump -v -debug-info -debug-line -debug-addr -debug-rnglists -debug-ranges %t.o | FileCheck --implicit-check-not=DW_TAG --implicit-check-not=DW_AT %s
|
|
|
|
# Test that llvm - dwarfdump strips addresses relating to dead code(using the
|
|
# DWARFv6 - proposed tombstone constant & nearest equivalent for debug_ranges)
|
|
# Testing the tombstone use in debug_info (addr/addrx), debug_ranges,
|
|
# debug_rnglists, debug_ranges, and debug_line.
|
|
|
|
# CHECK-DAG: .debug_info contents:
|
|
# CHECK: DW_TAG_compile_unit
|
|
# CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
|
|
# CHECK-NEXT: [0x00000042, 0x00000048))
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addr] (0xffffffff (dead code))
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addr] (0x00000042)
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_compile_unit
|
|
# CHECK: DW_AT_addr_base
|
|
# CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x0000000c
|
|
# CHECK-NEXT: [0x00000042, 0x00000048)
|
|
# CHECK-NEXT: [0x00000042, 0x00000048)
|
|
# CHECK-NEXT: [0x00000042, 0x00000048)
|
|
# CHECK-NEXT: [0x00000042, 0x00000042)
|
|
# CHECK-NEXT: [0x00000042, 0x00000048)
|
|
# CHECK-NEXT: [0x00000042, 0x00000048))
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0xffffffff (dead code))
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x00000042)
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_compile_unit
|
|
# CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000018
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000048))
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addr] (0xffffffffffffffff (dead code))
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000042)
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_compile_unit
|
|
# CHECK: DW_AT_addr_base
|
|
|
|
|
|
# CHECK: DW_AT_ranges
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000048)
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000048)
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000048)
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000042)
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000048)
|
|
# CHECK-NEXT: [0x0000000000000042, 0x0000000000000048))
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0xffffffffffffffff (dead code))
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000042)
|
|
# CHECK: DW_AT_high_pc [DW_FORM_data4] (0x00000006)
|
|
|
|
# CHECK-DAG: .debug_line contents:
|
|
# CHECK: Address Line
|
|
# CHECK-NEXT: --------------
|
|
# CHECK-NEXT: DW_LNE_set_address (0xffffffff)
|
|
# CHECK-NEXT: DW_LNS_copy
|
|
# CHECK-NEXT: DW_LNS_advance_pc (1)
|
|
# CHECK-NEXT: DW_LNE_end_sequence
|
|
# CHECK-NEXT: DW_LNE_set_address (0x00000042)
|
|
# CHECK-NEXT: DW_LNS_copy
|
|
# CHECK-NEXT: 0x0000000000000042 1
|
|
# CHECK-NEXT: DW_LNS_advance_pc (1)
|
|
# CHECK-NEXT: DW_LNE_end_sequence
|
|
# CHECK: Address Line
|
|
# CHECK-NEXT: --------------
|
|
# CHECK-NEXT: DW_LNE_set_address (0xffffffffffffffff)
|
|
# CHECK-NEXT: DW_LNS_copy
|
|
# CHECK-NEXT: DW_LNS_advance_pc (1)
|
|
# CHECK-NEXT: DW_LNE_end_sequence
|
|
# CHECK-NEXT: DW_LNE_set_address (0x0000000000000042)
|
|
# CHECK-NEXT: DW_LNS_copy
|
|
# CHECK-NEXT: 0x0000000000000042 1
|
|
# CHECK-NEXT: DW_LNS_advance_pc (1)
|
|
# CHECK-NEXT: DW_LNE_end_sequence
|
|
|
|
# Dumping of the debug_addr, ranges, and rnglists sections don't do anything
|
|
# different with tombstoned addresses, but dump them just for
|
|
# documentation/comparison with the tombstone-filtered renderings in the
|
|
# debug_info section above
|
|
|
|
# CHECK-DAG: .debug_addr contents:
|
|
# CHECK-NEXT: addr_size = 0x04
|
|
# CHECK-NEXT: Addrs: [
|
|
# CHECK-NEXT: 0xffffffff
|
|
# CHECK-NEXT: 0x00000042
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: addr_size = 0x08
|
|
# CHECK-NEXT: Addrs: [
|
|
# CHECK-NEXT: 0xffffffffffffffff
|
|
# CHECK-NEXT: 0x0000000000000042
|
|
# CHECK-NEXT: ]
|
|
|
|
# CHECK-DAG: .debug_ranges contents:
|
|
# CHECK-NEXT: fffffffe fffffffe
|
|
# CHECK-NEXT: 00000042 00000048
|
|
# CHECK-NEXT: <End of list>
|
|
# FIXME: Would be nice if we didn't assume all the contributions were of the
|
|
# same address size, instead dumping them based on the address size of
|
|
# the unit that references them. Maybe optimistically guessing at any
|
|
# unreferenced chunks. (this would be more like libdwarf/dwarfdump).
|
|
# But for now, these 64bit address ranges are mangled/being rendered
|
|
# here as though they were a 32 bit address range.
|
|
# CHECK-NEXT: fffffffe ffffffff
|
|
# CHECK-NEXT: fffffffe ffffffff
|
|
# CHECK-NEXT: 00000042 00000000
|
|
# CHECK-NEXT: 00000048 00000000
|
|
# CHECK-NEXT: <End of list>
|
|
|
|
# CHECK-DAG: .debug_rnglists contents:
|
|
# CHECK-NEXT: addr_size = 0x04
|
|
# CHECK-NEXT: ranges:
|
|
# CHECK-NEXT: [DW_RLE_start_length ]: 0xffffffff, 0x00000006
|
|
# CHECK-NEXT: [DW_RLE_start_length ]: 0x00000042, 0x00000006
|
|
# CHECK-NEXT: [DW_RLE_startx_length]: 0x00000000, 0x00000006
|
|
# CHECK-NEXT: [DW_RLE_startx_length]: 0x00000001, 0x00000006
|
|
# CHECK-NEXT: [DW_RLE_start_end ]: [0xffffffff, 0xffffffff)
|
|
# CHECK-NEXT: [DW_RLE_start_end ]: [0x00000042, 0x00000048)
|
|
# CHECK-NEXT: [DW_RLE_startx_endx ]: 0x00000000, 0x00000000
|
|
# CHECK-NEXT: [DW_RLE_startx_endx ]: 0x00000001, 0x00000001
|
|
# CHECK-NEXT: [DW_RLE_base_address ]: 0x00000040
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x00000002, 0x00000008 => [0x00000042, 0x00000048)
|
|
# CHECK-NEXT: [DW_RLE_base_address ]: 0xffffffff
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x00000002, 0x00000008 => dead code
|
|
# CHECK-NEXT: [DW_RLE_base_addressx]: 0x00000000
|
|
# FIXME: Don't print "computed" values that aren't really computed/instead
|
|
# still refer to the index instead of the resulting address
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x00000000, 0x00000006 => [0x00000000, 0x00000006)
|
|
# CHECK-NEXT: [DW_RLE_base_addressx]: 0x00000001
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x00000000, 0x00000006 => [0x00000001, 0x00000007)
|
|
# CHECK-NEXT: [DW_RLE_end_of_list ]
|
|
# CHECK-NEXT: addr_size = 0x08
|
|
# CHECK-NEXT: ranges:
|
|
# CHECK-NEXT: [DW_RLE_start_length ]: 0xffffffffffffffff, 0x0000000000000006
|
|
# CHECK-NEXT: [DW_RLE_start_length ]: 0x0000000000000042, 0x0000000000000006
|
|
# CHECK-NEXT: [DW_RLE_startx_length]: 0x0000000000000000, 0x0000000000000006
|
|
# CHECK-NEXT: [DW_RLE_startx_length]: 0x0000000000000001, 0x0000000000000006
|
|
# CHECK-NEXT: [DW_RLE_start_end ]: [0xffffffffffffffff, 0xffffffffffffffff)
|
|
# CHECK-NEXT: [DW_RLE_start_end ]: [0x0000000000000042, 0x0000000000000048)
|
|
# CHECK-NEXT: [DW_RLE_startx_endx ]: 0x0000000000000000, 0x0000000000000000
|
|
# CHECK-NEXT: [DW_RLE_startx_endx ]: 0x0000000000000001, 0x0000000000000001
|
|
# CHECK-NEXT: [DW_RLE_base_address ]: 0x0000000000000040
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x0000000000000002, 0x0000000000000008 => [0x0000000000000042, 0x0000000000000048)
|
|
# CHECK-NEXT: [DW_RLE_base_address ]: 0xffffffffffffffff
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x0000000000000002, 0x0000000000000008 => dead code
|
|
# CHECK-NEXT: [DW_RLE_base_addressx]: 0x0000000000000000
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x0000000000000006 => [0x0000000000000000, 0x0000000000000006)
|
|
# CHECK-NEXT: [DW_RLE_base_addressx]: 0x0000000000000001
|
|
# CHECK-NEXT: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x0000000000000006 => [0x0000000000000001, 0x0000000000000007)
|
|
# CHECK-NEXT: [DW_RLE_end_of_list ]
|
|
|
|
.section .debug_abbrev,"",@progbits
|
|
.Ldebug_abbrev4:
|
|
.byte 1 # Abbreviation Code
|
|
.byte 17 # DW_TAG_compile_unit
|
|
.byte 1 # DW_CHILDREN_yes
|
|
.byte 85 # DW_AT_ranges
|
|
.byte 23 # DW_FORM_sec_offset
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 2 # Abbreviation Code
|
|
.byte 46 # DW_TAG_subprogram
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 17 # DW_AT_low_pc
|
|
.byte 1 # DW_FORM_addr
|
|
.byte 18 # DW_AT_high_pc
|
|
.byte 6 # DW_FORM_data4
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 0 # EOM(3)
|
|
.Ldebug_abbrev5:
|
|
.byte 1 # Abbreviation Code
|
|
.byte 17 # DW_TAG_compile_unit
|
|
.byte 1 # DW_CHILDREN_yes
|
|
.byte 115 # DW_AT_addr_base
|
|
.byte 23 # DW_FORM_sec_offset
|
|
.byte 85 # DW_AT_ranges
|
|
.byte 23 # DW_FORM_sec_offset
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 2 # Abbreviation Code
|
|
.byte 46 # DW_TAG_subprogram
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 17 # DW_AT_low_pc
|
|
.byte 27 # DW_FORM_addrx
|
|
.byte 18 # DW_AT_high_pc
|
|
.byte 6 # DW_FORM_data4
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 0 # EOM(3)
|
|
|
|
.section .debug_info,"",@progbits
|
|
.long .Ldebug_info4_end-.Ldebug_info4_begin # Length of Unit
|
|
.Ldebug_info4_begin:
|
|
.short 4 # DWARF version number
|
|
.long .Ldebug_abbrev4 # Offset Into Abbrev. Section
|
|
.byte 4 # Address Size (in bytes)
|
|
.byte 1 # Abbrev [1] 0xb:0x4a DW_TAG_compile_unit
|
|
.long .Ldebug_ranges # DW_AT_ranges
|
|
.byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_subprogram
|
|
.long 0xffffffff # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 2 # Abbrev [2] 0x3f:0x15 DW_TAG_subprogram
|
|
.long 0x42 # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info4_end:
|
|
.long .Ldebug_info5_end-.Ldebug_info5_begin # Length of Unit
|
|
.Ldebug_info5_begin:
|
|
.short 5 # DWARF version number
|
|
.byte 1 # DWARF Unit Type
|
|
.byte 4 # Address Size (in bytes)
|
|
.long .Ldebug_abbrev5 # Offset Into Abbrev. Section
|
|
.byte 1 # Abbrev [1] 0xb:0x4a DW_TAG_compile_unit
|
|
.long .Ldebug_addr_base # DW_AT_addr_base
|
|
.long .Ldebug_rnglists # DW_AT_ranges
|
|
.byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_subprogram
|
|
.uleb128 0 # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 2 # Abbrev [2] 0x3f:0x15 DW_TAG_subprogram
|
|
.uleb128 1 # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info5_end:
|
|
.long .Ldebug_info4_64_end-.Ldebug_info4_64_begin # Length of Unit
|
|
.Ldebug_info4_64_begin:
|
|
.short 4 # DWARF version number
|
|
.long .Ldebug_abbrev4 # Offset Into Abbrev. Section
|
|
.byte 8 # Address Size (in bytes)
|
|
.byte 1 # Abbrev [1] 0xb:0x4a DW_TAG_compile_unit
|
|
.long .Ldebug_ranges_64 # DW_AT_ranges
|
|
.byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_subprogram
|
|
.quad 0xffffffffffffffff # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 2 # Abbrev [2] 0x3f:0x15 DW_TAG_subprogram
|
|
.quad 0x42 # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info4_64_end:
|
|
.long .Ldebug_info5_64_end-.Ldebug_info5_64_begin # Length of Unit
|
|
.Ldebug_info5_64_begin:
|
|
.short 5 # DWARF version number
|
|
.byte 1 # DWARF Unit Type
|
|
.byte 8 # Address Size (in bytes)
|
|
.long .Ldebug_abbrev5 # Offset Into Abbrev. Section
|
|
.byte 1 # Abbrev [1] 0xb:0x4a DW_TAG_compile_unit
|
|
.long .Ldebug_addr_64_base # DW_AT_addr_base
|
|
.long .Ldebug_rnglists_64 # DW_AT_ranges
|
|
.byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_subprogram
|
|
.uleb128 0 # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 2 # Abbrev [2] 0x3f:0x15 DW_TAG_subprogram
|
|
.uleb128 1 # DW_AT_low_pc
|
|
.long 0x6 # DW_AT_high_pc
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info5_64_end:
|
|
|
|
.section .debug_ranges,"",@progbits
|
|
.Ldebug_ranges:
|
|
.long 0xfffffffe
|
|
.long 0xfffffffe
|
|
.long 0x42
|
|
.long 0x48
|
|
.long 0
|
|
.long 0
|
|
.Ldebug_ranges_64:
|
|
.quad 0xfffffffffffffffe
|
|
.quad 0xfffffffffffffffe
|
|
.quad 0x42
|
|
.quad 0x48
|
|
.quad 0
|
|
.quad 0
|
|
|
|
.section .debug_rnglists,"",@progbits
|
|
.long .Ldebug_rnglists_end-.Ldebug_rnglists_begin # Length
|
|
.Ldebug_rnglists_begin:
|
|
.short 5 # Version
|
|
.byte 4 # Address size
|
|
.byte 0 # Segment selector size
|
|
.long 0 # Offset entry count
|
|
.Ldebug_rnglists:
|
|
.byte 7 # DW_RLE_start_length
|
|
.long 0xffffffff # start address
|
|
.uleb128 0x6 # length
|
|
.byte 7 # DW_RLE_start_length
|
|
.long 0x42 # start address
|
|
.uleb128 0x6 # length
|
|
.byte 3 # DW_RLE_startx_length
|
|
.uleb128 0 # start index
|
|
.uleb128 0x6 # length
|
|
.byte 3 # DW_RLE_startx_length
|
|
.uleb128 1 # start index
|
|
.uleb128 0x6 # length
|
|
.byte 6 # DW_RLE_start_end
|
|
.long 0xffffffff # start address
|
|
.long 0xffffffff # end address
|
|
.byte 6 # DW_RLE_start_end
|
|
.long 0x42 # start address
|
|
.long 0x48 # length
|
|
.byte 2 # DW_RLE_startx_endx
|
|
.uleb128 0 # start index
|
|
.uleb128 0 # end index
|
|
.byte 2 # DW_RLE_startx_endx
|
|
.uleb128 1 # start index
|
|
.uleb128 1 # end index
|
|
.byte 5 # DW_RLE_base_address
|
|
.long 0x40 # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 2 # start offset
|
|
.uleb128 8 # end offset
|
|
.byte 5 # DW_RLE_base_address
|
|
.long 0xffffffff # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 2 # start offset
|
|
.uleb128 8 # end offset
|
|
.byte 1 # DW_RLE_base_addressx
|
|
.uleb128 0 # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 0 # start offset
|
|
.uleb128 6 # end offset
|
|
.byte 1 # DW_RLE_base_addressx
|
|
.uleb128 1 # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 0 # start offset
|
|
.uleb128 6 # end offset
|
|
.byte 0 # DW_RLE_end_of_list
|
|
.Ldebug_rnglists_end:
|
|
.long .Ldebug_rnglists_64_end-.Ldebug_rnglists_64_begin # Length
|
|
.Ldebug_rnglists_64_begin:
|
|
.short 5 # Version
|
|
.byte 8 # Address size
|
|
.byte 0 # Segment selector size
|
|
.long 0 # Offset entry count
|
|
.Ldebug_rnglists_64:
|
|
.byte 7 # DW_RLE_start_length
|
|
.quad 0xffffffffffffffff # start address
|
|
.uleb128 0x6 # length
|
|
.byte 7 # DW_RLE_start_length
|
|
.quad 0x42 # start address
|
|
.uleb128 0x6 # length
|
|
.byte 3 # DW_RLE_startx_length
|
|
.uleb128 0 # start index
|
|
.uleb128 0x6 # length
|
|
.byte 3 # DW_RLE_startx_length
|
|
.uleb128 1 # start index
|
|
.uleb128 0x6 # length
|
|
.byte 6 # DW_RLE_start_end
|
|
.quad 0xffffffffffffffff # start address
|
|
.quad 0xffffffffffffffff # end address
|
|
.byte 6 # DW_RLE_start_end
|
|
.quad 0x42 # start address
|
|
.quad 0x48 # length
|
|
.byte 2 # DW_RLE_startx_endx
|
|
.uleb128 0 # start index
|
|
.uleb128 0 # end index
|
|
.byte 2 # DW_RLE_startx_endx
|
|
.uleb128 1 # start index
|
|
.uleb128 1 # end index
|
|
.byte 5 # DW_RLE_base_address
|
|
.quad 0x40 # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 2 # start offset
|
|
.uleb128 8 # end offset
|
|
.byte 5 # DW_RLE_base_address
|
|
.quad 0xffffffffffffffff # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 2 # start offset
|
|
.uleb128 8 # end offset
|
|
.byte 1 # DW_RLE_base_addressx
|
|
.uleb128 0 # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 0 # start offset
|
|
.uleb128 6 # end offset
|
|
.byte 1 # DW_RLE_base_addressx
|
|
.uleb128 1 # address
|
|
.byte 4 # DW_RLE_offset_pair
|
|
.uleb128 0 # start offset
|
|
.uleb128 6 # end offset
|
|
.byte 0 # DW_RLE_end_of_list
|
|
.Ldebug_rnglists_64_end:
|
|
|
|
.section .debug_addr,"",@progbits
|
|
.long .Ldebug_addr_end-.Ldebug_addr_begin # Length of contribution
|
|
.Ldebug_addr_begin:
|
|
.short 5 # DWARF version number
|
|
.byte 4 # Address size
|
|
.byte 0 # Segment selector size
|
|
.Ldebug_addr_base:
|
|
.long 0xffffffff
|
|
.long 0x42
|
|
.Ldebug_addr_end:
|
|
.long .Ldebug_addr_64_end-.Ldebug_addr_64_begin # Length of contribution
|
|
.Ldebug_addr_64_begin:
|
|
.short 5 # DWARF version number
|
|
.byte 8 # Address size
|
|
.byte 0 # Segment selector size
|
|
.Ldebug_addr_64_base:
|
|
.quad 0xffffffffffffffff
|
|
.quad 0x42
|
|
.Ldebug_addr_64_end:
|
|
|
|
.section .debug_line,"",@progbits
|
|
.Ldebug_line5:
|
|
.long .Ldebug_line5_end-.Ldebug_line5_begin # Length of Unit (DWARF-32 format)
|
|
.Ldebug_line5_begin:
|
|
.short 5 # DWARF version number
|
|
.byte 4 # Address Size
|
|
.byte 0 # Segment Selector Size
|
|
.long .Ldebug_line5_header_end-.Ldebug_line5_header_begin # Length of Prologue
|
|
.Ldebug_line5_header_begin:
|
|
.byte 1 # Minimum Instruction Length
|
|
.byte 1 # Maximum Operations per Instruction
|
|
.byte 1 # Default is_stmt
|
|
.byte -5 # Line Base
|
|
.byte 14 # Line Range
|
|
.byte 13 # Opcode Base
|
|
.byte 0 # Standard Opcode Lengths
|
|
.byte 1
|
|
.byte 1
|
|
.byte 1
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 1
|
|
# Directory table format
|
|
.byte 1 # One element per directory entry
|
|
.byte 1 # DW_LNCT_path
|
|
.byte 0x08 # DW_FORM_string
|
|
# Directory table entries
|
|
.byte 1 # Two directory entries
|
|
.asciz "dir1"
|
|
# File table format
|
|
.byte 2 # Four elements per file entry
|
|
.byte 2 # DW_LNCT_directory_index
|
|
.byte 0x0b # DW_FORM_data1
|
|
.byte 1 # DW_LNCT_path
|
|
.byte 0x08 # DW_FORM_string
|
|
# File table entries
|
|
.byte 1 # Two file entries
|
|
.byte 1
|
|
.asciz "file1"
|
|
.Ldebug_line5_header_end:
|
|
.byte 0 # Extended opcode
|
|
.byte 5 # Size 5
|
|
.byte 2 # Opcode: DW_LNE_set_address
|
|
.long 0xffffffff # address
|
|
.byte 1 # DW_LNS_copy
|
|
.byte 2 # DW_LNS_advance_pc
|
|
.uleb128 1 # instruction increment
|
|
.byte 0 # Extended opcode
|
|
.byte 1 # Size 1
|
|
.byte 1 # Opcode: DW_LNE_end_sequence
|
|
.byte 0 # Extended opcode
|
|
.byte 5 # Size 5
|
|
.byte 2 # Opcode: DW_LNE_set_address
|
|
.long 0x42 # address
|
|
.byte 1 # DW_LNS_copy
|
|
.byte 2 # DW_LNS_advance_pc
|
|
.uleb128 1 # instruction increment
|
|
.byte 0 # Extended opcode
|
|
.byte 1 # Size 1
|
|
.byte 1 # Opcode: DW_LNE_end_sequence
|
|
.Ldebug_line5_end:
|
|
|
|
.Ldebug_line5_64:
|
|
.long .Ldebug_line5_64_end-.Ldebug_line5_64_begin # Length of Unit (DWARF-32 format)
|
|
.Ldebug_line5_64_begin:
|
|
.short 5 # DWARF version number
|
|
.byte 8 # Address Size
|
|
.byte 0 # Segment Selector Size
|
|
.long .Ldebug_line5_64_header_end-.Ldebug_line5_64_header_begin # Length of Prologue
|
|
.Ldebug_line5_64_header_begin:
|
|
.byte 1 # Minimum Instruction Length
|
|
.byte 1 # Maximum Operations per Instruction
|
|
.byte 1 # Default is_stmt
|
|
.byte -5 # Line Base
|
|
.byte 14 # Line Range
|
|
.byte 13 # Opcode Base
|
|
.byte 0 # Standard Opcode Lengths
|
|
.byte 1
|
|
.byte 1
|
|
.byte 1
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 1
|
|
# Directory table format
|
|
.byte 1 # One element per directory entry
|
|
.byte 1 # DW_LNCT_path
|
|
.byte 0x08 # DW_FORM_string
|
|
# Directory table entries
|
|
.byte 1 # Two directory entries
|
|
.asciz "dir1"
|
|
# File table format
|
|
.byte 2 # Four elements per file entry
|
|
.byte 2 # DW_LNCT_directory_index
|
|
.byte 0x0b # DW_FORM_data1
|
|
.byte 1 # DW_LNCT_path
|
|
.byte 0x08 # DW_FORM_string
|
|
# File table entries
|
|
.byte 1 # Two file entries
|
|
.byte 1
|
|
.asciz "file1"
|
|
.Ldebug_line5_64_header_end:
|
|
.byte 0 # Extended opcode
|
|
.byte 9 # Size 9
|
|
.byte 2 # Opcode: DW_LNE_set_address
|
|
.quad 0xffffffffffffffff # address
|
|
.byte 1 # DW_LNS_copy
|
|
.byte 2 # DW_LNS_advance_pc
|
|
.uleb128 1 # instruction increment
|
|
.byte 0 # Extended opcode
|
|
.byte 1 # Size 1
|
|
.byte 1 # Opcode: DW_LNE_end_sequence
|
|
.byte 0 # Extended opcode
|
|
.byte 9 # Size 9
|
|
.byte 2 # Opcode: DW_LNE_set_address
|
|
.quad 0x42 # address
|
|
.byte 1 # DW_LNS_copy
|
|
.byte 2 # DW_LNS_advance_pc
|
|
.uleb128 1 # instruction increment
|
|
.byte 0 # Extended opcode
|
|
.byte 1 # Size 1
|
|
.byte 1 # Opcode: DW_LNE_end_sequence
|
|
.Ldebug_line5_64_end:
|
|
|