// clang-format off // REQUIRES: lld, x86 // Test block range is set. // RUN: llvm-mc -triple=x86_64-windows-msvc --filetype=obj %s > %t.obj // RUN: lld-link /debug:full /nodefaultlib /entry:main %t.obj /out:%t.exe /base:0x140000000 // RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb %t.exe -o "image lookup -a 0x140001014 -v" -o "exit" | FileCheck %s // CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001044) // CHECK-NEXT: FuncType: id = {{.*}}, byte-size = 0, compiler_type = "int (void)" // CHECK-NEXT: Blocks: id = {{.*}}, range = [0x140001000-0x140001044) // CHECK-NEXT: id = {{.*}}, range = [0x140001014-0x14000103b) .text .def @feat.00; .scl 3; .type 0; .endef .globl @feat.00 .set @feat.00, 0 .intel_syntax noprefix .file "blocks.cpp" .def main; .scl 2; .type 32; .endef .globl main # -- Begin function main .p2align 4, 0x90 main: # @main .Lfunc_begin0: .cv_func_id 0 .cv_file 1 "/tmp/blocks.cpp" "4CC0785E17ACF09C657F740775661395" 1 .cv_loc 0 1 1 0 # blocks.cpp:1:0 .seh_proc main # %bb.0: # %entry sub rsp, 16 .seh_stackalloc 16 .seh_endprologue mov dword ptr [rsp + 12], 0 .Ltmp0: .cv_loc 0 1 2 0 # blocks.cpp:2:0 mov dword ptr [rsp + 8], 0 .Ltmp1: .cv_loc 0 1 3 0 # blocks.cpp:3:0 mov dword ptr [rsp + 4], 0 .LBB0_1: # %for.cond # =>This Inner Loop Header: Depth=1 cmp dword ptr [rsp + 4], 3 jge .LBB0_4 # %bb.2: # %for.body # in Loop: Header=BB0_1 Depth=1 .Ltmp2: .cv_loc 0 1 4 0 # blocks.cpp:4:0 mov eax, dword ptr [rsp + 8] add eax, 1 mov dword ptr [rsp + 8], eax .Ltmp3: # %bb.3: # %for.inc # in Loop: Header=BB0_1 Depth=1 .cv_loc 0 1 3 0 # blocks.cpp:3:0 mov eax, dword ptr [rsp + 4] add eax, 1 mov dword ptr [rsp + 4], eax jmp .LBB0_1 .Ltmp4: .LBB0_4: # %for.end .cv_loc 0 1 6 0 # blocks.cpp:6:0 mov eax, dword ptr [rsp + 8] add rsp, 16 ret .Ltmp5: .Lfunc_end0: .seh_endproc # -- End function .section .drectve,"yn" .ascii " /DEFAULTLIB:libcmt.lib" .ascii " /DEFAULTLIB:oldnames.lib" .section .debug$S,"dr" .p2align 2, 0x0 .long 4 # Debug section magic .long 241 .long .Ltmp7-.Ltmp6 # Subsection size .Ltmp6: .short .Ltmp9-.Ltmp8 # Record length .Ltmp8: .short 4353 # Record kind: S_OBJNAME .long 0 # Signature .asciz "/tmp/blocks.obj" # Object name .p2align 2, 0x0 .Ltmp9: .short .Ltmp11-.Ltmp10 # Record length .Ltmp10: .short 4412 # Record kind: S_COMPILE3 .long 1 # Flags and language .short 208 # CPUType .short 16 # Frontend version .short 0 .short 0 .short 0 .short 16000 # Backend version .short 0 .short 0 .short 0 .asciz "clang version 16.0.0" # Null-terminated compiler version string .p2align 2, 0x0 .Ltmp11: .Ltmp7: .p2align 2, 0x0 .long 241 # Symbol subsection for main .long .Ltmp13-.Ltmp12 # Subsection size .Ltmp12: .short .Ltmp15-.Ltmp14 # Record length .Ltmp14: .short 4423 # Record kind: S_GPROC32_ID .long 0 # PtrParent .long 0 # PtrEnd .long 0 # PtrNext .long .Lfunc_end0-main # Code size .long 0 # Offset after prologue .long 0 # Offset before epilogue .long 4098 # Function type index .secrel32 main # Function section relative address .secidx main # Function section index .byte 0 # Flags .asciz "main" # Function name .p2align 2, 0x0 .Ltmp15: .short .Ltmp17-.Ltmp16 # Record length .Ltmp16: .short 4114 # Record kind: S_FRAMEPROC .long 16 # FrameSize .long 0 # Padding .long 0 # Offset of padding .long 0 # Bytes of callee saved registers .long 0 # Exception handler offset .short 0 # Exception handler section .long 81920 # Flags (defines frame register) .p2align 2, 0x0 .Ltmp17: .short .Ltmp19-.Ltmp18 # Record length .Ltmp18: .short 4414 # Record kind: S_LOCAL .long 116 # TypeIndex .short 0 # Flags .asciz "count" .p2align 2, 0x0 .Ltmp19: .cv_def_range .Ltmp0 .Ltmp5, frame_ptr_rel, 8 .short .Ltmp21-.Ltmp20 # Record length .Ltmp20: .short 4355 # Record kind: S_BLOCK32 .long 0 # PtrParent .long 0 # PtrEnd .long .Ltmp4-.Ltmp1 # Code size .secrel32 .Ltmp1 # Function section relative address .secidx .Lfunc_begin0 # Function section index .byte 0 # Lexical block name .p2align 2, 0x0 .Ltmp21: .short .Ltmp23-.Ltmp22 # Record length .Ltmp22: .short 4414 # Record kind: S_LOCAL .long 116 # TypeIndex .short 0 # Flags .asciz "i" .p2align 2, 0x0 .Ltmp23: .cv_def_range .Ltmp1 .Ltmp4, frame_ptr_rel, 4 .short 2 # Record length .short 6 # Record kind: S_END .short 2 # Record length .short 4431 # Record kind: S_PROC_ID_END .Ltmp13: .p2align 2, 0x0 .cv_linetable 0, main, .Lfunc_end0 .cv_filechecksums # File index to string table offset subsection .cv_stringtable # String table .long 241 .long .Ltmp25-.Ltmp24 # Subsection size .Ltmp24: .short .Ltmp27-.Ltmp26 # Record length .Ltmp26: .short 4428 # Record kind: S_BUILDINFO .long 4104 # LF_BUILDINFO index .p2align 2, 0x0 .Ltmp27: .Ltmp25: .p2align 2, 0x0 .section .debug$T,"dr" .p2align 2, 0x0 .long 4 # Debug section magic # ArgList (0x1000) .short 0x6 # Record length .short 0x1201 # Record kind: LF_ARGLIST .long 0x0 # NumArgs # Procedure (0x1001) .short 0xe # Record length .short 0x1008 # Record kind: LF_PROCEDURE .long 0x74 # ReturnType: int .byte 0x0 # CallingConvention: NearC .byte 0x0 # FunctionOptions .short 0x0 # NumParameters .long 0x1000 # ArgListType: () # FuncId (0x1002) .short 0x12 # Record length .short 0x1601 # Record kind: LF_FUNC_ID .long 0x0 # ParentScope .long 0x1001 # FunctionType: int () .asciz "main" # Name .byte 243 .byte 242 .byte 241