160379369SZequan Wu// clang-format off 260379369SZequan Wu// REQUIRES: lld, x86 360379369SZequan Wu 460379369SZequan Wu// Test block range is set. 560379369SZequan Wu// RUN: llvm-mc -triple=x86_64-windows-msvc --filetype=obj %s > %t.obj 660379369SZequan Wu// RUN: lld-link /debug:full /nodefaultlib /entry:main %t.obj /out:%t.exe /base:0x140000000 7*cf3464bbSJonas Devlieghere// RUN: %lldb %t.exe -o "image lookup -a 0x140001014 -v" -o "exit" | FileCheck %s 860379369SZequan Wu 960379369SZequan Wu// CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001044) 1060379369SZequan Wu// CHECK-NEXT: FuncType: id = {{.*}}, byte-size = 0, compiler_type = "int (void)" 1160379369SZequan Wu// CHECK-NEXT: Blocks: id = {{.*}}, range = [0x140001000-0x140001044) 1260379369SZequan Wu// CHECK-NEXT: id = {{.*}}, range = [0x140001014-0x14000103b) 1360379369SZequan Wu 1460379369SZequan Wu 1560379369SZequan Wu .text 1660379369SZequan Wu .def @feat.00; 1760379369SZequan Wu .scl 3; 1860379369SZequan Wu .type 0; 1960379369SZequan Wu .endef 2060379369SZequan Wu .globl @feat.00 2160379369SZequan Wu.set @feat.00, 0 2260379369SZequan Wu .intel_syntax noprefix 2360379369SZequan Wu .file "blocks.cpp" 2460379369SZequan Wu .def main; 2560379369SZequan Wu .scl 2; 2660379369SZequan Wu .type 32; 2760379369SZequan Wu .endef 2860379369SZequan Wu .globl main # -- Begin function main 2960379369SZequan Wu .p2align 4, 0x90 3060379369SZequan Wumain: # @main 3160379369SZequan Wu.Lfunc_begin0: 3260379369SZequan Wu .cv_func_id 0 3360379369SZequan Wu .cv_file 1 "/tmp/blocks.cpp" "4CC0785E17ACF09C657F740775661395" 1 3460379369SZequan Wu .cv_loc 0 1 1 0 # blocks.cpp:1:0 3560379369SZequan Wu.seh_proc main 3660379369SZequan Wu# %bb.0: # %entry 3760379369SZequan Wu sub rsp, 16 3860379369SZequan Wu .seh_stackalloc 16 3960379369SZequan Wu .seh_endprologue 4060379369SZequan Wu mov dword ptr [rsp + 12], 0 4160379369SZequan Wu.Ltmp0: 4260379369SZequan Wu .cv_loc 0 1 2 0 # blocks.cpp:2:0 4360379369SZequan Wu mov dword ptr [rsp + 8], 0 4460379369SZequan Wu.Ltmp1: 4560379369SZequan Wu .cv_loc 0 1 3 0 # blocks.cpp:3:0 4660379369SZequan Wu mov dword ptr [rsp + 4], 0 4760379369SZequan Wu.LBB0_1: # %for.cond 4860379369SZequan Wu # =>This Inner Loop Header: Depth=1 4960379369SZequan Wu cmp dword ptr [rsp + 4], 3 5060379369SZequan Wu jge .LBB0_4 5160379369SZequan Wu# %bb.2: # %for.body 5260379369SZequan Wu # in Loop: Header=BB0_1 Depth=1 5360379369SZequan Wu.Ltmp2: 5460379369SZequan Wu .cv_loc 0 1 4 0 # blocks.cpp:4:0 5560379369SZequan Wu mov eax, dword ptr [rsp + 8] 5660379369SZequan Wu add eax, 1 5760379369SZequan Wu mov dword ptr [rsp + 8], eax 5860379369SZequan Wu.Ltmp3: 5960379369SZequan Wu# %bb.3: # %for.inc 6060379369SZequan Wu # in Loop: Header=BB0_1 Depth=1 6160379369SZequan Wu .cv_loc 0 1 3 0 # blocks.cpp:3:0 6260379369SZequan Wu mov eax, dword ptr [rsp + 4] 6360379369SZequan Wu add eax, 1 6460379369SZequan Wu mov dword ptr [rsp + 4], eax 6560379369SZequan Wu jmp .LBB0_1 6660379369SZequan Wu.Ltmp4: 6760379369SZequan Wu.LBB0_4: # %for.end 6860379369SZequan Wu .cv_loc 0 1 6 0 # blocks.cpp:6:0 6960379369SZequan Wu mov eax, dword ptr [rsp + 8] 7060379369SZequan Wu add rsp, 16 7160379369SZequan Wu ret 7260379369SZequan Wu.Ltmp5: 7360379369SZequan Wu.Lfunc_end0: 7460379369SZequan Wu .seh_endproc 7560379369SZequan Wu # -- End function 7660379369SZequan Wu .section .drectve,"yn" 7760379369SZequan Wu .ascii " /DEFAULTLIB:libcmt.lib" 7860379369SZequan Wu .ascii " /DEFAULTLIB:oldnames.lib" 7960379369SZequan Wu .section .debug$S,"dr" 8060379369SZequan Wu .p2align 2, 0x0 8160379369SZequan Wu .long 4 # Debug section magic 8260379369SZequan Wu .long 241 8360379369SZequan Wu .long .Ltmp7-.Ltmp6 # Subsection size 8460379369SZequan Wu.Ltmp6: 8560379369SZequan Wu .short .Ltmp9-.Ltmp8 # Record length 8660379369SZequan Wu.Ltmp8: 8760379369SZequan Wu .short 4353 # Record kind: S_OBJNAME 8860379369SZequan Wu .long 0 # Signature 8960379369SZequan Wu .asciz "/tmp/blocks.obj" # Object name 9060379369SZequan Wu .p2align 2, 0x0 9160379369SZequan Wu.Ltmp9: 9260379369SZequan Wu .short .Ltmp11-.Ltmp10 # Record length 9360379369SZequan Wu.Ltmp10: 9460379369SZequan Wu .short 4412 # Record kind: S_COMPILE3 9560379369SZequan Wu .long 1 # Flags and language 9660379369SZequan Wu .short 208 # CPUType 9760379369SZequan Wu .short 16 # Frontend version 9860379369SZequan Wu .short 0 9960379369SZequan Wu .short 0 10060379369SZequan Wu .short 0 10160379369SZequan Wu .short 16000 # Backend version 10260379369SZequan Wu .short 0 10360379369SZequan Wu .short 0 10460379369SZequan Wu .short 0 10560379369SZequan Wu .asciz "clang version 16.0.0" # Null-terminated compiler version string 10660379369SZequan Wu .p2align 2, 0x0 10760379369SZequan Wu.Ltmp11: 10860379369SZequan Wu.Ltmp7: 10960379369SZequan Wu .p2align 2, 0x0 11060379369SZequan Wu .long 241 # Symbol subsection for main 11160379369SZequan Wu .long .Ltmp13-.Ltmp12 # Subsection size 11260379369SZequan Wu.Ltmp12: 11360379369SZequan Wu .short .Ltmp15-.Ltmp14 # Record length 11460379369SZequan Wu.Ltmp14: 11560379369SZequan Wu .short 4423 # Record kind: S_GPROC32_ID 11660379369SZequan Wu .long 0 # PtrParent 11760379369SZequan Wu .long 0 # PtrEnd 11860379369SZequan Wu .long 0 # PtrNext 11960379369SZequan Wu .long .Lfunc_end0-main # Code size 12060379369SZequan Wu .long 0 # Offset after prologue 12160379369SZequan Wu .long 0 # Offset before epilogue 12260379369SZequan Wu .long 4098 # Function type index 12360379369SZequan Wu .secrel32 main # Function section relative address 12460379369SZequan Wu .secidx main # Function section index 12560379369SZequan Wu .byte 0 # Flags 12660379369SZequan Wu .asciz "main" # Function name 12760379369SZequan Wu .p2align 2, 0x0 12860379369SZequan Wu.Ltmp15: 12960379369SZequan Wu .short .Ltmp17-.Ltmp16 # Record length 13060379369SZequan Wu.Ltmp16: 13160379369SZequan Wu .short 4114 # Record kind: S_FRAMEPROC 13260379369SZequan Wu .long 16 # FrameSize 13360379369SZequan Wu .long 0 # Padding 13460379369SZequan Wu .long 0 # Offset of padding 13560379369SZequan Wu .long 0 # Bytes of callee saved registers 13660379369SZequan Wu .long 0 # Exception handler offset 13760379369SZequan Wu .short 0 # Exception handler section 13860379369SZequan Wu .long 81920 # Flags (defines frame register) 13960379369SZequan Wu .p2align 2, 0x0 14060379369SZequan Wu.Ltmp17: 14160379369SZequan Wu .short .Ltmp19-.Ltmp18 # Record length 14260379369SZequan Wu.Ltmp18: 14360379369SZequan Wu .short 4414 # Record kind: S_LOCAL 14460379369SZequan Wu .long 116 # TypeIndex 14560379369SZequan Wu .short 0 # Flags 14660379369SZequan Wu .asciz "count" 14760379369SZequan Wu .p2align 2, 0x0 14860379369SZequan Wu.Ltmp19: 14960379369SZequan Wu .cv_def_range .Ltmp0 .Ltmp5, frame_ptr_rel, 8 15060379369SZequan Wu .short .Ltmp21-.Ltmp20 # Record length 15160379369SZequan Wu.Ltmp20: 15260379369SZequan Wu .short 4355 # Record kind: S_BLOCK32 15360379369SZequan Wu .long 0 # PtrParent 15460379369SZequan Wu .long 0 # PtrEnd 15560379369SZequan Wu .long .Ltmp4-.Ltmp1 # Code size 15660379369SZequan Wu .secrel32 .Ltmp1 # Function section relative address 15760379369SZequan Wu .secidx .Lfunc_begin0 # Function section index 15860379369SZequan Wu .byte 0 # Lexical block name 15960379369SZequan Wu .p2align 2, 0x0 16060379369SZequan Wu.Ltmp21: 16160379369SZequan Wu .short .Ltmp23-.Ltmp22 # Record length 16260379369SZequan Wu.Ltmp22: 16360379369SZequan Wu .short 4414 # Record kind: S_LOCAL 16460379369SZequan Wu .long 116 # TypeIndex 16560379369SZequan Wu .short 0 # Flags 16660379369SZequan Wu .asciz "i" 16760379369SZequan Wu .p2align 2, 0x0 16860379369SZequan Wu.Ltmp23: 16960379369SZequan Wu .cv_def_range .Ltmp1 .Ltmp4, frame_ptr_rel, 4 17060379369SZequan Wu .short 2 # Record length 17160379369SZequan Wu .short 6 # Record kind: S_END 17260379369SZequan Wu .short 2 # Record length 17360379369SZequan Wu .short 4431 # Record kind: S_PROC_ID_END 17460379369SZequan Wu.Ltmp13: 17560379369SZequan Wu .p2align 2, 0x0 17660379369SZequan Wu .cv_linetable 0, main, .Lfunc_end0 17760379369SZequan Wu .cv_filechecksums # File index to string table offset subsection 17860379369SZequan Wu .cv_stringtable # String table 17960379369SZequan Wu .long 241 18060379369SZequan Wu .long .Ltmp25-.Ltmp24 # Subsection size 18160379369SZequan Wu.Ltmp24: 18260379369SZequan Wu .short .Ltmp27-.Ltmp26 # Record length 18360379369SZequan Wu.Ltmp26: 18460379369SZequan Wu .short 4428 # Record kind: S_BUILDINFO 18560379369SZequan Wu .long 4104 # LF_BUILDINFO index 18660379369SZequan Wu .p2align 2, 0x0 18760379369SZequan Wu.Ltmp27: 18860379369SZequan Wu.Ltmp25: 18960379369SZequan Wu .p2align 2, 0x0 19060379369SZequan Wu .section .debug$T,"dr" 19160379369SZequan Wu .p2align 2, 0x0 19260379369SZequan Wu .long 4 # Debug section magic 19360379369SZequan Wu # ArgList (0x1000) 19460379369SZequan Wu .short 0x6 # Record length 19560379369SZequan Wu .short 0x1201 # Record kind: LF_ARGLIST 19660379369SZequan Wu .long 0x0 # NumArgs 19760379369SZequan Wu # Procedure (0x1001) 19860379369SZequan Wu .short 0xe # Record length 19960379369SZequan Wu .short 0x1008 # Record kind: LF_PROCEDURE 20060379369SZequan Wu .long 0x74 # ReturnType: int 20160379369SZequan Wu .byte 0x0 # CallingConvention: NearC 20260379369SZequan Wu .byte 0x0 # FunctionOptions 20360379369SZequan Wu .short 0x0 # NumParameters 20460379369SZequan Wu .long 0x1000 # ArgListType: () 20560379369SZequan Wu # FuncId (0x1002) 20660379369SZequan Wu .short 0x12 # Record length 20760379369SZequan Wu .short 0x1601 # Record kind: LF_FUNC_ID 20860379369SZequan Wu .long 0x0 # ParentScope 20960379369SZequan Wu .long 0x1001 # FunctionType: int () 21060379369SZequan Wu .asciz "main" # Name 21160379369SZequan Wu .byte 243 21260379369SZequan Wu .byte 242 21360379369SZequan Wu .byte 241 214