blob: 9afb272b3496f123223a8855b2a14ff930b872c8 [file] [log] [blame] [edit]
## Test that inline function resolution works when the function has been split
## into multiple discontinuous parts (and those parts are placed in different
## sections)
# RUN: llvm-mc -triple x86_64-pc-linux -filetype=obj %s -o %t
# RUN: %lldb %t -o "image lookup -v -n look_me_up" -o exit | FileCheck %s
# CHECK: 1 match found in {{.*}}
# CHECK: Summary: {{.*}}`foo - 3 [inlined] foo_inl + 1
# CHECK-NEXT: {{.*}}`foo - 4
# CHECK: Blocks: id = {{.*}}, ranges = [0x00000000-0x00000004)[0x00000005-0x00000008)
# CHECK-NEXT: id = {{.*}}, ranges = [0x00000001-0x00000003)[0x00000006-0x00000007), name = "foo_inl"
.text
.section .text.__part1,"ax",@progbits
foo.__part.1:
nop
.Lfoo_inl.__part.1:
nop
.type look_me_up,@function
look_me_up:
nop
.Lfoo_inl.__part.1_end:
nop
.Lfoo.__part.1_end:
.size foo.__part.1, .Lfoo.__part.1_end-foo.__part.1
bar:
nop
.Lbar_end:
.size bar, .Lbar_end-bar
.type foo,@function
foo:
nop
.Lfoo_inl:
nop
.Lfoo_inl_end:
nop
.Lfoo_end:
.size foo, .Lfoo_end-foo
.section .debug_abbrev,"",@progbits
.byte 1 # Abbreviation Code
.byte 17 # DW_TAG_compile_unit
.byte 1 # DW_CHILDREN_yes
.byte 37 # DW_AT_producer
.byte 8 # DW_FORM_string
.byte 19 # DW_AT_language
.byte 5 # DW_FORM_data2
.byte 17 # DW_AT_low_pc
.byte 1 # DW_FORM_addr
.byte 85 # DW_AT_ranges
.byte 35 # DW_FORM_rnglistx
.byte 116 # DW_AT_rnglists_base
.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 3 # DW_AT_name
.byte 8 # DW_FORM_string
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 3 # Abbreviation Code
.byte 46 # DW_TAG_subprogram
.byte 1 # DW_CHILDREN_yes
.byte 85 # DW_AT_ranges
.byte 35 # DW_FORM_rnglistx
.byte 3 # DW_AT_name
.byte 8 # DW_FORM_string
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 4 # Abbreviation Code
.byte 29 # DW_TAG_inlined_subroutine
.byte 0 # DW_CHILDREN_no
.byte 85 # DW_AT_ranges
.byte 35 # DW_FORM_rnglistx
.byte 49 # DW_AT_abstract_origin
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.section .debug_info,"",@progbits
.Lcu_begin0:
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
.Ldebug_info_start0:
.short 5 # DWARF version number
.byte 1 # DWARF Unit Type
.byte 8 # Address Size (in bytes)
.long .debug_abbrev # Offset Into Abbrev. Section
.byte 1 # Abbrev DW_TAG_compile_unit
.asciz "Hand-written DWARF" # DW_AT_producer
.short 29 # DW_AT_language
.quad 0 # DW_AT_low_pc
.byte 1 # DW_AT_ranges
.long .Lrnglists_table_base0 # DW_AT_rnglists_base
.byte 3 # Abbrev DW_TAG_subprogram
.byte 2 # DW_AT_ranges
.asciz "bar" # DW_AT_name
.byte 0 # End Of Children Mark
.Lfoo_inl_die:
.byte 2 # Abbrev DW_TAG_subprogram
.asciz "foo_inl" # DW_AT_name
.byte 3 # Abbrev DW_TAG_subprogram
.byte 0 # DW_AT_ranges
.asciz "foo" # DW_AT_name
.byte 4 # Abbrev DW_TAG_inlined_subroutine
.byte 3 # DW_AT_ranges
.long .Lfoo_inl_die-.Lcu_begin0 # DW_AT_abstract_origin
.byte 0 # End Of Children Mark
.byte 0 # End Of Children Mark
.Ldebug_info_end0:
.section .debug_rnglists,"",@progbits
.long .Ldebug_list_header_end0-.Ldebug_list_header_start0 # Length
.Ldebug_list_header_start0:
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 4 # Offset entry count
.Lrnglists_table_base0:
.long .Ldebug_ranges0-.Lrnglists_table_base0
.long .Ldebug_ranges1-.Lrnglists_table_base0
.long .Ldebug_ranges2-.Lrnglists_table_base0
.long .Ldebug_ranges3-.Lrnglists_table_base0
.Ldebug_ranges0:
.byte 6 # DW_RLE_start_end
.quad foo
.quad .Lfoo_end
.byte 6 # DW_RLE_start_end
.quad foo.__part.1
.quad .Lfoo.__part.1_end
.byte 0 # DW_RLE_end_of_list
.Ldebug_ranges1:
.byte 6 # DW_RLE_start_end
.quad bar
.quad .Lbar_end
.byte 6 # DW_RLE_start_end
.quad foo.__part.1
.quad .Lfoo.__part.1_end
.byte 6 # DW_RLE_start_end
.quad foo
.quad .Lfoo_end
.byte 0 # DW_RLE_end_of_list
.Ldebug_ranges2:
.byte 6 # DW_RLE_start_end
.quad bar
.quad .Lbar_end
.byte 0 # DW_RLE_end_of_list
.Ldebug_ranges3:
.byte 6 # DW_RLE_start_end
.quad .Lfoo_inl
.quad .Lfoo_inl_end
.byte 6 # DW_RLE_start_end
.quad .Lfoo_inl.__part.1
.quad .Lfoo_inl.__part.1_end
.byte 0 # DW_RLE_end_of_list
.Ldebug_list_header_end0: