mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
assembly source when it generates the TAG_subprogram dwarf debug info for the labels that have nothing between them as in this bit of assembly source: % cat ZeroLength.s _func1: _func2: nop One solution would be to not emit the subsequent labels with the same address and use the next label with a different address or the end of the section for the AT_high_pc value of the TAG_subprogram. Turns out in llvm-mc it is not possible in all cases to determine of two symbols have the same value at the point we put out the TAG_subprogram dwarf debug info. So we will have llvm-mc instead of putting out TAG_subprogram's put out DW_TAG_label's. And the DW_TAG_label does not have a AT_high_pc value which avoids the problem. This commit is only the functional change to make the diffs clear as to what is really being changed. The next commit will be to clean up the names of such things like MCGenDwarfSubprogramEntry to something like MCGenDwarfLabelEntry. rdar://10666925 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147860 91177308-0d34-0410-b5e6-96231b3b80d8
123 lines
4.6 KiB
ArmAsm
123 lines
4.6 KiB
ArmAsm
// RUN: llvm-mc -g -triple i386-apple-darwin10 %s -filetype=obj -o %t
|
|
// RUN: llvm-dwarfdump %t | FileCheck %s
|
|
|
|
.globl _bar
|
|
_bar:
|
|
movl $0, %eax
|
|
L1: leave
|
|
ret
|
|
_foo:
|
|
_baz:
|
|
nop
|
|
.data
|
|
_x: .long 1
|
|
|
|
// CHECK: file format Mach-O 32-bit i386
|
|
|
|
// CHECK: .debug_abbrev contents:
|
|
// CHECK: Abbrev table for offset: 0x00000000
|
|
// CHECK: [1] DW_TAG_compile_unit DW_CHILDREN_yes
|
|
// CHECK: DW_AT_stmt_list DW_FORM_data4
|
|
// CHECK: DW_AT_low_pc DW_FORM_addr
|
|
// CHECK: DW_AT_high_pc DW_FORM_addr
|
|
// CHECK: DW_AT_name DW_FORM_string
|
|
// CHECK: DW_AT_comp_dir DW_FORM_string
|
|
// CHECK: DW_AT_producer DW_FORM_string
|
|
// CHECK: DW_AT_language DW_FORM_data2
|
|
|
|
// CHECK: [2] DW_TAG_label DW_CHILDREN_yes
|
|
// CHECK: DW_AT_name DW_FORM_string
|
|
// CHECK: DW_AT_decl_file DW_FORM_data4
|
|
// CHECK: DW_AT_decl_line DW_FORM_data4
|
|
// CHECK: DW_AT_low_pc DW_FORM_addr
|
|
// CHECK: DW_AT_prototyped DW_FORM_flag
|
|
|
|
// CHECK: [3] DW_TAG_unspecified_parameters DW_CHILDREN_no
|
|
|
|
|
|
// CHECK: .debug_info contents:
|
|
|
|
// We don't check the leading addresses these are at.
|
|
// CHECK: DW_TAG_compile_unit [1] *
|
|
// CHECK: DW_AT_stmt_list [DW_FORM_data4] (0x00000000)
|
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
|
|
// CHECK: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000008)
|
|
// We don't check the file name as it is a temp directory
|
|
// CHECK: DW_AT_name [DW_FORM_string]
|
|
// We don't check the DW_AT_comp_dir which is the current working directory
|
|
// CHECK: DW_AT_producer [DW_FORM_string] ("llvm-mc (based on {{.*}})")
|
|
// CHECK: DW_AT_language [DW_FORM_data2] (0x8001)
|
|
|
|
// CHECK: DW_TAG_label [2] *
|
|
// CHECK: DW_AT_name [DW_FORM_string] ("bar")
|
|
// CHECK: DW_AT_decl_file [DW_FORM_data4] (0x00000001)
|
|
// CHECK: DW_AT_decl_line [DW_FORM_data4] (0x00000005)
|
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
|
|
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
|
|
|
// CHECK: DW_TAG_unspecified_parameters [3]
|
|
|
|
// CHECK: NULL
|
|
|
|
// CHECK: DW_TAG_label [2] *
|
|
// CHECK: DW_AT_name [DW_FORM_string] ("foo")
|
|
// CHECK: DW_AT_decl_file [DW_FORM_data4] (0x00000001)
|
|
// CHECK: DW_AT_decl_line [DW_FORM_data4] (0x00000009)
|
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007)
|
|
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
|
|
|
// CHECK: DW_TAG_unspecified_parameters [3]
|
|
|
|
// CHECK: NULL
|
|
|
|
// CHECK: DW_TAG_label [2] *
|
|
// CHECK: DW_AT_name [DW_FORM_string] ("baz")
|
|
// CHECK: DW_AT_decl_file [DW_FORM_data4] (0x00000001)
|
|
// CHECK: DW_AT_decl_line [DW_FORM_data4] (0x0000000a)
|
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007)
|
|
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
|
|
|
// CHECK: DW_TAG_unspecified_parameters [3]
|
|
|
|
// CHECK: NULL
|
|
|
|
// CHECK: NULL
|
|
|
|
// CHECK: .debug_aranges contents:
|
|
// CHECK: Address Range Header: length = 0x0000001c, version = 0x0002, cu_offset = 0x00000000, addr_size = 0x04, seg_size = 0x00
|
|
|
|
// CHECK: .debug_lines contents:
|
|
// CHECK: Line table prologue:
|
|
// We don't check the total_length as it includes lengths of temp paths
|
|
// CHECK: version: 2
|
|
// We don't check the prologue_length as it too includes lengths of temp paths
|
|
// CHECK: min_inst_length: 1
|
|
// CHECK: default_is_stmt: 1
|
|
// CHECK: line_base: -5
|
|
// CHECK: line_range: 14
|
|
// CHECK: opcode_base: 13
|
|
// CHECK: standard_opcode_lengths[DW_LNS_copy] = 0
|
|
// CHECK: standard_opcode_lengths[DW_LNS_advance_pc] = 1
|
|
// CHECK: standard_opcode_lengths[DW_LNS_advance_line] = 1
|
|
// CHECK: standard_opcode_lengths[DW_LNS_set_file] = 1
|
|
// CHECK: standard_opcode_lengths[DW_LNS_set_column] = 1
|
|
// CHECK: standard_opcode_lengths[DW_LNS_negate_stmt] = 0
|
|
// CHECK: standard_opcode_lengths[DW_LNS_set_basic_block] = 0
|
|
// CHECK: standard_opcode_lengths[DW_LNS_const_add_pc] = 0
|
|
// CHECK: standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
|
|
// CHECK: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
|
|
// CHECK: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
|
|
// CHECK: standard_opcode_lengths[DW_LNS_set_isa] = 1
|
|
// We don't check include_directories as it has a temp path
|
|
// CHECK: Dir Mod Time File Len File Name
|
|
// CHECK: ---- ---------- ---------- ---------------------------
|
|
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 gen-dwarf.s
|
|
|
|
// CHECK: Address Line Column File ISA Flags
|
|
// CHECK: ------------------ ------ ------ ------ --- -------------
|
|
// CHECK: 0x0000000000000000 6 0 1 0 is_stmt
|
|
// CHECK: 0x0000000000000005 7 0 1 0 is_stmt
|
|
// CHECK: 0x0000000000000006 8 0 1 0 is_stmt
|
|
// CHECK: 0x0000000000000007 11 0 1 0 is_stmt
|
|
// CHECK: 0x0000000000000008 11 0 1 0 is_stmt end_sequence
|