# clang-format off # REQUIRES: lld, x86 # 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 # RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \ # RUN: %p/Inputs/inline_sites.lldbinit 2>&1 | FileCheck %s # Compiled from the following files, but replaced the call to abort with nop. # a.cpp: # #include "stdlib.h" # #include "a.h" # int main(int argc, char** argv) { # Namespace1::foo(2); # return 0; # } # a.h: # #include "b.h" # namespace Namespace1 { # inline void foo(int x) { # static volatile int gv_foo; # ++gv_foo; # if (!gv_foo) # abort(); # Class1::bar(x + 1); # } # } # b.h: # #include "c.h" # class Class1 { # public: # inline static void bar(int x) { # static volatile int gv_bar; # ++gv_bar; # Namespace2::Class2::func(x + 1); # } # }; # c.h: # namespace Namespace2{ # class Class2{ # public: # inline static void func(int x) { # static volatile int gv_func; # gv_func += x; # } # }; # } # CHECK: (lldb) image dump line-table a.cpp -v # CHECK-NEXT: Line table for {{.*}}a.cpp in # CHECK-NEXT: 0x0000000140001000: {{.*}}a.cpp:3 # CHECK-NEXT: 0x0000000140001004: {{.*}}a.h:5, is_start_of_statement = TRUE, is_prologue_end = TRUE # CHECK-NEXT: 0x000000014000100a: {{.*}}a.h:6 # CHECK-NEXT: 0x0000000140001014: {{.*}}b.h:6, is_start_of_statement = TRUE, is_prologue_end = TRUE # CHECK-NEXT: 0x000000014000101a: {{.*}}c.h:6, is_start_of_statement = TRUE, is_prologue_end = TRUE # CHECK-NEXT: 0x0000000140001021: {{.*}}a.cpp:5 # CHECK-NEXT: 0x0000000140001028: {{.*}}a.h:7, is_start_of_statement = TRUE # CHECK-NEXT: 0x000000014000102a: {{.*}}a.cpp:5, is_terminal_entry = TRUE # CEHCK: (lldb) b a.cpp:5 # CHECK: Breakpoint 1: where = {{.*}}`main + 33 at a.cpp:5, address = 0x0000000140001021 # CEHCK: (lldb) b a.h:5 # CHECK: Breakpoint 2: where = {{.*}}`main + 4 [inlined] Namespace1::foo at a.h:5, address = 0x0000000140001004 # CEHCK: (lldb) b a.h:6 # CHECK: Breakpoint 3: where = {{.*}}`main + 10 [inlined] Namespace1::foo + 6 at a.h:6, address = 0x000000014000100a # CEHCK: (lldb) b a.h:7 # CHECK: Breakpoint 4: where = {{.*}}`main + 40 [inlined] Namespace1::foo at a.h:7, address = 0x0000000140001028 # CEHCK: (lldb) b b.h:6 # CHECK: Breakpoint 5: where = {{.*}}`main + 20 [inlined] Class1::bar at b.h:6, address = 0x0000000140001014 # CEHCK: (lldb) b c.h:6 # CHECK: Breakpoint 6: where = {{.*}}`main + 26 [inlined] Namespace2::Class2::func at c.h:6, address = 0x000000014000101a # CEHCK-LABEL: (lldb) image lookup -a 0x140001003 -v # CHECK: Summary: {{.*}}`main + 3 at a.cpp:3 # CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x000000014000102a) # CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x14000102a) # CHECK: LineEntry: [0x0000000140001000-0x0000000140001004): {{.*}}a.cpp:3 # CEHCK-LABEL: (lldb) image lookup -a 0x140001004 -v # CHECK: Summary: {{.*}}`main + 4 [inlined] Namespace1::foo at a.h:5 # CHECK-NEXT: {{.*}}`main + 4 at a.cpp:4 # CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x000000014000102a) # CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x14000102a) # CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001021)[0x140001028-0x14000102a), name = "Namespace1::foo", decl = a.h:3 # CHECK: LineEntry: [0x0000000140001004-0x000000014000100a): {{.*}}a.h:5 # CEHCK-LABEL: (lldb) image lookup -a 0x140001014 -v # CHECK: Summary: {{.*}}`main + 20 [inlined] Class1::bar at b.h:6 # CHECK-NEXT: {{.*}}`main + 20 [inlined] Namespace1::foo + 16 at a.h:8 # CHECK-NEXT: {{.*}}`main + 4 at a.cpp:4 # CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x000000014000102a) # CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x14000102a) # CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001021)[0x140001028-0x14000102a), name = "Namespace1::foo", decl = a.h:3 # CHECK-NEXT: id = {{.*}}, range = [0x140001014-0x140001021), name = "Class1::bar", decl = b.h:4 # CHECK: LineEntry: [0x0000000140001014-0x000000014000101a): {{.*}}b.h:6 # CEHCK-LABEL: (lldb) image lookup -a 0x14000101a -v # CHECK: Summary: {{.*}}`main + 26 [inlined] Namespace2::Class2::func at c.h:6 # CHECK-NEXT: {{.*}}`main + 26 [inlined] Class1::bar + 6 at b.h:7 # CHECK-NEXT: {{.*}}`main + 20 [inlined] Namespace1::foo + 16 at a.h:8 # CHECK-NEXT: {{.*}}`main + 4 at a.cpp:4 # CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x000000014000102a) # CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x14000102a) # CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001021)[0x140001028-0x14000102a), name = "Namespace1::foo", decl = a.h:3 # CHECK-NEXT: id = {{.*}}, range = [0x140001014-0x140001021), name = "Class1::bar", decl = b.h:4 # CHECK-NEXT: id = {{.*}}, range = [0x14000101a-0x140001021), name = "Namespace2::Class2::func", decl = c.h:4 # CHECK: LineEntry: [0x000000014000101a-0x0000000140001021): {{.*}}c.h:6 # CEHCK-LABEL: (lldb) image lookup -a 0x140001021 -v # CHECK: Summary: {{.*}}`main + 33 at a.cpp:5 # CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x000000014000102a) # CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x14000102a) # CHECK: LineEntry: [0x0000000140001021-0x0000000140001028): {{.*}}a.cpp:5 # CEHCK-LABEL: (lldb) image lookup -a 0x140001028 -v # CHECK: Summary: {{.*}}`main + 40 [inlined] Namespace1::foo at a.h:7 # CHECK-NEXT: {{.*}}`main + 40 at a.cpp:4 # CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x000000014000102a) # CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x14000102a) # CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001021)[0x140001028-0x14000102a), name = "Namespace1::foo", decl = a.h:3 # CHECK: LineEntry: [0x0000000140001028-0x000000014000102a): {{.*}}a.h:7 .text .def @feat.00; .scl 3; .type 0; .endef .globl @feat.00 .set @feat.00, 0 .intel_syntax noprefix .file "a.cpp" .def main; .scl 2; .type 32; .endef .section .text,"xr",one_only,main .globl main # -- Begin function main main: # @main .Lfunc_begin0: .cv_func_id 0 .cv_file 1 "/tmp/a.cpp" "4ECCDD2814054DCF80EA72F4349036C4" 1 .cv_loc 0 1 3 0 # a.cpp:3:0 .seh_proc main # %bb.0: # %entry #DEBUG_VALUE: main:argv <- $rdx #DEBUG_VALUE: main:argc <- $ecx #DEBUG_VALUE: foo:x <- 2 sub rsp, 40 .seh_stackalloc 40 .seh_endprologue .Ltmp0: .cv_file 2 "/tmp/./a.h" "9E656AFA1B1B681265C87EEA8BBE073E" 1 .cv_inline_site_id 1 within 0 inlined_at 1 4 0 .cv_loc 1 2 5 0 # ./a.h:5:0 inc dword ptr [rip + "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC"] .cv_loc 1 2 6 0 # ./a.h:6:0 mov eax, dword ptr [rip + "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC"] test eax, eax je .LBB0_2 .Ltmp1: # %bb.1: # %"?foo@Namespace1@@YAXH@Z.exit" #DEBUG_VALUE: foo:x <- 2 #DEBUG_VALUE: main:argc <- $ecx #DEBUG_VALUE: main:argv <- $rdx #DEBUG_VALUE: bar:x <- [DW_OP_plus_uconst 1, DW_OP_stack_value] 2 .cv_file 3 "/tmp/./b.h" "BE52983EB17A3B0DA14E68A5CCBC4399" 1 .cv_inline_site_id 2 within 1 inlined_at 2 8 0 .cv_loc 2 3 6 0 # ./b.h:6:0 inc dword ptr [rip + "?gv_bar@?1??bar@Class1@@SAXH@Z@4HC"] .Ltmp2: #DEBUG_VALUE: func:x <- 4 .cv_file 4 "/tmp/./c.h" "D1B76A1C2A54DBEA648F3A11496166B8" 1 .cv_inline_site_id 3 within 2 inlined_at 3 7 0 .cv_loc 3 4 6 0 # ./c.h:6:0 add dword ptr [rip + "?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC"], 4 .Ltmp3: .cv_loc 0 1 5 0 # a.cpp:5:0 xor eax, eax add rsp, 40 ret .Ltmp4: .LBB0_2: # %if.then.i #DEBUG_VALUE: foo:x <- 2 #DEBUG_VALUE: main:argc <- $ecx #DEBUG_VALUE: main:argv <- $rdx .cv_loc 1 2 7 0 # ./a.h:7:0 nop .Ltmp5: int3 .Ltmp6: #DEBUG_VALUE: main:argv <- [DW_OP_LLVM_entry_value 1] $rdx #DEBUG_VALUE: main:argc <- [DW_OP_LLVM_entry_value 1] $ecx .Lfunc_end0: .seh_endproc # -- End function .section .bss,"bw",discard,"?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC" .globl "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC" # @"?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC" .p2align 2 "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC": .long 0 # 0x0 .section .bss,"bw",discard,"?gv_bar@?1??bar@Class1@@SAXH@Z@4HC" .globl "?gv_bar@?1??bar@Class1@@SAXH@Z@4HC" # @"?gv_bar@?1??bar@Class1@@SAXH@Z@4HC" .p2align 2 "?gv_bar@?1??bar@Class1@@SAXH@Z@4HC": .long 0 # 0x0 .section .bss,"bw",discard,"?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC" .globl "?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC" # @"?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC" .p2align 2 "?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC": .long 0 # 0x0 .section .drectve,"yn" .ascii " /DEFAULTLIB:libcmt.lib" .ascii " /DEFAULTLIB:oldnames.lib" .section .debug$S,"dr" .p2align 2 .long 4 # Debug section magic .long 241 .long .Ltmp8-.Ltmp7 # Subsection size .Ltmp7: .short .Ltmp10-.Ltmp9 # Record length .Ltmp9: .short 4353 # Record kind: S_OBJNAME .long 0 # Signature .asciz "/tmp/a-e5dd01.obj" # Object name .p2align 2 .Ltmp10: .short .Ltmp12-.Ltmp11 # Record length .Ltmp11: .short 4412 # Record kind: S_COMPILE3 .long 1 # Flags and language .short 208 # CPUType .short 14 # Frontend version .short 0 .short 0 .short 0 .short 14000 # Backend version .short 0 .short 0 .short 0 .asciz "clang version 14.0.0" # Null-terminated compiler version string .p2align 2 .Ltmp12: .Ltmp8: .p2align 2 .long 246 # Inlinee lines subsection .long .Ltmp14-.Ltmp13 # Subsection size .Ltmp13: .long 0 # Inlinee lines signature # Inlined function foo starts at ./a.h:3 .long 4099 # Type index of inlined function .cv_filechecksumoffset 2 # Offset into filechecksum table .long 3 # Starting line number # Inlined function bar starts at ./b.h:4 .long 4106 # Type index of inlined function .cv_filechecksumoffset 3 # Offset into filechecksum table .long 4 # Starting line number # Inlined function func starts at ./c.h:4 .long 4113 # Type index of inlined function .cv_filechecksumoffset 4 # Offset into filechecksum table .long 4 # Starting line number .Ltmp14: .p2align 2 .section .debug$S,"dr",associative,main .p2align 2 .long 4 # Debug section magic .long 241 # Symbol subsection for main .long .Ltmp16-.Ltmp15 # Subsection size .Ltmp15: .short .Ltmp18-.Ltmp17 # Record length .Ltmp17: .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 4117 # Function type index .secrel32 main # Function section relative address .secidx main # Function section index .byte 0 # Flags .asciz "main" # Function name .p2align 2 .Ltmp18: .short .Ltmp20-.Ltmp19 # Record length .Ltmp19: .short 4114 # Record kind: S_FRAMEPROC .long 40 # 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 .Ltmp20: .short .Ltmp22-.Ltmp21 # Record length .Ltmp21: .short 4414 # Record kind: S_LOCAL .long 116 # TypeIndex .short 1 # Flags .asciz "argc" .p2align 2 .Ltmp22: .cv_def_range .Lfunc_begin0 .Ltmp5, reg, 18 .short .Ltmp24-.Ltmp23 # Record length .Ltmp23: .short 4414 # Record kind: S_LOCAL .long 4114 # TypeIndex .short 1 # Flags .asciz "argv" .p2align 2 .Ltmp24: .cv_def_range .Lfunc_begin0 .Ltmp5, reg, 331 .short .Ltmp26-.Ltmp25 # Record length .Ltmp25: .short 4365 # Record kind: S_GDATA32 .long 4118 # Type .secrel32 "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC" # DataOffset .secidx "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC" # Segment .asciz "Namespace1::foo::gv_foo" # Name .p2align 2 .Ltmp26: .short .Ltmp28-.Ltmp27 # Record length .Ltmp27: .short 4365 # Record kind: S_GDATA32 .long 4118 # Type .secrel32 "?gv_bar@?1??bar@Class1@@SAXH@Z@4HC" # DataOffset .secidx "?gv_bar@?1??bar@Class1@@SAXH@Z@4HC" # Segment .asciz "Class1::bar::gv_bar" # Name .p2align 2 .Ltmp28: .short .Ltmp30-.Ltmp29 # Record length .Ltmp29: .short 4365 # Record kind: S_GDATA32 .long 4118 # Type .secrel32 "?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC" # DataOffset .secidx "?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC" # Segment .asciz "Namespace2::Class2::func::gv_func" # Name .p2align 2 .Ltmp30: .short .Ltmp32-.Ltmp31 # Record length .Ltmp31: .short 4429 # Record kind: S_INLINESITE .long 0 # PtrParent .long 0 # PtrEnd .long 4099 # Inlinee type index .cv_inline_linetable 1 2 3 .Lfunc_begin0 .Lfunc_end0 .p2align 2 .Ltmp32: .short .Ltmp34-.Ltmp33 # Record length .Ltmp33: .short 4414 # Record kind: S_LOCAL .long 116 # TypeIndex .short 257 # Flags .asciz "x" .p2align 2 .Ltmp34: .short .Ltmp36-.Ltmp35 # Record length .Ltmp35: .short 4429 # Record kind: S_INLINESITE .long 0 # PtrParent .long 0 # PtrEnd .long 4106 # Inlinee type index .cv_inline_linetable 2 3 4 .Lfunc_begin0 .Lfunc_end0 .p2align 2 .Ltmp36: .short .Ltmp38-.Ltmp37 # Record length .Ltmp37: .short 4414 # Record kind: S_LOCAL .long 116 # TypeIndex .short 257 # Flags .asciz "x" .p2align 2 .Ltmp38: .short .Ltmp40-.Ltmp39 # Record length .Ltmp39: .short 4429 # Record kind: S_INLINESITE .long 0 # PtrParent .long 0 # PtrEnd .long 4113 # Inlinee type index .cv_inline_linetable 3 4 4 .Lfunc_begin0 .Lfunc_end0 .p2align 2 .Ltmp40: .short .Ltmp42-.Ltmp41 # Record length .Ltmp41: .short 4414 # Record kind: S_LOCAL .long 116 # TypeIndex .short 257 # Flags .asciz "x" .p2align 2 .Ltmp42: .short 2 # Record length .short 4430 # Record kind: S_INLINESITE_END .short 2 # Record length .short 4430 # Record kind: S_INLINESITE_END .short 2 # Record length .short 4430 # Record kind: S_INLINESITE_END .short 2 # Record length .short 4431 # Record kind: S_PROC_ID_END .Ltmp16: .p2align 2 .cv_linetable 0, main, .Lfunc_end0 .section .debug$S,"dr" .long 241 .long .Ltmp44-.Ltmp43 # Subsection size .Ltmp43: .short .Ltmp46-.Ltmp45 # Record length .Ltmp45: .short 4360 # Record kind: S_UDT .long 4103 # Type .asciz "Class1" .p2align 2 .Ltmp46: .short .Ltmp48-.Ltmp47 # Record length .Ltmp47: .short 4360 # Record kind: S_UDT .long 4110 # Type .asciz "Namespace2::Class2" .p2align 2 .Ltmp48: .Ltmp44: .p2align 2 .cv_filechecksums # File index to string table offset subsection .cv_stringtable # String table .long 241 .long .Ltmp50-.Ltmp49 # Subsection size .Ltmp49: .short .Ltmp52-.Ltmp51 # Record length .Ltmp51: .short 4428 # Record kind: S_BUILDINFO .long 4121 # LF_BUILDINFO index .p2align 2 .Ltmp52: .Ltmp50: .p2align 2 .section .debug$T,"dr" .p2align 2 .long 4 # Debug section magic # StringId (0x1000) .short 0x12 # Record length .short 0x1605 # Record kind: LF_STRING_ID .long 0x0 # Id .asciz "Namespace1" # StringData .byte 241 # ArgList (0x1001) .short 0xa # Record length .short 0x1201 # Record kind: LF_ARGLIST .long 0x1 # NumArgs .long 0x74 # Argument: int # Procedure (0x1002) .short 0xe # Record length .short 0x1008 # Record kind: LF_PROCEDURE .long 0x3 # ReturnType: void .byte 0x0 # CallingConvention: NearC .byte 0x0 # FunctionOptions .short 0x1 # NumParameters .long 0x1001 # ArgListType: (int) # FuncId (0x1003) .short 0xe # Record length .short 0x1601 # Record kind: LF_FUNC_ID .long 0x1000 # ParentScope: Namespace1 .long 0x1002 # FunctionType: void (int) .asciz "foo" # Name # Class (0x1004) .short 0x2a # Record length .short 0x1504 # Record kind: LF_CLASS .short 0x0 # MemberCount .short 0x280 # Properties ( ForwardReference (0x80) | HasUniqueName (0x200) ) .long 0x0 # FieldList .long 0x0 # DerivedFrom .long 0x0 # VShape .short 0x0 # SizeOf .asciz "Class1" # Name .asciz ".?AVClass1@@" # LinkageName .byte 242 .byte 241 # MemberFunction (0x1005) .short 0x1a # Record length .short 0x1009 # Record kind: LF_MFUNCTION .long 0x3 # ReturnType: void .long 0x1004 # ClassType: Class1 .long 0x0 # ThisType .byte 0x0 # CallingConvention: NearC .byte 0x0 # FunctionOptions .short 0x1 # NumParameters .long 0x1001 # ArgListType: (int) .long 0x0 # ThisAdjustment # FieldList (0x1006) .short 0xe # Record length .short 0x1203 # Record kind: LF_FIELDLIST .short 0x1511 # Member kind: OneMethod ( LF_ONEMETHOD ) .short 0xb # Attrs: Public, Static .long 0x1005 # Type: void Class1::(int) .asciz "bar" # Name # Class (0x1007) .short 0x2a # Record length .short 0x1504 # Record kind: LF_CLASS .short 0x1 # MemberCount .short 0x200 # Properties ( HasUniqueName (0x200) ) .long 0x1006 # FieldList: .long 0x0 # DerivedFrom .long 0x0 # VShape .short 0x1 # SizeOf .asciz "Class1" # Name .asciz ".?AVClass1@@" # LinkageName .byte 242 .byte 241 # StringId (0x1008) .short 0x12 # Record length .short 0x1605 # Record kind: LF_STRING_ID .long 0x0 # Id .asciz "/tmp/./b.h" # StringData .byte 241 # UdtSourceLine (0x1009) .short 0xe # Record length .short 0x1606 # Record kind: LF_UDT_SRC_LINE .long 0x1007 # UDT: Class1 .long 0x1008 # SourceFile: /tmp/./b.h .long 0x2 # LineNumber # MemberFuncId (0x100A) .short 0xe # Record length .short 0x1602 # Record kind: LF_MFUNC_ID .long 0x1004 # ClassType: Class1 .long 0x1005 # FunctionType: void Class1::(int) .asciz "bar" # Name # Class (0x100B) .short 0x42 # Record length .short 0x1504 # Record kind: LF_CLASS .short 0x0 # MemberCount .short 0x280 # Properties ( ForwardReference (0x80) | HasUniqueName (0x200) ) .long 0x0 # FieldList .long 0x0 # DerivedFrom .long 0x0 # VShape .short 0x0 # SizeOf .asciz "Namespace2::Class2" # Name .asciz ".?AVClass2@Namespace2@@" # LinkageName .byte 243 .byte 242 .byte 241 # MemberFunction (0x100C) .short 0x1a # Record length .short 0x1009 # Record kind: LF_MFUNCTION .long 0x3 # ReturnType: void .long 0x100b # ClassType: Namespace2::Class2 .long 0x0 # ThisType .byte 0x0 # CallingConvention: NearC .byte 0x0 # FunctionOptions .short 0x1 # NumParameters .long 0x1001 # ArgListType: (int) .long 0x0 # ThisAdjustment # FieldList (0x100D) .short 0x12 # Record length .short 0x1203 # Record kind: LF_FIELDLIST .short 0x1511 # Member kind: OneMethod ( LF_ONEMETHOD ) .short 0xb # Attrs: Public, Static .long 0x100c # Type: void Namespace2::Class2::(int) .asciz "func" # Name .byte 243 .byte 242 .byte 241 # Class (0x100E) .short 0x42 # Record length .short 0x1504 # Record kind: LF_CLASS .short 0x1 # MemberCount .short 0x200 # Properties ( HasUniqueName (0x200) ) .long 0x100d # FieldList: .long 0x0 # DerivedFrom .long 0x0 # VShape .short 0x1 # SizeOf .asciz "Namespace2::Class2" # Name .asciz ".?AVClass2@Namespace2@@" # LinkageName .byte 243 .byte 242 .byte 241 # StringId (0x100F) .short 0x12 # Record length .short 0x1605 # Record kind: LF_STRING_ID .long 0x0 # Id .asciz "/tmp/./c.h" # StringData .byte 241 # UdtSourceLine (0x1010) .short 0xe # Record length .short 0x1606 # Record kind: LF_UDT_SRC_LINE .long 0x100e # UDT: Namespace2::Class2 .long 0x100f # SourceFile: /tmp/./c.h .long 0x2 # LineNumber # MemberFuncId (0x1011) .short 0x12 # Record length .short 0x1602 # Record kind: LF_MFUNC_ID .long 0x100b # ClassType: Namespace2::Class2 .long 0x100c # FunctionType: void Namespace2::Class2::(int) .asciz "func" # Name .byte 243 .byte 242 .byte 241 # Pointer (0x1012) .short 0xa # Record length .short 0x1002 # Record kind: LF_POINTER .long 0x670 # PointeeType: char* .long 0x1000c # Attrs: [ Type: Near64, Mode: Pointer, SizeOf: 8 ] # ArgList (0x1013) .short 0xe # Record length .short 0x1201 # Record kind: LF_ARGLIST .long 0x2 # NumArgs .long 0x74 # Argument: int .long 0x1012 # Argument: char** # Procedure (0x1014) .short 0xe # Record length .short 0x1008 # Record kind: LF_PROCEDURE .long 0x74 # ReturnType: int .byte 0x0 # CallingConvention: NearC .byte 0x0 # FunctionOptions .short 0x2 # NumParameters .long 0x1013 # ArgListType: (int, char**) # FuncId (0x1015) .short 0x12 # Record length .short 0x1601 # Record kind: LF_FUNC_ID .long 0x0 # ParentScope .long 0x1014 # FunctionType: int (int, char**) .asciz "main" # Name .byte 243 .byte 242 .byte 241 # Modifier (0x1016) .short 0xa # Record length .short 0x1001 # Record kind: LF_MODIFIER .long 0x74 # ModifiedType: int .short 0x2 # Modifiers ( Volatile (0x2) ) .byte 242 .byte 241 # StringId (0x1017) .short 0xe # Record length .short 0x1605 # Record kind: LF_STRING_ID .long 0x0 # Id .asciz "/tmp" # StringData .byte 243 .byte 242 .byte 241 # StringId (0x1018) .short 0xe # Record length .short 0x1605 # Record kind: LF_STRING_ID .long 0x0 # Id .asciz "a.cpp" # StringData .byte 242 .byte 241 # BuildInfo (0x1019) .short 0x1a # Record length .short 0x1603 # Record kind: LF_BUILDINFO .short 0x5 # NumArgs .long 0x1017 # Argument: /tmp .long 0x0 # Argument .long 0x1018 # Argument: a.cpp .long 0x0 # Argument .long 0x0 # Argument .byte 242 .byte 241 .addrsig .addrsig_sym "?gv_foo@?1??foo@Namespace1@@YAXH@Z@4HC" .addrsig_sym "?gv_bar@?1??bar@Class1@@SAXH@Z@4HC" .addrsig_sym "?gv_func@?1??func@Class2@Namespace2@@SAXH@Z@4HC"