15e9c9b32SZequan Wu# clang-format off 29f052f3dSDavid Spickett# REQUIRES: lld, x86 35e9c9b32SZequan Wu 4384e890dSZequan Wu# RUN: llvm-mc -triple=x86_64-windows-msvc --filetype=obj %s > %t.obj 5384e890dSZequan Wu# RUN: lld-link /debug:full /nodefaultlib /entry:main %t.obj /out:%t.exe /base:0x140000000 6*cf3464bbSJonas Devlieghere# RUN: %lldb -f %t.exe -s \ 75e9c9b32SZequan Wu# RUN: %p/Inputs/local-variables-registers.lldbinit 2>&1 | FileCheck %s 85e9c9b32SZequan Wu 95e9c9b32SZequan Wu# This file is compiled from following source file: 105e9c9b32SZequan Wu# clang-cl /Z7 /O1 /Falocal-variables-registers.s a.cpp 115e9c9b32SZequan Wu# struct S { 125e9c9b32SZequan Wu# int x; 135e9c9b32SZequan Wu# char y; 145e9c9b32SZequan Wu# }; 155e9c9b32SZequan Wu# 165e9c9b32SZequan Wu# __attribute__((noinline)) S CreateS(int p1, char p2) { 175e9c9b32SZequan Wu# S s; 185e9c9b32SZequan Wu# s.x = p1 + 1; 195e9c9b32SZequan Wu# s.y = p2 + 2; 205e9c9b32SZequan Wu# ++s.x; 215e9c9b32SZequan Wu# ++s.y; 225e9c9b32SZequan Wu# return s; 235e9c9b32SZequan Wu# } 245e9c9b32SZequan Wu# 255e9c9b32SZequan Wu# int main(int argc, char** argv) { 265e9c9b32SZequan Wu# int local = argc * 2; 275e9c9b32SZequan Wu# S s = CreateS(local, 'a'); 285e9c9b32SZequan Wu# return s.x + s.y; 295e9c9b32SZequan Wu# } 305e9c9b32SZequan Wu 315e9c9b32SZequan Wu# FIXME: The following variable location have wrong register numbers due to 325e9c9b32SZequan Wu# https://github.com/llvm/llvm-project/issues/53575. Fix them after resolving 335e9c9b32SZequan Wu# the issue. 345e9c9b32SZequan Wu 355e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x140001000 -v 365e9c9b32SZequan Wu# CHECK: LineEntry: [0x0000000140001000-0x0000000140001003): C:\src\test\a.cpp:10 3771d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "p1", type = "int", valid ranges = <block>, location = [0x0000000140001000, 0x0000000140001003) -> DW_OP_reg26 XMM9 3871d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "p2", type = "char", valid ranges = <block>, location = [0x0000000140001000, 0x0000000140001006) -> DW_OP_regx 0x3f 395e9c9b32SZequan Wu# CHECK-EMPTY: 405e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x140001003 -v 415e9c9b32SZequan Wu# CHECK: LineEntry: [0x0000000140001003-0x0000000140001006): C:\src\test\a.cpp:11 4271d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "p2", type = "char", valid ranges = <block>, location = [0x0000000140001000, 0x0000000140001006) -> DW_OP_regx 0x3f 4371d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "s", type = "S", valid ranges = <block>, location = [0x0000000140001003, 0x0000000140001006) -> DW_OP_piece 0x4, DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x3 445e9c9b32SZequan Wu# CHECK-EMPTY: 455e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x140001006 -v 465e9c9b32SZequan Wu# CHECK: LineEntry: [0x0000000140001006-0x0000000140001011): C:\src\test\a.cpp:12 4771d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "s", type = "S", valid ranges = <block>, location = [0x0000000140001006, 0x0000000140001011) -> DW_OP_reg26 XMM9, DW_OP_piece 0x4, DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x3 485e9c9b32SZequan Wu# CHECK-EMPTY: 495e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x140001011 -v 505e9c9b32SZequan Wu# CHECK: LineEntry: [0x0000000140001011-0x0000000140001015): C:\src\test\a.cpp:15 5171d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = <block>, location = [0x0000000140001011, 0x0000000140001017) -> DW_OP_reg26 XMM9 5271d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = <block>, location = [0x0000000140001011, 0x0000000140001019) -> DW_OP_reg3 RBX 535e9c9b32SZequan Wu# CHECK-EMPTY: 545e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x140001017 -v 555e9c9b32SZequan Wu# CHECK: LineEntry: [0x0000000140001017-0x000000014000101e): C:\src\test\a.cpp:17 5671d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = <block>, location = [0x0000000140001011, 0x0000000140001019) -> DW_OP_reg3 RBX 5771d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "local", type = "int", valid ranges = <block>, location = [0x0000000140001017, 0x000000014000101e) -> DW_OP_reg26 XMM9 585e9c9b32SZequan Wu# CHECK-EMPTY: 595e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x140001019 -v 605e9c9b32SZequan Wu# CHECK: LineEntry: [0x0000000140001017-0x000000014000101e): C:\src\test\a.cpp:17 6171d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "local", type = "int", valid ranges = <block>, location = [0x0000000140001017, 0x000000014000101e) -> DW_OP_reg26 XMM9 625e9c9b32SZequan Wu# CHECK-EMPTY: 635e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x14000101e -v 645e9c9b32SZequan Wu# CHECK: LineEntry: [0x000000014000101e-0x0000000140001031): C:\src\test\a.cpp:18 6571d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "s", type = "S", valid ranges = <block>, location = [0x000000014000101e, 0x000000014000102c) -> DW_OP_reg24 XMM7, DW_OP_piece 0x4, DW_OP_piece 0x4 665e9c9b32SZequan Wu# CHECK-EMPTY: 675e9c9b32SZequan Wu# CHECK: (lldb) image lookup -a 0x14000102c -v 685e9c9b32SZequan Wu# CHECK: LineEntry: [0x000000014000101e-0x0000000140001031): C:\src\test\a.cpp:18 695e9c9b32SZequan Wu 705e9c9b32SZequan Wu .text 715e9c9b32SZequan Wu .def @feat.00; 725e9c9b32SZequan Wu .scl 3; 735e9c9b32SZequan Wu .type 0; 745e9c9b32SZequan Wu .endef 755e9c9b32SZequan Wu .globl @feat.00 765e9c9b32SZequan Wu.set @feat.00, 0 775e9c9b32SZequan Wu .intel_syntax noprefix 785e9c9b32SZequan Wu .file "a.cpp" 795e9c9b32SZequan Wu .def "?CreateS@@YA?AUS@@HD@Z"; 805e9c9b32SZequan Wu .scl 2; 815e9c9b32SZequan Wu .type 32; 825e9c9b32SZequan Wu .endef 835e9c9b32SZequan Wu .section .text,"xr",one_only,"?CreateS@@YA?AUS@@HD@Z" 845e9c9b32SZequan Wu .globl "?CreateS@@YA?AUS@@HD@Z" # -- Begin function ?CreateS@@YA?AUS@@HD@Z 855e9c9b32SZequan Wu"?CreateS@@YA?AUS@@HD@Z": # @"?CreateS@@YA?AUS@@HD@Z" 865e9c9b32SZequan Wu.Lfunc_begin0: 875e9c9b32SZequan Wu .cv_func_id 0 885e9c9b32SZequan Wu# %bb.0: 895e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:p2 <- $dl 905e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:p1 <- $ecx 915e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:s <- [DW_OP_plus_uconst 1, DW_OP_stack_value, DW_OP_LLVM_fragment 0 32] $ecx 925e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:s <- [DW_OP_plus_uconst 2, DW_OP_stack_value, DW_OP_LLVM_fragment 32 8] $dl 935e9c9b32SZequan Wu .cv_file 1 "C:\\src\\test\\a.cpp" "446925B46C8C870B01708834F4813A31" 1 945e9c9b32SZequan Wu .cv_loc 0 1 10 0 # a.cpp:10:0 955e9c9b32SZequan Wu # kill: def $ecx killed $ecx def $rcx 965e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:s <- [DW_OP_plus_uconst 1, DW_OP_stack_value, DW_OP_LLVM_fragment 0 32] $ecx 975e9c9b32SZequan Wu add ecx, 2 985e9c9b32SZequan Wu.Ltmp0: 995e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:p1 <- [DW_OP_LLVM_entry_value 1] $ecx 1005e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:s <- [DW_OP_LLVM_fragment 0 32] $ecx 1015e9c9b32SZequan Wu .cv_loc 0 1 11 0 # a.cpp:11:0 1025e9c9b32SZequan Wu add dl, 3 1035e9c9b32SZequan Wu.Ltmp1: 1045e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:p2 <- [DW_OP_LLVM_entry_value 1] $dl 1055e9c9b32SZequan Wu #DEBUG_VALUE: CreateS:s <- [DW_OP_LLVM_fragment 32 8] $dl 1065e9c9b32SZequan Wu .cv_loc 0 1 12 0 # a.cpp:12:0 1075e9c9b32SZequan Wu movzx eax, dl 1085e9c9b32SZequan Wu shl rax, 32 1095e9c9b32SZequan Wu or rax, rcx 1105e9c9b32SZequan Wu ret 1115e9c9b32SZequan Wu.Ltmp2: 1125e9c9b32SZequan Wu.Lfunc_end0: 1135e9c9b32SZequan Wu # -- End function 1145e9c9b32SZequan Wu .def main; 1155e9c9b32SZequan Wu .scl 2; 1165e9c9b32SZequan Wu .type 32; 1175e9c9b32SZequan Wu .endef 1185e9c9b32SZequan Wu .section .text,"xr",one_only,main 1195e9c9b32SZequan Wu .globl main # -- Begin function main 1205e9c9b32SZequan Wumain: # @main 1215e9c9b32SZequan Wu.Lfunc_begin1: 1225e9c9b32SZequan Wu .cv_func_id 1 1235e9c9b32SZequan Wu .cv_loc 1 1 15 0 # a.cpp:15:0 1245e9c9b32SZequan Wu.seh_proc main 1255e9c9b32SZequan Wu# %bb.0: 1265e9c9b32SZequan Wu #DEBUG_VALUE: main:argv <- $rdx 1275e9c9b32SZequan Wu #DEBUG_VALUE: main:argc <- $ecx 1285e9c9b32SZequan Wu sub rsp, 40 1295e9c9b32SZequan Wu .seh_stackalloc 40 1305e9c9b32SZequan Wu .seh_endprologue 1315e9c9b32SZequan Wu.Ltmp3: 1325e9c9b32SZequan Wu .cv_loc 1 1 16 0 # a.cpp:16:0 1335e9c9b32SZequan Wu add ecx, ecx 1345e9c9b32SZequan Wu.Ltmp4: 1355e9c9b32SZequan Wu #DEBUG_VALUE: main:argc <- [DW_OP_LLVM_entry_value 1] $ecx 1365e9c9b32SZequan Wu #DEBUG_VALUE: main:local <- $ecx 1375e9c9b32SZequan Wu .cv_loc 1 1 17 0 # a.cpp:17:0 1385e9c9b32SZequan Wu mov dl, 97 1395e9c9b32SZequan Wu.Ltmp5: 1405e9c9b32SZequan Wu #DEBUG_VALUE: main:argv <- [DW_OP_LLVM_entry_value 1] $rdx 1415e9c9b32SZequan Wu call "?CreateS@@YA?AUS@@HD@Z" 1425e9c9b32SZequan Wu.Ltmp6: 1435e9c9b32SZequan Wu #DEBUG_VALUE: main:s <- [DW_OP_LLVM_fragment 0 32] $eax 1445e9c9b32SZequan Wu #DEBUG_VALUE: main:s <- [DW_OP_constu 40, DW_OP_shr, DW_OP_LLVM_convert 64 7, DW_OP_LLVM_convert 24 7, DW_OP_stack_value, DW_OP_LLVM_fragment 40 24] $rax 1455e9c9b32SZequan Wu #DEBUG_VALUE: main:s <- [DW_OP_constu 32, DW_OP_shr, DW_OP_LLVM_convert 64 7, DW_OP_LLVM_convert 8 7, DW_OP_stack_value, DW_OP_LLVM_fragment 32 8] $rax 1465e9c9b32SZequan Wu .cv_loc 1 1 18 0 # a.cpp:18:0 1475e9c9b32SZequan Wu mov rcx, rax 1485e9c9b32SZequan Wu shr rcx, 8 1495e9c9b32SZequan Wu sar ecx, 24 1505e9c9b32SZequan Wu add ecx, eax 1515e9c9b32SZequan Wu mov eax, ecx 1525e9c9b32SZequan Wu.Ltmp7: 1535e9c9b32SZequan Wu add rsp, 40 1545e9c9b32SZequan Wu ret 15571d778f3SZequan Wu# Manually created for testing purpose. 15671d778f3SZequan Wu.L31: 15771d778f3SZequan Wu .cv_loc 1 1 1000 0 # a.cpp:1000:0 15871d778f3SZequan Wu ret 15971d778f3SZequan Wu.L32: 16071d778f3SZequan Wu ret 16171d778f3SZequan Wu.L33: 16271d778f3SZequan Wu ret 16371d778f3SZequan Wu.L34: 16471d778f3SZequan Wu .cv_loc 1 1 1001 0 # a.cpp:1001:0 16571d778f3SZequan Wu ret 16671d778f3SZequan Wu.L35: 16771d778f3SZequan Wu ret 16871d778f3SZequan Wu.L36: 16971d778f3SZequan Wu ret 17071d778f3SZequan Wu.L37: 17171d778f3SZequan Wu ret 17271d778f3SZequan Wu.L38: 17371d778f3SZequan Wu ret 17471d778f3SZequan Wu.L39: 17571d778f3SZequan Wu ret 17671d778f3SZequan Wu.L3a: 17771d778f3SZequan Wu ret 17871d778f3SZequan Wu.L3b: 17971d778f3SZequan Wu .cv_loc 1 1 1002 0 # a.cpp:1002:0 18071d778f3SZequan Wu ret 18171d778f3SZequan Wu.L3c: 18271d778f3SZequan Wu ret 18371d778f3SZequan Wu.L3d: 18471d778f3SZequan Wu ret 18571d778f3SZequan Wu.L3e: 18671d778f3SZequan Wu ret 18771d778f3SZequan Wu.L3f: 18871d778f3SZequan Wu ret 18971d778f3SZequan Wu.L40: 19071d778f3SZequan Wu ret 19171d778f3SZequan Wu.L41: 19271d778f3SZequan Wu ret 19371d778f3SZequan Wu.L42: 19471d778f3SZequan Wu ret 19571d778f3SZequan Wu.L43: 19671d778f3SZequan Wu ret 19771d778f3SZequan Wu.L44: 19871d778f3SZequan Wu ret 19971d778f3SZequan Wu.L45: 20071d778f3SZequan Wu .cv_loc 1 1 1003 0 # a.cpp:1003:0 20171d778f3SZequan Wu ret 20271d778f3SZequan Wu.L46: 20371d778f3SZequan Wu ret 20471d778f3SZequan Wu.L47: 20571d778f3SZequan Wu ret 20671d778f3SZequan Wu.L48: 20771d778f3SZequan Wu ret 20871d778f3SZequan Wu.L49: 20971d778f3SZequan Wu ret 21071d778f3SZequan Wu.L4a: 21171d778f3SZequan Wu ret 21271d778f3SZequan Wu.L4b: 21371d778f3SZequan Wu ret 21471d778f3SZequan Wu.L4c: 21571d778f3SZequan Wu ret 21671d778f3SZequan Wu.L4d: 21771d778f3SZequan Wu ret 21871d778f3SZequan Wu.L4e: 21971d778f3SZequan Wu .cv_loc 1 1 1004 0 # a.cpp:1004:0 22071d778f3SZequan Wu ret 22171d778f3SZequan Wu.L4f: 22271d778f3SZequan Wu ret 22371d778f3SZequan Wu.L50: 2245e9c9b32SZequan Wu.Ltmp8: 2255e9c9b32SZequan Wu.Lfunc_end1: 2265e9c9b32SZequan Wu .seh_endproc 2275e9c9b32SZequan Wu # -- End function 2285e9c9b32SZequan Wu .section .drectve,"yn" 2295e9c9b32SZequan Wu .ascii " /DEFAULTLIB:libcmt.lib" 2305e9c9b32SZequan Wu .ascii " /DEFAULTLIB:oldnames.lib" 2315e9c9b32SZequan Wu .section .debug$S,"dr" 2325e9c9b32SZequan Wu .p2align 2 2335e9c9b32SZequan Wu .long 4 # Debug section magic 2345e9c9b32SZequan Wu .long 241 2355e9c9b32SZequan Wu .long .Ltmp10-.Ltmp9 # Subsection size 2365e9c9b32SZequan Wu.Ltmp9: 2375e9c9b32SZequan Wu .short .Ltmp12-.Ltmp11 # Record length 2385e9c9b32SZequan Wu.Ltmp11: 2395e9c9b32SZequan Wu .short 4412 # Record kind: S_COMPILE3 2405e9c9b32SZequan Wu .long 1 # Flags and language 2415e9c9b32SZequan Wu .short 208 # CPUType 2425e9c9b32SZequan Wu .short 13 # Frontend version 2435e9c9b32SZequan Wu .short 0 2445e9c9b32SZequan Wu .short 0 2455e9c9b32SZequan Wu .short 0 2465e9c9b32SZequan Wu .short 13000 # Backend version 2475e9c9b32SZequan Wu .short 0 2485e9c9b32SZequan Wu .short 0 2495e9c9b32SZequan Wu .short 0 2505e9c9b32SZequan Wu .asciz "clang version 13.0.0" # Null-terminated compiler version string 2515e9c9b32SZequan Wu .p2align 2 2525e9c9b32SZequan Wu.Ltmp12: 2535e9c9b32SZequan Wu.Ltmp10: 2545e9c9b32SZequan Wu .p2align 2 2555e9c9b32SZequan Wu .section .debug$S,"dr",associative,"?CreateS@@YA?AUS@@HD@Z" 2565e9c9b32SZequan Wu .p2align 2 2575e9c9b32SZequan Wu .long 4 # Debug section magic 2585e9c9b32SZequan Wu .long 241 # Symbol subsection for CreateS 2595e9c9b32SZequan Wu .long .Ltmp14-.Ltmp13 # Subsection size 2605e9c9b32SZequan Wu.Ltmp13: 2615e9c9b32SZequan Wu .short .Ltmp16-.Ltmp15 # Record length 2625e9c9b32SZequan Wu.Ltmp15: 2635e9c9b32SZequan Wu .short 4423 # Record kind: S_GPROC32_ID 2645e9c9b32SZequan Wu .long 0 # PtrParent 2655e9c9b32SZequan Wu .long 0 # PtrEnd 2665e9c9b32SZequan Wu .long 0 # PtrNext 2675e9c9b32SZequan Wu .long .Lfunc_end0-"?CreateS@@YA?AUS@@HD@Z" # Code size 2685e9c9b32SZequan Wu .long 0 # Offset after prologue 2695e9c9b32SZequan Wu .long 0 # Offset before epilogue 2705e9c9b32SZequan Wu .long 4103 # Function type index 2715e9c9b32SZequan Wu .secrel32 "?CreateS@@YA?AUS@@HD@Z" # Function section relative address 2725e9c9b32SZequan Wu .secidx "?CreateS@@YA?AUS@@HD@Z" # Function section index 2735e9c9b32SZequan Wu .byte 0 # Flags 2745e9c9b32SZequan Wu .asciz "CreateS" # Function name 2755e9c9b32SZequan Wu .p2align 2 2765e9c9b32SZequan Wu.Ltmp16: 2775e9c9b32SZequan Wu .short .Ltmp18-.Ltmp17 # Record length 2785e9c9b32SZequan Wu.Ltmp17: 2795e9c9b32SZequan Wu .short 4114 # Record kind: S_FRAMEPROC 2805e9c9b32SZequan Wu .long 0 # FrameSize 2815e9c9b32SZequan Wu .long 0 # Padding 2825e9c9b32SZequan Wu .long 0 # Offset of padding 2835e9c9b32SZequan Wu .long 0 # Bytes of callee saved registers 2845e9c9b32SZequan Wu .long 0 # Exception handler offset 2855e9c9b32SZequan Wu .short 0 # Exception handler section 2865e9c9b32SZequan Wu .long 0 # Flags (defines frame register) 2875e9c9b32SZequan Wu .p2align 2 2885e9c9b32SZequan Wu.Ltmp18: 2895e9c9b32SZequan Wu .short .Ltmp20-.Ltmp19 # Record length 2905e9c9b32SZequan Wu.Ltmp19: 2915e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 2925e9c9b32SZequan Wu .long 116 # TypeIndex 2935e9c9b32SZequan Wu .short 1 # Flags 2945e9c9b32SZequan Wu .asciz "p1" 2955e9c9b32SZequan Wu .p2align 2 2965e9c9b32SZequan Wu.Ltmp20: 2975e9c9b32SZequan Wu .cv_def_range .Lfunc_begin0 .Ltmp0, reg, 18 2985e9c9b32SZequan Wu .short .Ltmp22-.Ltmp21 # Record length 2995e9c9b32SZequan Wu.Ltmp21: 3005e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 3015e9c9b32SZequan Wu .long 112 # TypeIndex 3025e9c9b32SZequan Wu .short 1 # Flags 3035e9c9b32SZequan Wu .asciz "p2" 3045e9c9b32SZequan Wu .p2align 2 3055e9c9b32SZequan Wu.Ltmp22: 3065e9c9b32SZequan Wu .cv_def_range .Lfunc_begin0 .Ltmp1, reg, 3 3075e9c9b32SZequan Wu .short .Ltmp24-.Ltmp23 # Record length 3085e9c9b32SZequan Wu.Ltmp23: 3095e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 3105e9c9b32SZequan Wu .long 4100 # TypeIndex 3115e9c9b32SZequan Wu .short 0 # Flags 3125e9c9b32SZequan Wu .asciz "s" 3135e9c9b32SZequan Wu .p2align 2 3145e9c9b32SZequan Wu.Ltmp24: 3152fa27346SZequan Wu # The following .cv_def_range order is inverted on purpose for testing. 3162fa27346SZequan Wu .cv_def_range .Ltmp0 .Lfunc_end0, subfield_reg, 3, 4 3172fa27346SZequan Wu .cv_def_range .Ltmp1 .Lfunc_end0, subfield_reg,18, 0 3185e9c9b32SZequan Wu .short 2 # Record length 3195e9c9b32SZequan Wu .short 4431 # Record kind: S_PROC_ID_END 3205e9c9b32SZequan Wu.Ltmp14: 3215e9c9b32SZequan Wu .p2align 2 3225e9c9b32SZequan Wu .cv_linetable 0, "?CreateS@@YA?AUS@@HD@Z", .Lfunc_end0 3235e9c9b32SZequan Wu .section .debug$S,"dr",associative,main 3245e9c9b32SZequan Wu .p2align 2 3255e9c9b32SZequan Wu .long 4 # Debug section magic 3265e9c9b32SZequan Wu .long 241 # Symbol subsection for main 3275e9c9b32SZequan Wu .long .Ltmp26-.Ltmp25 # Subsection size 3285e9c9b32SZequan Wu.Ltmp25: 3295e9c9b32SZequan Wu .short .Ltmp28-.Ltmp27 # Record length 3305e9c9b32SZequan Wu.Ltmp27: 3315e9c9b32SZequan Wu .short 4423 # Record kind: S_GPROC32_ID 3325e9c9b32SZequan Wu .long 0 # PtrParent 3335e9c9b32SZequan Wu .long 0 # PtrEnd 3345e9c9b32SZequan Wu .long 0 # PtrNext 3355e9c9b32SZequan Wu .long .Lfunc_end1-main # Code size 3365e9c9b32SZequan Wu .long 0 # Offset after prologue 3375e9c9b32SZequan Wu .long 0 # Offset before epilogue 3385e9c9b32SZequan Wu .long 4107 # Function type index 3395e9c9b32SZequan Wu .secrel32 main # Function section relative address 3405e9c9b32SZequan Wu .secidx main # Function section index 3415e9c9b32SZequan Wu .byte 0 # Flags 3425e9c9b32SZequan Wu .asciz "main" # Function name 3435e9c9b32SZequan Wu .p2align 2 3445e9c9b32SZequan Wu.Ltmp28: 3455e9c9b32SZequan Wu .short .Ltmp30-.Ltmp29 # Record length 3465e9c9b32SZequan Wu.Ltmp29: 3475e9c9b32SZequan Wu .short 4114 # Record kind: S_FRAMEPROC 3485e9c9b32SZequan Wu .long 40 # FrameSize 3495e9c9b32SZequan Wu .long 0 # Padding 3505e9c9b32SZequan Wu .long 0 # Offset of padding 3515e9c9b32SZequan Wu .long 0 # Bytes of callee saved registers 3525e9c9b32SZequan Wu .long 0 # Exception handler offset 3535e9c9b32SZequan Wu .short 0 # Exception handler section 3545e9c9b32SZequan Wu .long 81920 # Flags (defines frame register) 3555e9c9b32SZequan Wu .p2align 2 3565e9c9b32SZequan Wu.Ltmp30: 3575e9c9b32SZequan Wu .short .Ltmp32-.Ltmp31 # Record length 3585e9c9b32SZequan Wu.Ltmp31: 3595e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 3605e9c9b32SZequan Wu .long 116 # TypeIndex 3615e9c9b32SZequan Wu .short 1 # Flags 3625e9c9b32SZequan Wu .asciz "argc" 3635e9c9b32SZequan Wu .p2align 2 3645e9c9b32SZequan Wu.Ltmp32: 3655e9c9b32SZequan Wu .cv_def_range .Lfunc_begin1 .Ltmp4, reg, 18 3665e9c9b32SZequan Wu .short .Ltmp34-.Ltmp33 # Record length 3675e9c9b32SZequan Wu.Ltmp33: 3685e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 3695e9c9b32SZequan Wu .long 4104 # TypeIndex 3705e9c9b32SZequan Wu .short 1 # Flags 3715e9c9b32SZequan Wu .asciz "argv" 3725e9c9b32SZequan Wu .p2align 2 3735e9c9b32SZequan Wu.Ltmp34: 3745e9c9b32SZequan Wu .cv_def_range .Lfunc_begin1 .Ltmp5, reg, 331 3755e9c9b32SZequan Wu .short .Ltmp36-.Ltmp35 # Record length 3765e9c9b32SZequan Wu.Ltmp35: 3775e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 3785e9c9b32SZequan Wu .long 116 # TypeIndex 3795e9c9b32SZequan Wu .short 0 # Flags 3805e9c9b32SZequan Wu .asciz "local" 3815e9c9b32SZequan Wu .p2align 2 3825e9c9b32SZequan Wu.Ltmp36: 3835e9c9b32SZequan Wu .cv_def_range .Ltmp4 .Ltmp6, reg, 18 3845e9c9b32SZequan Wu .short .Ltmp38-.Ltmp37 # Record length 3855e9c9b32SZequan Wu.Ltmp37: 3865e9c9b32SZequan Wu .short 4414 # Record kind: S_LOCAL 3875e9c9b32SZequan Wu .long 4100 # TypeIndex 3885e9c9b32SZequan Wu .short 0 # Flags 3895e9c9b32SZequan Wu .asciz "s" 3905e9c9b32SZequan Wu .p2align 2 3915e9c9b32SZequan Wu.Ltmp38: 3925e9c9b32SZequan Wu .cv_def_range .Ltmp6 .Ltmp7, subfield_reg, 17, 0 39371d778f3SZequan Wu .short .Ltmp101-.Ltmp100 39471d778f3SZequan Wu# Manually created debug info for testing purpose. 39571d778f3SZequan Wu# 1. Test non-overlapped ranges. 39671d778f3SZequan Wu.Ltmp100: 39771d778f3SZequan Wu .short 4414 # Record kind: S_LOCAL 39871d778f3SZequan Wu .long 4109 # TypeIndex 39971d778f3SZequan Wu .short 0 # Flags 40071d778f3SZequan Wu .asciz "non_overlapped_ranges" 40171d778f3SZequan Wu .p2align 2 40271d778f3SZequan Wu.Ltmp101: 40371d778f3SZequan Wu .cv_def_range .L31 .L32, reg, 331 40471d778f3SZequan Wu .cv_def_range .L32 .L33, reg, 330 40571d778f3SZequan Wu .cv_def_range .L33 .L34, reg, 336 40671d778f3SZequan Wu .short .Ltmp103-.Ltmp102 40771d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001031 -v 40871d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001031-0x0000000140001034): C:\src\test\a.cpp:1000 40971d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "non_overlapped_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001031, 0x0000000140001032) -> DW_OP_reg3 RBX 41071d778f3SZequan Wu# CHECK-EMPTY: 41171d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001032 -v 41271d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001031-0x0000000140001034): C:\src\test\a.cpp:1000 41371d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "non_overlapped_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001032, 0x0000000140001033) -> DW_OP_reg2 RCX 41471d778f3SZequan Wu# CHECK-EMPTY: 41571d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001033 -v 41671d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001031-0x0000000140001034): C:\src\test\a.cpp:1000 41771d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "non_overlapped_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001033, 0x0000000140001034) -> DW_OP_reg8 R8 41871d778f3SZequan Wu# CHECK-EMPTY: 41971d778f3SZequan Wu 42071d778f3SZequan Wu# 2. Test overlapped subfield ranges at different offsets. 42171d778f3SZequan Wu.Ltmp102: 42271d778f3SZequan Wu .short 4414 # Record kind: S_LOCAL 42371d778f3SZequan Wu .long 4109 # TypeIndex 42471d778f3SZequan Wu .short 0 # Flags 42571d778f3SZequan Wu .asciz "overlapped_subfield_ranges" 42671d778f3SZequan Wu .p2align 2 42771d778f3SZequan Wu.Ltmp103: 42871d778f3SZequan Wu .cv_def_range .L34 .L36, subfield_reg, 3, 0 42971d778f3SZequan Wu .cv_def_range .L35 .L37, subfield_reg, 17, 4 43071d778f3SZequan Wu .cv_def_range .L37 .L39, subfield_reg, 18, 4 43171d778f3SZequan Wu .short .Ltmp105-.Ltmp104 43271d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001034 -v 43371d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001034-0x000000014000103b): C:\src\test\a.cpp:1001 43471d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_subfield_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001034, 0x0000000140001035) -> DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x7 43571d778f3SZequan Wu# CHECK-EMPTY: 43671d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001035 -v 43771d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001034-0x000000014000103b): C:\src\test\a.cpp:1001 43871d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_subfield_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001035, 0x0000000140001036) -> DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x3, DW_OP_reg24 XMM7, DW_OP_piece 0x4 43971d778f3SZequan Wu# CHECK-EMPTY: 44071d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001036 -v 44171d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001034-0x000000014000103b): C:\src\test\a.cpp:1001 44271d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_subfield_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001036, 0x0000000140001037) -> DW_OP_piece 0x4, DW_OP_reg24 XMM7, DW_OP_piece 0x4 44371d778f3SZequan Wu# CHECK-EMPTY: 44471d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001037 -v 44571d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001034-0x000000014000103b): C:\src\test\a.cpp:1001 44671d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_subfield_ranges", type = "S1", valid ranges = <block>, location = [0x0000000140001037, 0x0000000140001039) -> DW_OP_piece 0x4, DW_OP_reg26 XMM9, DW_OP_piece 0x4 44771d778f3SZequan Wu# CHECK-EMPTY: 44871d778f3SZequan Wu 44971d778f3SZequan Wu# 3. Test overlapped ranges for the whole value. 45071d778f3SZequan Wu.Ltmp104: 45171d778f3SZequan Wu .short 4414 # Record kind: S_LOCAL 45271d778f3SZequan Wu .long 4109 # TypeIndex 45371d778f3SZequan Wu .short 0 # Flags 45471d778f3SZequan Wu .asciz "overlapped_ranges_2" 45571d778f3SZequan Wu .p2align 2 45671d778f3SZequan Wu.Ltmp105: 45771d778f3SZequan Wu .cv_def_range .L3b .L3d, reg, 331 45871d778f3SZequan Wu .cv_def_range .L3c .L3e, reg, 330 45971d778f3SZequan Wu .cv_def_range .L3f .L44, reg, 339 46071d778f3SZequan Wu .cv_def_range .L41 .L43, reg, 328 46171d778f3SZequan Wu .short .Ltmp107-.Ltmp106 46271d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000103b -v 46371d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000103b-0x0000000140001045): C:\src\test\a.cpp:1002 46471d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_2", type = "S1", valid ranges = <block>, location = [0x000000014000103b, 0x000000014000103c) -> DW_OP_reg3 RBX 46571d778f3SZequan Wu# CHECK-EMPTY: 46671d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000103d -v 46771d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000103b-0x0000000140001045): C:\src\test\a.cpp:1002 46871d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_2", type = "S1", valid ranges = <block>, location = [0x000000014000103c, 0x000000014000103e) -> DW_OP_reg2 RCX 46971d778f3SZequan Wu# CHECK-EMPTY: 47071d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000103f -v 47171d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000103b-0x0000000140001045): C:\src\test\a.cpp:1002 47271d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_2", type = "S1", valid ranges = <block>, location = [0x000000014000103f, 0x0000000140001041) -> DW_OP_reg11 R11 47371d778f3SZequan Wu# CHECK-EMPTY: 47471d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001041 -v 47571d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000103b-0x0000000140001045): C:\src\test\a.cpp:1002 47671d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_2", type = "S1", valid ranges = <block>, location = [0x0000000140001041, 0x0000000140001043) -> DW_OP_reg0 RAX 47771d778f3SZequan Wu# CHECK-EMPTY: 47871d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001043 -v 47971d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000103b-0x0000000140001045): C:\src\test\a.cpp:1002 48071d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_2", type = "S1", valid ranges = <block>, location = [0x0000000140001043, 0x0000000140001044) -> DW_OP_reg11 R11 48171d778f3SZequan Wu# CHECK-EMPTY: 48271d778f3SZequan Wu 48371d778f3SZequan Wu# 4. Test overlapped ranges for both subfield and whole value. 48471d778f3SZequan Wu.Ltmp106: 48571d778f3SZequan Wu .short 4414 # Record kind: S_LOCAL 48671d778f3SZequan Wu .long 4109 # TypeIndex 48771d778f3SZequan Wu .short 0 # Flags 48871d778f3SZequan Wu .asciz "overlapped_ranges_3" 48971d778f3SZequan Wu .p2align 2 49071d778f3SZequan Wu.Ltmp107: 49171d778f3SZequan Wu # The following two lines result: 49271d778f3SZequan Wu # [.L45, .L46) -> value at offset 0 is at reg 3. 49371d778f3SZequan Wu # [.L46, .L49) -> value at offset 0 is at reg 3 and value at offset 4 is at reg 17. 49471d778f3SZequan Wu # [.L49, .L4a) -> value at offset 4 is at reg 17. 49571d778f3SZequan Wu .cv_def_range .L46 .L4a, subfield_reg, 17, 4 49671d778f3SZequan Wu .cv_def_range .L45 .L49, subfield_reg, 3, 0 49771d778f3SZequan Wu # The following overwrites range [.L47, .L48) and [.L49 .L4a) because whole 49871d778f3SZequan Wu # value location is preferred over composited value locations. 49971d778f3SZequan Wu .cv_def_range .L47 .L48, reg, 331 50071d778f3SZequan Wu .cv_def_range .L49 .L4a, reg, 328 50171d778f3SZequan Wu # For the same reason, reg 330 wins in following example. 50271d778f3SZequan Wu .cv_def_range .L4b .L4e, reg, 330 50371d778f3SZequan Wu .cv_def_range .L4b .L4d, subfield_reg, 17, 4 50471d778f3SZequan Wu .cv_def_range .L4c .L4e, subfield_reg, 3, 0 50571d778f3SZequan Wu .short .Ltmp109-.Ltmp108 50671d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001045 -v 50771d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 50871d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x0000000140001045, 0x0000000140001046) -> DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x7 50971d778f3SZequan Wu# CHECK-EMPTY: 51071d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001046 -v 51171d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 51271d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x0000000140001046, 0x0000000140001047) -> DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x3, DW_OP_reg24 XMM7, DW_OP_piece 0x4 51371d778f3SZequan Wu# CHECK-EMPTY: 51471d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001047 -v 51571d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 51671d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x0000000140001047, 0x0000000140001048) -> DW_OP_reg3 RBX 51771d778f3SZequan Wu# CHECK-EMPTY: 51871d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001048 -v 51971d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 52071d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x0000000140001048, 0x0000000140001049) -> DW_OP_regx 0x3f, DW_OP_piece 0x1, DW_OP_piece 0x3, DW_OP_reg24 XMM7, DW_OP_piece 0x4 52171d778f3SZequan Wu# CHECK-EMPTY: 52271d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x140001049 -v 52371d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 52471d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x0000000140001049, 0x000000014000104a) -> DW_OP_reg0 RAX 52571d778f3SZequan Wu# CHECK-EMPTY: 52671d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000104a -v 52771d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 52871d778f3SZequan Wu# CHECK-EMPTY: 52971d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000104b -v 53071d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 53171d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x000000014000104b, 0x000000014000104e) -> DW_OP_reg2 RCX 53271d778f3SZequan Wu# CHECK-EMPTY: 53371d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000104c -v 53471d778f3SZequan Wu# CHECK: LineEntry: [0x0000000140001045-0x000000014000104e): C:\src\test\a.cpp:1003 53571d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "overlapped_ranges_3", type = "S1", valid ranges = <block>, location = [0x000000014000104b, 0x000000014000104e) -> DW_OP_reg2 RCX 53671d778f3SZequan Wu# CHECK-EMPTY: 53771d778f3SZequan Wu 53871d778f3SZequan Wu# 5. Simple type with subfield. 53971d778f3SZequan Wu.Ltmp108: 54071d778f3SZequan Wu .short 4414 # Record kind: S_LOCAL 54171d778f3SZequan Wu .long 19 # TypeIndex 54271d778f3SZequan Wu .short 0 # Flags 54371d778f3SZequan Wu .asciz "simple_type1" 54471d778f3SZequan Wu .p2align 2 54571d778f3SZequan Wu.Ltmp109: 54671d778f3SZequan Wu .cv_def_range .L4e .L4f, subfield_reg, 17, 4 54771d778f3SZequan Wu .cv_def_range .L4e .L50, subfield_reg, 18, 0 54871d778f3SZequan Wu .short 2 5495e9c9b32SZequan Wu .short 4431 # Record kind: S_PROC_ID_END 55071d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000104e -v 55171d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000104e-0x0000000140001050): C:\src\test\a.cpp:1004 55271d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "simple_type1", type = "int64_t", valid ranges = <block>, location = [0x000000014000104e, 0x000000014000104f) -> DW_OP_reg26 XMM9, DW_OP_piece 0x4, DW_OP_reg24 XMM7, DW_OP_piece 0x4 55371d778f3SZequan Wu# CHECK-EMPTY: 55471d778f3SZequan Wu# CHECK: (lldb) image lookup -a 0x14000104f -v 55571d778f3SZequan Wu# CHECK: LineEntry: [0x000000014000104e-0x0000000140001050): C:\src\test\a.cpp:1004 55671d778f3SZequan Wu# CHECK-NEXT: Variable: id = {{.*}}, name = "simple_type1", type = "int64_t", valid ranges = <block>, location = [0x000000014000104f, 0x0000000140001050) -> DW_OP_reg26 XMM9, DW_OP_piece 0x4, DW_OP_piece 0x4 55771d778f3SZequan Wu# CHECK-EMPTY: 55871d778f3SZequan Wu 5595e9c9b32SZequan Wu.Ltmp26: 5605e9c9b32SZequan Wu .p2align 2 5615e9c9b32SZequan Wu .cv_linetable 1, main, .Lfunc_end1 5625e9c9b32SZequan Wu .section .debug$S,"dr" 5635e9c9b32SZequan Wu .long 241 5645e9c9b32SZequan Wu .long .Ltmp40-.Ltmp39 # Subsection size 5655e9c9b32SZequan Wu.Ltmp39: 5665e9c9b32SZequan Wu .short .Ltmp42-.Ltmp41 # Record length 5675e9c9b32SZequan Wu.Ltmp41: 5685e9c9b32SZequan Wu .short 4360 # Record kind: S_UDT 5695e9c9b32SZequan Wu .long 4100 # Type 5705e9c9b32SZequan Wu .asciz "S" 5715e9c9b32SZequan Wu .p2align 2 5725e9c9b32SZequan Wu.Ltmp42: 5735e9c9b32SZequan Wu.Ltmp40: 5745e9c9b32SZequan Wu .p2align 2 5755e9c9b32SZequan Wu .cv_filechecksums # File index to string table offset subsection 5765e9c9b32SZequan Wu .cv_stringtable # String table 5775e9c9b32SZequan Wu .long 241 5785e9c9b32SZequan Wu .long .Ltmp44-.Ltmp43 # Subsection size 5795e9c9b32SZequan Wu.Ltmp43: 5805e9c9b32SZequan Wu .short .Ltmp46-.Ltmp45 # Record length 5815e9c9b32SZequan Wu.Ltmp45: 5825e9c9b32SZequan Wu .short 4428 # Record kind: S_BUILDINFO 5835e9c9b32SZequan Wu .long 4110 # LF_BUILDINFO index 5845e9c9b32SZequan Wu .p2align 2 5855e9c9b32SZequan Wu.Ltmp46: 5865e9c9b32SZequan Wu.Ltmp44: 5875e9c9b32SZequan Wu .p2align 2 5885e9c9b32SZequan Wu .section .debug$T,"dr" 5895e9c9b32SZequan Wu .p2align 2 5905e9c9b32SZequan Wu .long 4 # Debug section magic 5915e9c9b32SZequan Wu # Struct (0x1000) 5925e9c9b32SZequan Wu .short 0x1e # Record length 5935e9c9b32SZequan Wu .short 0x1505 # Record kind: LF_STRUCTURE 5945e9c9b32SZequan Wu .short 0x0 # MemberCount 5955e9c9b32SZequan Wu .short 0x280 # Properties ( ForwardReference (0x80) | HasUniqueName (0x200) ) 5965e9c9b32SZequan Wu .long 0x0 # FieldList 5975e9c9b32SZequan Wu .long 0x0 # DerivedFrom 5985e9c9b32SZequan Wu .long 0x0 # VShape 5995e9c9b32SZequan Wu .short 0x0 # SizeOf 6005e9c9b32SZequan Wu .asciz "S" # Name 6015e9c9b32SZequan Wu .asciz ".?AUS@@" # LinkageName 6025e9c9b32SZequan Wu # ArgList (0x1001) 6035e9c9b32SZequan Wu .short 0xe # Record length 6045e9c9b32SZequan Wu .short 0x1201 # Record kind: LF_ARGLIST 6055e9c9b32SZequan Wu .long 0x2 # NumArgs 6065e9c9b32SZequan Wu .long 0x74 # Argument: int 6075e9c9b32SZequan Wu .long 0x70 # Argument: char 6085e9c9b32SZequan Wu # Procedure (0x1002) 6095e9c9b32SZequan Wu .short 0xe # Record length 6105e9c9b32SZequan Wu .short 0x1008 # Record kind: LF_PROCEDURE 6115e9c9b32SZequan Wu .long 0x1000 # ReturnType: S 6125e9c9b32SZequan Wu .byte 0x0 # CallingConvention: NearC 6135e9c9b32SZequan Wu .byte 0x0 # FunctionOptions 6145e9c9b32SZequan Wu .short 0x2 # NumParameters 6155e9c9b32SZequan Wu .long 0x1001 # ArgListType: (int, char) 6165e9c9b32SZequan Wu # FieldList (0x1003) 6175e9c9b32SZequan Wu .short 0x1a # Record length 6185e9c9b32SZequan Wu .short 0x1203 # Record kind: LF_FIELDLIST 6195e9c9b32SZequan Wu .short 0x150d # Member kind: DataMember ( LF_MEMBER ) 6205e9c9b32SZequan Wu .short 0x3 # Attrs: Public 6215e9c9b32SZequan Wu .long 0x74 # Type: int 6225e9c9b32SZequan Wu .short 0x0 # FieldOffset 6235e9c9b32SZequan Wu .asciz "x" # Name 6245e9c9b32SZequan Wu .short 0x150d # Member kind: DataMember ( LF_MEMBER ) 6255e9c9b32SZequan Wu .short 0x3 # Attrs: Public 6265e9c9b32SZequan Wu .long 0x70 # Type: char 6275e9c9b32SZequan Wu .short 0x4 # FieldOffset 6285e9c9b32SZequan Wu .asciz "y" # Name 6295e9c9b32SZequan Wu # Struct (0x1004) 6305e9c9b32SZequan Wu .short 0x1e # Record length 6315e9c9b32SZequan Wu .short 0x1505 # Record kind: LF_STRUCTURE 6325e9c9b32SZequan Wu .short 0x2 # MemberCount 6335e9c9b32SZequan Wu .short 0x200 # Properties ( HasUniqueName (0x200) ) 6345e9c9b32SZequan Wu .long 0x1003 # FieldList: <field list> 6355e9c9b32SZequan Wu .long 0x0 # DerivedFrom 6365e9c9b32SZequan Wu .long 0x0 # VShape 6375e9c9b32SZequan Wu .short 0x8 # SizeOf 6385e9c9b32SZequan Wu .asciz "S" # Name 6395e9c9b32SZequan Wu .asciz ".?AUS@@" # LinkageName 6405e9c9b32SZequan Wu # StringId (0x1005) 6415e9c9b32SZequan Wu .short 0x1a # Record length 6425e9c9b32SZequan Wu .short 0x1605 # Record kind: LF_STRING_ID 6435e9c9b32SZequan Wu .long 0x0 # Id 6445e9c9b32SZequan Wu .asciz "C:\\src\\test\\a.cpp" # StringData 6455e9c9b32SZequan Wu .byte 242 6465e9c9b32SZequan Wu .byte 241 6475e9c9b32SZequan Wu # UdtSourceLine (0x1006) 6485e9c9b32SZequan Wu .short 0xe # Record length 6495e9c9b32SZequan Wu .short 0x1606 # Record kind: LF_UDT_SRC_LINE 6505e9c9b32SZequan Wu .long 0x1004 # UDT: S 6515e9c9b32SZequan Wu .long 0x1005 # SourceFile: C:\src\test\a.cpp 6525e9c9b32SZequan Wu .long 0x1 # LineNumber 6535e9c9b32SZequan Wu # FuncId (0x1007) 6545e9c9b32SZequan Wu .short 0x12 # Record length 6555e9c9b32SZequan Wu .short 0x1601 # Record kind: LF_FUNC_ID 6565e9c9b32SZequan Wu .long 0x0 # ParentScope 6575e9c9b32SZequan Wu .long 0x1002 # FunctionType: S (int, char) 6585e9c9b32SZequan Wu .asciz "CreateS" # Name 6595e9c9b32SZequan Wu # Pointer (0x1008) 6605e9c9b32SZequan Wu .short 0xa # Record length 6615e9c9b32SZequan Wu .short 0x1002 # Record kind: LF_POINTER 6625e9c9b32SZequan Wu .long 0x670 # PointeeType: char* 6635e9c9b32SZequan Wu .long 0x1000c # Attrs: [ Type: Near64, Mode: Pointer, SizeOf: 8 ] 6645e9c9b32SZequan Wu # ArgList (0x1009) 6655e9c9b32SZequan Wu .short 0xe # Record length 6665e9c9b32SZequan Wu .short 0x1201 # Record kind: LF_ARGLIST 6675e9c9b32SZequan Wu .long 0x2 # NumArgs 6685e9c9b32SZequan Wu .long 0x74 # Argument: int 6695e9c9b32SZequan Wu .long 0x1008 # Argument: char** 6705e9c9b32SZequan Wu # Procedure (0x100A) 6715e9c9b32SZequan Wu .short 0xe # Record length 6725e9c9b32SZequan Wu .short 0x1008 # Record kind: LF_PROCEDURE 6735e9c9b32SZequan Wu .long 0x74 # ReturnType: int 6745e9c9b32SZequan Wu .byte 0x0 # CallingConvention: NearC 6755e9c9b32SZequan Wu .byte 0x0 # FunctionOptions 6765e9c9b32SZequan Wu .short 0x2 # NumParameters 6775e9c9b32SZequan Wu .long 0x1009 # ArgListType: (int, char**) 6785e9c9b32SZequan Wu # FuncId (0x100B) 6795e9c9b32SZequan Wu .short 0x12 # Record length 6805e9c9b32SZequan Wu .short 0x1601 # Record kind: LF_FUNC_ID 6815e9c9b32SZequan Wu .long 0x0 # ParentScope 6825e9c9b32SZequan Wu .long 0x100a # FunctionType: int (int, char**) 6835e9c9b32SZequan Wu .asciz "main" # Name 6845e9c9b32SZequan Wu .byte 243 6855e9c9b32SZequan Wu .byte 242 6865e9c9b32SZequan Wu .byte 241 68771d778f3SZequan Wu # Manually created debug info for testing purpose, FieldList (0x100C) and Struct (0x100D) 68871d778f3SZequan Wu # FieldList (0x100C) 68971d778f3SZequan Wu .short 0x1a # Record length 69071d778f3SZequan Wu .short 0x1203 # Record kind: LF_FIELDLIST 69171d778f3SZequan Wu .short 0x150d # Member kind: DataMember ( LF_MEMBER ) 69271d778f3SZequan Wu .short 0x3 # Attrs: Public 69371d778f3SZequan Wu .long 0x70 # Type: char 69471d778f3SZequan Wu .short 0x0 # FieldOffset 69571d778f3SZequan Wu .asciz "c" # Name 69671d778f3SZequan Wu .short 0x150d # Member kind: DataMember ( LF_MEMBER ) 69771d778f3SZequan Wu .short 0x3 # Attrs: Public 69871d778f3SZequan Wu .long 0x74 # Type: int 69971d778f3SZequan Wu .short 0x4 # FieldOffset 70071d778f3SZequan Wu .asciz "i" # Name 70171d778f3SZequan Wu # Struct (0x100D) 70271d778f3SZequan Wu .short 0x20 # Record length 70371d778f3SZequan Wu .short 0x1505 # Record kind: LF_STRUCTURE 70471d778f3SZequan Wu .short 0x2 # MemberCount 70571d778f3SZequan Wu .short 0x200 # Properties ( HasUniqueName (0x200) ) 70671d778f3SZequan Wu .long 0x100c # FieldList: <field list> 70771d778f3SZequan Wu .long 0x0 # DerivedFrom 70871d778f3SZequan Wu .long 0x0 # VShape 70971d778f3SZequan Wu .short 0x8 # SizeOf 71071d778f3SZequan Wu .asciz "S1" # Name 71171d778f3SZequan Wu .asciz ".?AUS1@@" # LinkageName 7125e9c9b32SZequan Wu # BuildInfo (0x100E) 7135e9c9b32SZequan Wu .short 0x1a # Record length 7145e9c9b32SZequan Wu .short 0x1603 # Record kind: LF_BUILDINFO 71571d778f3SZequan Wu .short 0x1 # NumArgs 7165e9c9b32SZequan Wu .long 0x0 # Argument 71771d778f3SZequan Wu .long 0x0 # Argument 71871d778f3SZequan Wu .long 0x0 # Argument 7195e9c9b32SZequan Wu .long 0x0 # Argument 7205e9c9b32SZequan Wu .long 0x0 # Argument 7215e9c9b32SZequan Wu .byte 242 7225e9c9b32SZequan Wu .byte 241 7235e9c9b32SZequan Wu .addrsig 724