xref: /llvm-project/lldb/test/Shell/SymbolFile/NativePDB/local-variables-registers.s (revision cf3464bbb796d492bcd4e764ada945304e0c874f)
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