1*8a64d80aSDavid Spickett# REQUIRES: lld 2*8a64d80aSDavid Spickett 3*8a64d80aSDavid Spickett# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o 4*8a64d80aSDavid Spickett# RUN: ld.lld %t.o -o %t -z separate-code 5*8a64d80aSDavid Spickett# RUN: lldb-test symbols --find=function --name=inl --function-flags=method %t \ 6*8a64d80aSDavid Spickett# RUN: | FileCheck %s 7*8a64d80aSDavid Spickett 8*8a64d80aSDavid Spickett# CHECK: Function: {{.*}} mangled = "_Z8externali" 9*8a64d80aSDavid Spickett# CHECK: Blocks: {{.*}} range = [0x00201000-0x00201002) 10*8a64d80aSDavid Spickett# CHECK-NEXT: range = [0x00201000-0x00201002), name = "inl", mangled = _ZN1S3inlEi 11*8a64d80aSDavid Spickett 12*8a64d80aSDavid Spickett 13*8a64d80aSDavid Spickett# Generated via: 14*8a64d80aSDavid Spickett# clang -O2 -g -S 15*8a64d80aSDavid Spickett 16*8a64d80aSDavid Spickett# from file: 17*8a64d80aSDavid Spickett# int forward(int); 18*8a64d80aSDavid Spickett# struct S { 19*8a64d80aSDavid Spickett# static int inl(int a) { return forward(a); } 20*8a64d80aSDavid Spickett# }; 21*8a64d80aSDavid Spickett# int external(int a) { return S::inl(a); } 22*8a64d80aSDavid Spickett 23*8a64d80aSDavid Spickett# and then simplified. 24*8a64d80aSDavid Spickett 25*8a64d80aSDavid Spickett .text 26*8a64d80aSDavid Spickett_Z8externali: 27*8a64d80aSDavid Spickett.Lfunc_begin0: 28*8a64d80aSDavid Spickett jmp _Z7forwardi 29*8a64d80aSDavid Spickett.Lfunc_end0: 30*8a64d80aSDavid Spickett 31*8a64d80aSDavid Spickett.globl _start 32*8a64d80aSDavid Spickett_start: 33*8a64d80aSDavid Spickett_Z7forwardi: 34*8a64d80aSDavid Spickett ret 35*8a64d80aSDavid Spickett 36*8a64d80aSDavid Spickett .section .debug_str,"MS",@progbits,1 37*8a64d80aSDavid Spickett.Linfo_string0: 38*8a64d80aSDavid Spickett .asciz "clang version 7.0.0 (trunk 332830) (llvm/trunk 332835) with manual modifications" 39*8a64d80aSDavid Spickett.Linfo_string3: 40*8a64d80aSDavid Spickett .asciz "_ZN1S3inlEi" 41*8a64d80aSDavid Spickett.Linfo_string4: 42*8a64d80aSDavid Spickett .asciz "inl" 43*8a64d80aSDavid Spickett.Linfo_string6: 44*8a64d80aSDavid Spickett .asciz "S" 45*8a64d80aSDavid Spickett.Linfo_string8: 46*8a64d80aSDavid Spickett .asciz "_Z8externali" 47*8a64d80aSDavid Spickett.Linfo_string9: 48*8a64d80aSDavid Spickett .asciz "external" 49*8a64d80aSDavid Spickett .section .debug_abbrev,"",@progbits 50*8a64d80aSDavid Spickett .byte 1 # Abbreviation Code 51*8a64d80aSDavid Spickett .byte 17 # DW_TAG_compile_unit 52*8a64d80aSDavid Spickett .byte 1 # DW_CHILDREN_yes 53*8a64d80aSDavid Spickett .byte 37 # DW_AT_producer 54*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 55*8a64d80aSDavid Spickett .byte 19 # DW_AT_language 56*8a64d80aSDavid Spickett .byte 5 # DW_FORM_data2 57*8a64d80aSDavid Spickett .byte 17 # DW_AT_low_pc 58*8a64d80aSDavid Spickett .byte 1 # DW_FORM_addr 59*8a64d80aSDavid Spickett .byte 18 # DW_AT_high_pc 60*8a64d80aSDavid Spickett .byte 6 # DW_FORM_data4 61*8a64d80aSDavid Spickett .byte 0 # EOM(1) 62*8a64d80aSDavid Spickett .byte 0 # EOM(2) 63*8a64d80aSDavid Spickett .byte 2 # Abbreviation Code 64*8a64d80aSDavid Spickett .byte 19 # DW_TAG_structure_type 65*8a64d80aSDavid Spickett .byte 1 # DW_CHILDREN_yes 66*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 67*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 68*8a64d80aSDavid Spickett .byte 11 # DW_AT_byte_size 69*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 70*8a64d80aSDavid Spickett .byte 0 # EOM(1) 71*8a64d80aSDavid Spickett .byte 0 # EOM(2) 72*8a64d80aSDavid Spickett .byte 3 # Abbreviation Code 73*8a64d80aSDavid Spickett .byte 46 # DW_TAG_subprogram 74*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 75*8a64d80aSDavid Spickett .byte 110 # DW_AT_linkage_name 76*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 77*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 78*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 79*8a64d80aSDavid Spickett .byte 0 # EOM(1) 80*8a64d80aSDavid Spickett .byte 0 # EOM(2) 81*8a64d80aSDavid Spickett .byte 6 # Abbreviation Code 82*8a64d80aSDavid Spickett .byte 46 # DW_TAG_subprogram 83*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 84*8a64d80aSDavid Spickett .byte 71 # DW_AT_specification 85*8a64d80aSDavid Spickett .byte 19 # DW_FORM_ref4 86*8a64d80aSDavid Spickett .byte 32 # DW_AT_inline 87*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 88*8a64d80aSDavid Spickett .byte 0 # EOM(1) 89*8a64d80aSDavid Spickett .byte 0 # EOM(2) 90*8a64d80aSDavid Spickett .byte 8 # Abbreviation Code 91*8a64d80aSDavid Spickett .byte 46 # DW_TAG_subprogram 92*8a64d80aSDavid Spickett .byte 1 # DW_CHILDREN_yes 93*8a64d80aSDavid Spickett .byte 17 # DW_AT_low_pc 94*8a64d80aSDavid Spickett .byte 1 # DW_FORM_addr 95*8a64d80aSDavid Spickett .byte 18 # DW_AT_high_pc 96*8a64d80aSDavid Spickett .byte 6 # DW_FORM_data4 97*8a64d80aSDavid Spickett .byte 110 # DW_AT_linkage_name 98*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 99*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 100*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 101*8a64d80aSDavid Spickett .byte 0 # EOM(1) 102*8a64d80aSDavid Spickett .byte 0 # EOM(2) 103*8a64d80aSDavid Spickett .byte 10 # Abbreviation Code 104*8a64d80aSDavid Spickett .byte 29 # DW_TAG_inlined_subroutine 105*8a64d80aSDavid Spickett .byte 1 # DW_CHILDREN_yes 106*8a64d80aSDavid Spickett .byte 49 # DW_AT_abstract_origin 107*8a64d80aSDavid Spickett .byte 19 # DW_FORM_ref4 108*8a64d80aSDavid Spickett .byte 17 # DW_AT_low_pc 109*8a64d80aSDavid Spickett .byte 1 # DW_FORM_addr 110*8a64d80aSDavid Spickett .byte 18 # DW_AT_high_pc 111*8a64d80aSDavid Spickett .byte 6 # DW_FORM_data4 112*8a64d80aSDavid Spickett .byte 0 # EOM(1) 113*8a64d80aSDavid Spickett .byte 0 # EOM(2) 114*8a64d80aSDavid Spickett .byte 0 # EOM(3) 115*8a64d80aSDavid Spickett .section .debug_info,"",@progbits 116*8a64d80aSDavid Spickett.Lcu_begin0: 117*8a64d80aSDavid Spickett .long .Lcu_end0-.Lcu_start0 # Length of Unit 118*8a64d80aSDavid Spickett.Lcu_start0: 119*8a64d80aSDavid Spickett .short 4 # DWARF version number 120*8a64d80aSDavid Spickett .long .debug_abbrev # Offset Into Abbrev. Section 121*8a64d80aSDavid Spickett .byte 8 # Address Size (in bytes) 122*8a64d80aSDavid Spickett .byte 1 # Abbrev [1] 0xb:0x9e DW_TAG_compile_unit 123*8a64d80aSDavid Spickett .long .Linfo_string0 # DW_AT_producer 124*8a64d80aSDavid Spickett .short 4 # DW_AT_language 125*8a64d80aSDavid Spickett .quad .Lfunc_begin0 # DW_AT_low_pc 126*8a64d80aSDavid Spickett .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 127*8a64d80aSDavid Spickett .byte 2 # Abbrev [2] 0x2a:0x1f DW_TAG_structure_type 128*8a64d80aSDavid Spickett .long .Linfo_string6 # DW_AT_name 129*8a64d80aSDavid Spickett .byte 1 # DW_AT_byte_size 130*8a64d80aSDavid Spickett.Linl_spec: 131*8a64d80aSDavid Spickett .byte 3 # Abbrev [3] 0x33:0x15 DW_TAG_subprogram 132*8a64d80aSDavid Spickett .long .Linfo_string3 # DW_AT_linkage_name 133*8a64d80aSDavid Spickett .long .Linfo_string4 # DW_AT_name 134*8a64d80aSDavid Spickett .byte 0 # End Of Children Mark 135*8a64d80aSDavid Spickett.Linl_abstract: 136*8a64d80aSDavid Spickett .byte 6 # Abbrev [6] 0x50:0x12 DW_TAG_subprogram 137*8a64d80aSDavid Spickett .long .Linl_spec # DW_AT_specification 138*8a64d80aSDavid Spickett .byte 1 # DW_AT_inline 139*8a64d80aSDavid Spickett.Linl_a_abstract: 140*8a64d80aSDavid Spickett .byte 8 # Abbrev [8] 0x62:0x46 DW_TAG_subprogram 141*8a64d80aSDavid Spickett .quad .Lfunc_begin0 # DW_AT_low_pc 142*8a64d80aSDavid Spickett .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 143*8a64d80aSDavid Spickett .long .Linfo_string8 # DW_AT_linkage_name 144*8a64d80aSDavid Spickett .long .Linfo_string9 # DW_AT_name 145*8a64d80aSDavid Spickett .byte 10 # Abbrev [10] 0x8c:0x1b DW_TAG_inlined_subroutine 146*8a64d80aSDavid Spickett .long .Linl_abstract # DW_AT_abstract_origin 147*8a64d80aSDavid Spickett .quad .Lfunc_begin0 # DW_AT_low_pc 148*8a64d80aSDavid Spickett .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 149*8a64d80aSDavid Spickett .byte 0 # End Of Children Mark 150*8a64d80aSDavid Spickett .byte 0 # End Of Children Mark 151*8a64d80aSDavid Spickett .byte 0 # End Of Children Mark 152*8a64d80aSDavid Spickett.Lcu_end0: 153