| .equ CV_SIGNATURE_C13, 4 |
| |
| .equ T_CHAR, 0x0010 |
| .equ T_LONG, 0x0012 |
| .equ T_ULONG, 0x0022 |
| .equ T_INT4, 0x0074 |
| .equ T_UINT4, 0x0075 |
| .equ T_UQUAD, 0x0023 |
| |
| .equ LF_VTSHAPE, 0x000a |
| .equ LF_MODIFIER, 0x1001 |
| .equ LF_POINTER, 0x1002 |
| .equ LF_PROCEDURE, 0x1008 |
| .equ LF_MFUNCTION, 0x1009 |
| .equ LF_ARGLIST, 0x1201 |
| .equ LF_FIELDLIST, 0x1203 |
| .equ LF_BITFIELD, 0x1205 |
| .equ LF_METHODLIST, 0x1206 |
| .equ LF_BCLASS, 0x1400 |
| .equ LF_VBCLASS, 0x1401 |
| .equ LF_INDEX, 0x1404 |
| .equ LF_VFUNCTAB, 0x1409 |
| .equ LF_ENUMERATE, 0x1502 |
| .equ LF_ARRAY, 0x1503 |
| .equ LF_STRUCTURE, 0x1505 |
| .equ LF_UNION, 0x1506 |
| .equ LF_ENUM, 0x1507 |
| .equ LF_MEMBER, 0x150d |
| .equ LF_STMEMBER, 0x150e |
| .equ LF_METHOD, 0x150f |
| .equ LF_NESTTYPE, 0x1510 |
| .equ LF_ONEMETHOD, 0x1511 |
| .equ LF_VFTABLE, 0x151d |
| |
| .equ LF_USHORT, 0x8002 |
| .equ LF_LONG, 0x8003 |
| .equ LF_ULONG, 0x8004 |
| .equ LF_UQUADWORD, 0x800a |
| |
| .equ CV_PTR_NEAR32, 0xa |
| .equ CV_PTR_64, 0xc |
| |
| .section ".debug$T", "rn" |
| |
| .long CV_SIGNATURE_C13 |
| |
| /* Type 1000, const long */ |
| .mod1: |
| .short .mod2 - .mod1 - 2 |
| .short LF_MODIFIER |
| .long T_LONG |
| .short 1 /* const */ |
| .p2align 2 |
| |
| /* Type 1001, volatile unsigned long */ |
| .mod2: |
| .short .mod3 - .mod2 - 2 |
| .short LF_MODIFIER |
| .long T_ULONG |
| .short 2 /* volatile */ |
| .p2align 2 |
| |
| /* Type 1002, const volatile int */ |
| .mod3: |
| .short .ptr1 - .mod3 - 2 |
| .short LF_MODIFIER |
| .long T_INT4 |
| .short 3 /* const volatile */ |
| .p2align 2 |
| |
| /* Type 1003, const long * (64-bit pointer) */ |
| .ptr1: |
| .short .ptr2 - .ptr1 - 2 |
| .short LF_POINTER |
| .long 0x1000 |
| .long (8 << 13) | CV_PTR_64 |
| |
| /* Type 1004, volatile unsigned long * (32-bit pointer) */ |
| .ptr2: |
| .short .arglist1 - .ptr2 - 2 |
| .short LF_POINTER |
| .long 0x1001 |
| .long (4 << 13) | CV_PTR_NEAR32 |
| |
| /* Type 1005, arg list of types 1000, 1001, 1002 */ |
| .arglist1: |
| .short .proc1 - .arglist1 - 2 |
| .short LF_ARGLIST |
| .long 3 /* no. entries */ |
| .long 0x1000 |
| .long 0x1001 |
| .long 0x1002 |
| |
| /* Type 1006, procedure, return type 1001, arg list 1005 */ |
| .proc1: |
| .short .arr1 - .proc1 - 2 |
| .short LF_PROCEDURE |
| .long 0x1001 |
| .byte 0 /* calling convention */ |
| .byte 0 /* attributes */ |
| .short 3 /* no. parameters */ |
| .long 0x1005 |
| |
| /* Type 1007, array[3] of const long * */ |
| .arr1: |
| .short .bitfield1 - .arr1 - 2 |
| .short LF_ARRAY |
| .long 0x1003 /* element type */ |
| .long T_INT4 /* index type */ |
| .short 24 /* length in bytes */ |
| .byte 0 /* name */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1008, bitfield of uint32_t, position 0, length 1 */ |
| .bitfield1: |
| .short .bitfield2 - .bitfield1 - 2 |
| .short LF_BITFIELD |
| .long T_UINT4 |
| .byte 1 |
| .byte 0 |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1009, bitfield of uint32_t, position 1, length 31 */ |
| .bitfield2: |
| .short .fieldlist1 - .bitfield2 - 2 |
| .short LF_BITFIELD |
| .long T_UINT4 |
| .byte 31 |
| .byte 1 |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 100a, field list (1008 as num1, 1009 as num2) */ |
| .fieldlist1: |
| .short .struct1 - .fieldlist1 - 2 |
| .short LF_FIELDLIST |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1008 |
| .short 0 /* offset */ |
| .asciz "num1" |
| .byte 0xf1 /* padding */ |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1009 |
| .short 0 /* offset */ |
| .asciz "num2" |
| .byte 0xf1 /* padding */ |
| |
| /* Type 100b, anonymous struct, field list 100a */ |
| .struct1: |
| .short .struct2 - .struct1 - 2 |
| .short LF_STRUCTURE |
| .short 2 /* no. members */ |
| .short 0 /* property */ |
| .long 0x100a /* field list */ |
| .long 0 /* type derived from */ |
| .long 0 /* type of vshape table */ |
| .short 4 /* size */ |
| .asciz "<unnamed-tag>" |
| |
| /* Type 100c, forward declaration of struct foo */ |
| .struct2: |
| .short .ptr3 - .struct2 - 2 |
| .short LF_STRUCTURE |
| .short 0 /* no. members */ |
| .short 0x280 /* property (has unique name, forward declaration) */ |
| .long 0 /* field list */ |
| .long 0 /* type derived from */ |
| .long 0 /* type of vshape table */ |
| .short 0 /* size */ |
| .asciz "foo" /* name */ |
| .asciz "bar" /* unique name */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 100d, pointer to 100c */ |
| .ptr3: |
| .short .arglist2 - .ptr3 - 2 |
| .short LF_POINTER |
| .long 0x100c |
| .long (8 << 13) | CV_PTR_64 |
| |
| /* Type 100e, empty arg list */ |
| .arglist2: |
| .short .mfunc1 - .arglist2 - 2 |
| .short LF_ARGLIST |
| .long 0 /* no. entries */ |
| |
| /* Type 100f, member function of 100c, return type 1001 */ |
| .mfunc1: |
| .short .mfunc2 - .mfunc1 - 2 |
| .short LF_MFUNCTION |
| .long 0x1001 |
| .long 0x100c |
| .long 0x100d /* type of "this" pointer */ |
| .byte 0 /* calling convention */ |
| .byte 0 /* attributes */ |
| .short 0 /* no. parameters */ |
| .long 0x100e /* arg list */ |
| .long 0 /* "this" adjustment */ |
| |
| /* Type 1010, member function of 100c, return type 1001, arg list 1005 */ |
| .mfunc2: |
| .short .methodlist1 - .mfunc2 - 2 |
| .short LF_MFUNCTION |
| .long 0x1001 |
| .long 0x100c |
| .long 0x100d /* type of "this" pointer */ |
| .byte 0 /* calling convention */ |
| .byte 0 /* attributes */ |
| .short 3 /* no. parameters */ |
| .long 0x1005 /* arg list */ |
| .long 0 /* "this" adjustment */ |
| |
| /* Type 1011, method list for both member functions 100f and 1010 */ |
| .methodlist1: |
| .short .fieldlist2 - .methodlist1 - 2 |
| .short LF_METHODLIST |
| .short 0 /* attributes */ |
| .short 0 /* padding */ |
| .long 0x100f |
| .short 0 /* attributes */ |
| .short 0 /* padding */ |
| .long 0x1010 |
| |
| /* Type 1012, field list (uint32_t as num1) */ |
| .fieldlist2: |
| .short .struct3 - .fieldlist2 - 2 |
| .short LF_FIELDLIST |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long T_UINT4 |
| .short 0 /* offset */ |
| .asciz "num" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_ONEMETHOD |
| .short 0 /* method attribute */ |
| .long 0x100f /* method type */ |
| .asciz "method" |
| .byte 0xf1 |
| .short LF_METHOD |
| .short 2 /* no. overloads */ |
| .long 0x1011 /* method list */ |
| .asciz "method2" |
| |
| /* Type 1013, struct foo, field list 1012 */ |
| .struct3: |
| .short .fieldlist3 - .struct3 - 2 |
| .short LF_STRUCTURE |
| .short 2 /* no. members */ |
| .short 0x200 /* property (has unique name) */ |
| .long 0x1012 /* field list */ |
| .long 0 /* type derived from */ |
| .long 0 /* type of vshape table */ |
| .short 4 /* size */ |
| .asciz "foo" /* name */ |
| .asciz "bar" /* unique name */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1014, field list (uint32_t as num1, char as num2) */ |
| .fieldlist3: |
| .short .union1 - .fieldlist3 - 2 |
| .short LF_FIELDLIST |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long T_UINT4 |
| .short 0 /* offset */ |
| .asciz "num1" |
| .byte 0xf1 /* padding */ |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long T_CHAR |
| .short 0 /* offset */ |
| .asciz "num2" |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1015, anonymous union (field list 1014) */ |
| .union1: |
| .short .union2 - .union1 - 2 |
| .short LF_UNION |
| .short 2 /* no. members */ |
| .short 0 /* property */ |
| .long 0x1014 |
| .short 4 /* size */ |
| .asciz "<unnamed-tag>" |
| |
| /* Type 1016, forward declaration of union baz */ |
| .union2: |
| .short .union3 - .union2 - 2 |
| .short LF_UNION |
| .short 0 /* no. members */ |
| .short 0x280 /* property (has unique name, forward declaration) */ |
| .long 0 /* field list */ |
| .short 0 /* size */ |
| .asciz "baz" |
| .asciz "qux" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1017, union baz (field list 1014) */ |
| .union3: |
| .short .fieldlist4 - .union3 - 2 |
| .short LF_UNION |
| .short 2 /* no. members */ |
| .short 0x200 /* property (has unique name, forward declaration) */ |
| .long 0x1014 /* field list */ |
| .short 4 /* size */ |
| .asciz "baz" |
| .asciz "qux" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1018, field list for enum (red = 0, green = 1, blue = -1, yellow = 0x8000, purple = 0x100000000) */ |
| .fieldlist4: |
| .short .enum1 - .fieldlist4 - 2 |
| .short LF_FIELDLIST |
| .short LF_ENUMERATE |
| .short 3 /* public */ |
| .short 0 /* value */ |
| .asciz "red" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_ENUMERATE |
| .short 3 /* public */ |
| .short 1 /* value */ |
| .asciz "green" |
| .short LF_ENUMERATE |
| .short 3 /* public */ |
| .short LF_LONG |
| .long 0xffffffff /* value */ |
| .asciz "blue" |
| .byte 0xf1 /* padding */ |
| .short LF_ENUMERATE |
| .short 3 /* public */ |
| .short LF_USHORT |
| .short 0x8000 /* value */ |
| .asciz "yellow" |
| .byte 0xf1 /* padding */ |
| .short LF_ENUMERATE |
| .short 3 /* public */ |
| .short LF_UQUADWORD |
| .quad 0x100000000 /* value */ |
| .asciz "purple" |
| .byte 0xf3 /* padding */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1019, forward reference to enum */ |
| .enum1: |
| .short .enum2 - .enum1 - 2 |
| .short LF_ENUM |
| .short 0 /* no. elements */ |
| .short 0x280 /* property (has unique name, forward ref) */ |
| .long T_UQUAD /* underlying type */ |
| .long 0 /* field list */ |
| .asciz "colour" |
| .asciz "colour2" |
| .byte 0xf1 /* padding */ |
| |
| /* Type 101a, enum (field list 1018) */ |
| .enum2: |
| .short .fieldlist5 - .enum2 - 2 |
| .short LF_ENUM |
| .short 5 /* no. elements */ |
| .short 0x200 /* property (has unique name) */ |
| .long T_UQUAD /* underlying type */ |
| .long 0x1018 /* field list */ |
| .asciz "colour" |
| .asciz "colour2" |
| .byte 0xf1 /* padding */ |
| |
| /* Type 101b, field list referencing other field list 1018 */ |
| .fieldlist5: |
| .short .vtshape1 - .fieldlist5 - 2 |
| .short LF_FIELDLIST |
| .short LF_INDEX |
| .short 0 /* padding */ |
| .long 0x1018 |
| |
| /* Type 101c, virtual function table shape */ |
| .vtshape1: |
| .short .ptr4 - .vtshape1 - 2 |
| .short LF_VTSHAPE |
| .short 1 /* no. descriptors */ |
| .byte 0 /* descriptor (CV_VTS_near) */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 101d, pointer to 101c */ |
| .ptr4: |
| .short .fieldlist6 - .ptr4 - 2 |
| .short LF_POINTER |
| .long 0x101c |
| .long (8 << 13) | CV_PTR_64 |
| |
| /* Type 101e, fieldlist for enum */ |
| .fieldlist6: |
| .short .enum3 - .fieldlist6 - 2 |
| .short LF_FIELDLIST |
| .short LF_ENUMERATE |
| .short 3 /* public */ |
| .short 0 /* value */ |
| .asciz "a" |
| |
| /* Type 101f, nested enum */ |
| .enum3: |
| .short .fieldlist7 - .enum3 - 2 |
| .short LF_ENUM |
| .short 1 /* no. elements */ |
| .short 0x8 /* property (is nested) */ |
| .long T_UINT4 /* underlying type */ |
| .long 0x101e /* field list */ |
| .asciz "quux::nested_enum" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1020, field list for struct quux */ |
| .fieldlist7: |
| .short .struct4 - .fieldlist7 - 2 |
| .short LF_FIELDLIST |
| .short LF_BCLASS |
| .short 0 /* attributes */ |
| .long 0x1013 /* base class */ |
| .short 4 /* offset within class */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_VFUNCTAB |
| .short 0 /* padding */ |
| .long 0x101d /* pointer to vtshape */ |
| .short LF_VBCLASS |
| .short 0 /* attribute */ |
| .long 0x1013 /* type index of direct virtual base class */ |
| .long 0x101d /* type index of virtual base pointer */ |
| .short 0 /* virtual base pointer offset */ |
| .short 0 /* virtual base offset from vbtable */ |
| .short LF_STMEMBER |
| .short 0 /* attribute */ |
| .long 0x1001 /* volatile unsigned long */ |
| .asciz "static_member" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_NESTTYPE |
| .short 0 /* padding */ |
| .long 0x101f /* enum type */ |
| .asciz "nested_enum" |
| |
| /* Type 1021, struct quux, field list 1020 */ |
| .struct4: |
| .short .arr2 - .struct4 - 2 |
| .short LF_STRUCTURE |
| .short 1 /* no. members */ |
| .short 0 /* property */ |
| .long 0x1020 /* field list */ |
| .long 0 /* type derived from */ |
| .long 0 /* type of vshape table */ |
| .short 4 /* size */ |
| .asciz "quux" /* name */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1022, array[60000] of char */ |
| .arr2: |
| .short .fieldlist8 - .arr2 - 2 |
| .short LF_ARRAY |
| .long T_CHAR /* element type */ |
| .long T_INT4 /* index type */ |
| .short LF_USHORT |
| .short 60000 /* size in bytes */ |
| .byte 0 /* name */ |
| .byte 0xf3 /* padding */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1023, field list for struct longstruct */ |
| .fieldlist8: |
| .short .struct5 - .fieldlist8 - 2 |
| .short LF_FIELDLIST |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short 0 /* offset */ |
| .asciz "a" |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short LF_USHORT |
| .short 60000 /* offset */ |
| .asciz "b" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short LF_ULONG |
| .long 120000 /* offset */ |
| .asciz "c" |
| |
| /* Type 1024, struct longstruct */ |
| .struct5: |
| .short .fieldlist9 - .struct5 - 2 |
| .short LF_STRUCTURE |
| .short 3 /* no. members */ |
| .short 0 /* property */ |
| .long 0x1023 /* field list */ |
| .long 0 /* type derived from */ |
| .long 0 /* type of vshape table */ |
| .short LF_ULONG |
| .long 180000 /* size */ |
| .asciz "longstruct" /* name */ |
| .byte 0xf3 /* padding */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1025, field list for union longunion */ |
| .fieldlist9: |
| .short .union4 - .fieldlist9 - 2 |
| .short LF_FIELDLIST |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short 0 /* offset */ |
| .asciz "a" |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short 0 /* offset */ |
| .asciz "b" |
| |
| /* Type 1026, union longunion (field list 1025) */ |
| .union4: |
| .short .fieldlist10 - .union4 - 2 |
| .short LF_UNION |
| .short 2 /* no. members */ |
| .short 0 /* property */ |
| .long 0x1025 /* field list */ |
| .short LF_USHORT |
| .short 60000 /* size */ |
| .asciz "longunion" |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 1027, field list with base class longstruct */ |
| .fieldlist10: |
| .short .fieldlist11 - .fieldlist10 - 2 |
| .short LF_FIELDLIST |
| .short LF_BCLASS |
| .short 0 /* attributes */ |
| .long 0x1024 /* base class */ |
| .short LF_ULONG |
| .long 120000 /* offset within class */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short 0 /* offset */ |
| .asciz "d" |
| |
| /* Type 1028, field list with virtual base class longstruct */ |
| .fieldlist11: |
| .short .struct6 - .fieldlist11 - 2 |
| .short LF_FIELDLIST |
| .short LF_VBCLASS |
| .short 0 /* attributes */ |
| .long 0x1024 /* type index of direct virtual base class */ |
| .long 0 /* type index of virtual base pointer */ |
| .short LF_USHORT |
| .short 60000 /* virtual base pointer offset */ |
| .short LF_ULONG |
| .long 120000 /* virtual base offset from vbtable */ |
| .byte 0xf2 /* padding */ |
| .byte 0xf1 /* padding */ |
| .short LF_MEMBER |
| .short 3 /* public */ |
| .long 0x1022 |
| .short 0 /* offset */ |
| .asciz "d" |
| |
| /* Type 1029, forward declaration of struct IUnknown */ |
| .struct6: |
| .short .vftable1 - .struct6 - 2 |
| .short LF_STRUCTURE |
| .short 0 /* no. members */ |
| .short 0x80 /* property (forward declaration) */ |
| .long 0 /* field list */ |
| .long 0 /* type derived from */ |
| .long 0 /* type of vshape table */ |
| .short 0 /* size */ |
| .asciz "IUnknown" /* name */ |
| .byte 0xf1 /* padding */ |
| |
| /* Type 102a, virtual function table */ |
| .vftable1: |
| .short .types_end - .vftable1 - 2 |
| .short LF_VFTABLE |
| .long 0x1029 /* type */ |
| .long 0 /* base vftable */ |
| .long 0 /* offset */ |
| .long .vftable1_names_end - .vftable1_names /* length of names array */ |
| .vftable1_names: |
| .asciz "IUnknown" |
| .asciz "QueryInterface" |
| .asciz "AddRef" |
| .asciz "Release" |
| .vftable1_names_end: |
| .byte 0xf1 /* padding */ |
| |
| .types_end: |