This repository has been archived by the owner on Apr 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 272
/
cvinfo.h
5005 lines (3842 loc) · 181 KB
/
cvinfo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
//
// This code is licensed under the MIT License (MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
///////////////////////////////////////////////////////////////////////////////
/*** cvinfo.h - Generic CodeView information definitions
*
* Structures, constants, etc. for accessing and interpreting
* CodeView information.
*
*/
/*** The master copy of this file resides in the langapi project.
* All Microsoft projects are required to use the master copy without
* modification. Modification of the master version or a copy
* without consultation with all parties concerned is extremely
* risky.
*
*/
#ifndef _VC_VER_INC
#include "vcver.h"
#endif
#pragma once
#include "cvconst.h"
#ifndef _CV_INFO_INCLUDED
#define _CV_INFO_INCLUDED
#ifdef __cplusplus
#pragma warning ( disable: 4200 )
#endif
#ifndef __INLINE
#ifdef __cplusplus
#define __INLINE inline
#else
#define __INLINE __inline
#endif
#endif
#pragma pack ( push, 1 )
typedef unsigned long CV_uoff32_t;
typedef long CV_off32_t;
typedef unsigned short CV_uoff16_t;
typedef short CV_off16_t;
typedef unsigned short CV_typ16_t;
typedef unsigned long CV_typ_t;
typedef unsigned long CV_pubsymflag_t; // must be same as CV_typ_t.
typedef unsigned short _2BYTEPAD;
typedef unsigned long CV_tkn_t;
#if !defined (CV_ZEROLEN)
#define CV_ZEROLEN
#endif
#if !defined (FLOAT10)
#if defined(_M_I86) // 16 bit x86 supporting long double
typedef long double FLOAT10;
#else // 32 bit w/o long double support
typedef struct FLOAT10
{
char b[10];
} FLOAT10;
#endif
#endif
#define CV_SIGNATURE_C6 0L // Actual signature is >64K
#define CV_SIGNATURE_C7 1L // First explicit signature
#define CV_SIGNATURE_C11 2L // C11 (vc5.x) 32-bit types
#define CV_SIGNATURE_C13 4L // C13 (vc7.x) zero terminated names
#define CV_SIGNATURE_RESERVED 5L // All signatures from 5 to 64K are reserved
#define CV_MAXOFFSET 0xffffffff
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID { // size is 16
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
#endif // !GUID_DEFINED
typedef GUID SIG70; // new to 7.0 are 16-byte guid-like signatures
typedef SIG70 * PSIG70;
typedef const SIG70 * PCSIG70;
/** CodeView Symbol and Type OMF type information is broken up into two
* ranges. Type indices less than 0x1000 describe type information
* that is frequently used. Type indices above 0x1000 are used to
* describe more complex features such as functions, arrays and
* structures.
*/
/** Primitive types have predefined meaning that is encoded in the
* values of the various bit fields in the value.
*
* A CodeView primitive type is defined as:
*
* 1 1
* 1 089 7654 3 210
* r mode type r sub
*
* Where
* mode is the pointer mode
* type is a type indicator
* sub is a subtype enumeration
* r is a reserved field
*
* See Microsoft Symbol and Type OMF (Version 4.0) for more
* information.
*/
#define CV_MMASK 0x700 // mode mask
#define CV_TMASK 0x0f0 // type mask
// can we use the reserved bit ??
#define CV_SMASK 0x00f // subtype mask
#define CV_MSHIFT 8 // primitive mode right shift count
#define CV_TSHIFT 4 // primitive type right shift count
#define CV_SSHIFT 0 // primitive subtype right shift count
// macros to extract primitive mode, type and size
#define CV_MODE(typ) (((typ) & CV_MMASK) >> CV_MSHIFT)
#define CV_TYPE(typ) (((typ) & CV_TMASK) >> CV_TSHIFT)
#define CV_SUBT(typ) (((typ) & CV_SMASK) >> CV_SSHIFT)
// macros to insert new primitive mode, type and size
#define CV_NEWMODE(typ, nm) ((CV_typ_t)(((typ) & ~CV_MMASK) | ((nm) << CV_MSHIFT)))
#define CV_NEWTYPE(typ, nt) (((typ) & ~CV_TMASK) | ((nt) << CV_TSHIFT))
#define CV_NEWSUBT(typ, ns) (((typ) & ~CV_SMASK) | ((ns) << CV_SSHIFT))
// pointer mode enumeration values
typedef enum CV_prmode_e {
CV_TM_DIRECT = 0, // mode is not a pointer
CV_TM_NPTR = 1, // mode is a near pointer
CV_TM_FPTR = 2, // mode is a far pointer
CV_TM_HPTR = 3, // mode is a huge pointer
CV_TM_NPTR32 = 4, // mode is a 32 bit near pointer
CV_TM_FPTR32 = 5, // mode is a 32 bit far pointer
CV_TM_NPTR64 = 6, // mode is a 64 bit near pointer
CV_TM_NPTR128 = 7, // mode is a 128 bit near pointer
} CV_prmode_e;
// type enumeration values
typedef enum CV_type_e {
CV_SPECIAL = 0x00, // special type size values
CV_SIGNED = 0x01, // signed integral size values
CV_UNSIGNED = 0x02, // unsigned integral size values
CV_BOOLEAN = 0x03, // Boolean size values
CV_REAL = 0x04, // real number size values
CV_COMPLEX = 0x05, // complex number size values
CV_SPECIAL2 = 0x06, // second set of special types
CV_INT = 0x07, // integral (int) values
CV_CVRESERVED = 0x0f,
} CV_type_e;
// subtype enumeration values for CV_SPECIAL
typedef enum CV_special_e {
CV_SP_NOTYPE = 0x00,
CV_SP_ABS = 0x01,
CV_SP_SEGMENT = 0x02,
CV_SP_VOID = 0x03,
CV_SP_CURRENCY = 0x04,
CV_SP_NBASICSTR = 0x05,
CV_SP_FBASICSTR = 0x06,
CV_SP_NOTTRANS = 0x07,
CV_SP_HRESULT = 0x08,
} CV_special_e;
// subtype enumeration values for CV_SPECIAL2
typedef enum CV_special2_e {
CV_S2_BIT = 0x00,
CV_S2_PASCHAR = 0x01, // Pascal CHAR
CV_S2_BOOL32FF = 0x02, // 32-bit BOOL where true is 0xffffffff
} CV_special2_e;
// subtype enumeration values for CV_SIGNED, CV_UNSIGNED and CV_BOOLEAN
typedef enum CV_integral_e {
CV_IN_1BYTE = 0x00,
CV_IN_2BYTE = 0x01,
CV_IN_4BYTE = 0x02,
CV_IN_8BYTE = 0x03,
CV_IN_16BYTE = 0x04
} CV_integral_e;
// subtype enumeration values for CV_REAL and CV_COMPLEX
typedef enum CV_real_e {
CV_RC_REAL32 = 0x00,
CV_RC_REAL64 = 0x01,
CV_RC_REAL80 = 0x02,
CV_RC_REAL128 = 0x03,
CV_RC_REAL48 = 0x04,
CV_RC_REAL32PP = 0x05, // 32-bit partial precision real
CV_RC_REAL16 = 0x06,
} CV_real_e;
// subtype enumeration values for CV_INT (really int)
typedef enum CV_int_e {
CV_RI_CHAR = 0x00,
CV_RI_INT1 = 0x00,
CV_RI_WCHAR = 0x01,
CV_RI_UINT1 = 0x01,
CV_RI_INT2 = 0x02,
CV_RI_UINT2 = 0x03,
CV_RI_INT4 = 0x04,
CV_RI_UINT4 = 0x05,
CV_RI_INT8 = 0x06,
CV_RI_UINT8 = 0x07,
CV_RI_INT16 = 0x08,
CV_RI_UINT16 = 0x09,
CV_RI_CHAR16 = 0x0a, // char16_t
CV_RI_CHAR32 = 0x0b, // char32_t
} CV_int_e;
// macros to check the type of a primitive
#define CV_TYP_IS_DIRECT(typ) (CV_MODE(typ) == CV_TM_DIRECT)
#define CV_TYP_IS_PTR(typ) (CV_MODE(typ) != CV_TM_DIRECT)
#define CV_TYP_IS_NPTR(typ) (CV_MODE(typ) == CV_TM_NPTR)
#define CV_TYP_IS_FPTR(typ) (CV_MODE(typ) == CV_TM_FPTR)
#define CV_TYP_IS_HPTR(typ) (CV_MODE(typ) == CV_TM_HPTR)
#define CV_TYP_IS_NPTR32(typ) (CV_MODE(typ) == CV_TM_NPTR32)
#define CV_TYP_IS_FPTR32(typ) (CV_MODE(typ) == CV_TM_FPTR32)
#define CV_TYP_IS_SIGNED(typ) (((CV_TYPE(typ) == CV_SIGNED) && CV_TYP_IS_DIRECT(typ)) || \
(typ == T_INT1) || \
(typ == T_INT2) || \
(typ == T_INT4) || \
(typ == T_INT8) || \
(typ == T_INT16) || \
(typ == T_RCHAR))
#define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED) && CV_TYP_IS_DIRECT(typ)) || \
(typ == T_UINT1) || \
(typ == T_UINT2) || \
(typ == T_UINT4) || \
(typ == T_UINT8) || \
(typ == T_UINT16))
#define CV_TYP_IS_REAL(typ) ((CV_TYPE(typ) == CV_REAL) && CV_TYP_IS_DIRECT(typ))
#define CV_FIRST_NONPRIM 0x1000
#define CV_IS_PRIMITIVE(typ) ((typ) < CV_FIRST_NONPRIM)
#define CV_TYP_IS_COMPLEX(typ) ((CV_TYPE(typ) == CV_COMPLEX) && CV_TYP_IS_DIRECT(typ))
#define CV_IS_INTERNAL_PTR(typ) (CV_IS_PRIMITIVE(typ) && \
CV_TYPE(typ) == CV_CVRESERVED && \
CV_TYP_IS_PTR(typ))
// selected values for type_index - for a more complete definition, see
// Microsoft Symbol and Type OMF document
// Special Types
typedef enum TYPE_ENUM_e {
// Special Types
T_NOTYPE = 0x0000, // uncharacterized type (no type)
T_ABS = 0x0001, // absolute symbol
T_SEGMENT = 0x0002, // segment type
T_VOID = 0x0003, // void
T_HRESULT = 0x0008, // OLE/COM HRESULT
T_32PHRESULT = 0x0408, // OLE/COM HRESULT __ptr32 *
T_64PHRESULT = 0x0608, // OLE/COM HRESULT __ptr64 *
T_PVOID = 0x0103, // near pointer to void
T_PFVOID = 0x0203, // far pointer to void
T_PHVOID = 0x0303, // huge pointer to void
T_32PVOID = 0x0403, // 32 bit pointer to void
T_32PFVOID = 0x0503, // 16:32 pointer to void
T_64PVOID = 0x0603, // 64 bit pointer to void
T_CURRENCY = 0x0004, // BASIC 8 byte currency value
T_NBASICSTR = 0x0005, // Near BASIC string
T_FBASICSTR = 0x0006, // Far BASIC string
T_NOTTRANS = 0x0007, // type not translated by cvpack
T_BIT = 0x0060, // bit
T_PASCHAR = 0x0061, // Pascal CHAR
T_BOOL32FF = 0x0062, // 32-bit BOOL where true is 0xffffffff
// Character types
T_CHAR = 0x0010, // 8 bit signed
T_PCHAR = 0x0110, // 16 bit pointer to 8 bit signed
T_PFCHAR = 0x0210, // 16:16 far pointer to 8 bit signed
T_PHCHAR = 0x0310, // 16:16 huge pointer to 8 bit signed
T_32PCHAR = 0x0410, // 32 bit pointer to 8 bit signed
T_32PFCHAR = 0x0510, // 16:32 pointer to 8 bit signed
T_64PCHAR = 0x0610, // 64 bit pointer to 8 bit signed
T_UCHAR = 0x0020, // 8 bit unsigned
T_PUCHAR = 0x0120, // 16 bit pointer to 8 bit unsigned
T_PFUCHAR = 0x0220, // 16:16 far pointer to 8 bit unsigned
T_PHUCHAR = 0x0320, // 16:16 huge pointer to 8 bit unsigned
T_32PUCHAR = 0x0420, // 32 bit pointer to 8 bit unsigned
T_32PFUCHAR = 0x0520, // 16:32 pointer to 8 bit unsigned
T_64PUCHAR = 0x0620, // 64 bit pointer to 8 bit unsigned
// really a character types
T_RCHAR = 0x0070, // really a char
T_PRCHAR = 0x0170, // 16 bit pointer to a real char
T_PFRCHAR = 0x0270, // 16:16 far pointer to a real char
T_PHRCHAR = 0x0370, // 16:16 huge pointer to a real char
T_32PRCHAR = 0x0470, // 32 bit pointer to a real char
T_32PFRCHAR = 0x0570, // 16:32 pointer to a real char
T_64PRCHAR = 0x0670, // 64 bit pointer to a real char
// really a wide character types
T_WCHAR = 0x0071, // wide char
T_PWCHAR = 0x0171, // 16 bit pointer to a wide char
T_PFWCHAR = 0x0271, // 16:16 far pointer to a wide char
T_PHWCHAR = 0x0371, // 16:16 huge pointer to a wide char
T_32PWCHAR = 0x0471, // 32 bit pointer to a wide char
T_32PFWCHAR = 0x0571, // 16:32 pointer to a wide char
T_64PWCHAR = 0x0671, // 64 bit pointer to a wide char
// really a 16-bit unicode char
T_CHAR16 = 0x007a, // 16-bit unicode char
T_PCHAR16 = 0x017a, // 16 bit pointer to a 16-bit unicode char
T_PFCHAR16 = 0x027a, // 16:16 far pointer to a 16-bit unicode char
T_PHCHAR16 = 0x037a, // 16:16 huge pointer to a 16-bit unicode char
T_32PCHAR16 = 0x047a, // 32 bit pointer to a 16-bit unicode char
T_32PFCHAR16 = 0x057a, // 16:32 pointer to a 16-bit unicode char
T_64PCHAR16 = 0x067a, // 64 bit pointer to a 16-bit unicode char
// really a 32-bit unicode char
T_CHAR32 = 0x007b, // 32-bit unicode char
T_PCHAR32 = 0x017b, // 16 bit pointer to a 32-bit unicode char
T_PFCHAR32 = 0x027b, // 16:16 far pointer to a 32-bit unicode char
T_PHCHAR32 = 0x037b, // 16:16 huge pointer to a 32-bit unicode char
T_32PCHAR32 = 0x047b, // 32 bit pointer to a 32-bit unicode char
T_32PFCHAR32 = 0x057b, // 16:32 pointer to a 32-bit unicode char
T_64PCHAR32 = 0x067b, // 64 bit pointer to a 32-bit unicode char
// 8 bit int types
T_INT1 = 0x0068, // 8 bit signed int
T_PINT1 = 0x0168, // 16 bit pointer to 8 bit signed int
T_PFINT1 = 0x0268, // 16:16 far pointer to 8 bit signed int
T_PHINT1 = 0x0368, // 16:16 huge pointer to 8 bit signed int
T_32PINT1 = 0x0468, // 32 bit pointer to 8 bit signed int
T_32PFINT1 = 0x0568, // 16:32 pointer to 8 bit signed int
T_64PINT1 = 0x0668, // 64 bit pointer to 8 bit signed int
T_UINT1 = 0x0069, // 8 bit unsigned int
T_PUINT1 = 0x0169, // 16 bit pointer to 8 bit unsigned int
T_PFUINT1 = 0x0269, // 16:16 far pointer to 8 bit unsigned int
T_PHUINT1 = 0x0369, // 16:16 huge pointer to 8 bit unsigned int
T_32PUINT1 = 0x0469, // 32 bit pointer to 8 bit unsigned int
T_32PFUINT1 = 0x0569, // 16:32 pointer to 8 bit unsigned int
T_64PUINT1 = 0x0669, // 64 bit pointer to 8 bit unsigned int
// 16 bit short types
T_SHORT = 0x0011, // 16 bit signed
T_PSHORT = 0x0111, // 16 bit pointer to 16 bit signed
T_PFSHORT = 0x0211, // 16:16 far pointer to 16 bit signed
T_PHSHORT = 0x0311, // 16:16 huge pointer to 16 bit signed
T_32PSHORT = 0x0411, // 32 bit pointer to 16 bit signed
T_32PFSHORT = 0x0511, // 16:32 pointer to 16 bit signed
T_64PSHORT = 0x0611, // 64 bit pointer to 16 bit signed
T_USHORT = 0x0021, // 16 bit unsigned
T_PUSHORT = 0x0121, // 16 bit pointer to 16 bit unsigned
T_PFUSHORT = 0x0221, // 16:16 far pointer to 16 bit unsigned
T_PHUSHORT = 0x0321, // 16:16 huge pointer to 16 bit unsigned
T_32PUSHORT = 0x0421, // 32 bit pointer to 16 bit unsigned
T_32PFUSHORT = 0x0521, // 16:32 pointer to 16 bit unsigned
T_64PUSHORT = 0x0621, // 64 bit pointer to 16 bit unsigned
// 16 bit int types
T_INT2 = 0x0072, // 16 bit signed int
T_PINT2 = 0x0172, // 16 bit pointer to 16 bit signed int
T_PFINT2 = 0x0272, // 16:16 far pointer to 16 bit signed int
T_PHINT2 = 0x0372, // 16:16 huge pointer to 16 bit signed int
T_32PINT2 = 0x0472, // 32 bit pointer to 16 bit signed int
T_32PFINT2 = 0x0572, // 16:32 pointer to 16 bit signed int
T_64PINT2 = 0x0672, // 64 bit pointer to 16 bit signed int
T_UINT2 = 0x0073, // 16 bit unsigned int
T_PUINT2 = 0x0173, // 16 bit pointer to 16 bit unsigned int
T_PFUINT2 = 0x0273, // 16:16 far pointer to 16 bit unsigned int
T_PHUINT2 = 0x0373, // 16:16 huge pointer to 16 bit unsigned int
T_32PUINT2 = 0x0473, // 32 bit pointer to 16 bit unsigned int
T_32PFUINT2 = 0x0573, // 16:32 pointer to 16 bit unsigned int
T_64PUINT2 = 0x0673, // 64 bit pointer to 16 bit unsigned int
// 32 bit long types
T_LONG = 0x0012, // 32 bit signed
T_ULONG = 0x0022, // 32 bit unsigned
T_PLONG = 0x0112, // 16 bit pointer to 32 bit signed
T_PULONG = 0x0122, // 16 bit pointer to 32 bit unsigned
T_PFLONG = 0x0212, // 16:16 far pointer to 32 bit signed
T_PFULONG = 0x0222, // 16:16 far pointer to 32 bit unsigned
T_PHLONG = 0x0312, // 16:16 huge pointer to 32 bit signed
T_PHULONG = 0x0322, // 16:16 huge pointer to 32 bit unsigned
T_32PLONG = 0x0412, // 32 bit pointer to 32 bit signed
T_32PULONG = 0x0422, // 32 bit pointer to 32 bit unsigned
T_32PFLONG = 0x0512, // 16:32 pointer to 32 bit signed
T_32PFULONG = 0x0522, // 16:32 pointer to 32 bit unsigned
T_64PLONG = 0x0612, // 64 bit pointer to 32 bit signed
T_64PULONG = 0x0622, // 64 bit pointer to 32 bit unsigned
// 32 bit int types
T_INT4 = 0x0074, // 32 bit signed int
T_PINT4 = 0x0174, // 16 bit pointer to 32 bit signed int
T_PFINT4 = 0x0274, // 16:16 far pointer to 32 bit signed int
T_PHINT4 = 0x0374, // 16:16 huge pointer to 32 bit signed int
T_32PINT4 = 0x0474, // 32 bit pointer to 32 bit signed int
T_32PFINT4 = 0x0574, // 16:32 pointer to 32 bit signed int
T_64PINT4 = 0x0674, // 64 bit pointer to 32 bit signed int
T_UINT4 = 0x0075, // 32 bit unsigned int
T_PUINT4 = 0x0175, // 16 bit pointer to 32 bit unsigned int
T_PFUINT4 = 0x0275, // 16:16 far pointer to 32 bit unsigned int
T_PHUINT4 = 0x0375, // 16:16 huge pointer to 32 bit unsigned int
T_32PUINT4 = 0x0475, // 32 bit pointer to 32 bit unsigned int
T_32PFUINT4 = 0x0575, // 16:32 pointer to 32 bit unsigned int
T_64PUINT4 = 0x0675, // 64 bit pointer to 32 bit unsigned int
// 64 bit quad types
T_QUAD = 0x0013, // 64 bit signed
T_PQUAD = 0x0113, // 16 bit pointer to 64 bit signed
T_PFQUAD = 0x0213, // 16:16 far pointer to 64 bit signed
T_PHQUAD = 0x0313, // 16:16 huge pointer to 64 bit signed
T_32PQUAD = 0x0413, // 32 bit pointer to 64 bit signed
T_32PFQUAD = 0x0513, // 16:32 pointer to 64 bit signed
T_64PQUAD = 0x0613, // 64 bit pointer to 64 bit signed
T_UQUAD = 0x0023, // 64 bit unsigned
T_PUQUAD = 0x0123, // 16 bit pointer to 64 bit unsigned
T_PFUQUAD = 0x0223, // 16:16 far pointer to 64 bit unsigned
T_PHUQUAD = 0x0323, // 16:16 huge pointer to 64 bit unsigned
T_32PUQUAD = 0x0423, // 32 bit pointer to 64 bit unsigned
T_32PFUQUAD = 0x0523, // 16:32 pointer to 64 bit unsigned
T_64PUQUAD = 0x0623, // 64 bit pointer to 64 bit unsigned
// 64 bit int types
T_INT8 = 0x0076, // 64 bit signed int
T_PINT8 = 0x0176, // 16 bit pointer to 64 bit signed int
T_PFINT8 = 0x0276, // 16:16 far pointer to 64 bit signed int
T_PHINT8 = 0x0376, // 16:16 huge pointer to 64 bit signed int
T_32PINT8 = 0x0476, // 32 bit pointer to 64 bit signed int
T_32PFINT8 = 0x0576, // 16:32 pointer to 64 bit signed int
T_64PINT8 = 0x0676, // 64 bit pointer to 64 bit signed int
T_UINT8 = 0x0077, // 64 bit unsigned int
T_PUINT8 = 0x0177, // 16 bit pointer to 64 bit unsigned int
T_PFUINT8 = 0x0277, // 16:16 far pointer to 64 bit unsigned int
T_PHUINT8 = 0x0377, // 16:16 huge pointer to 64 bit unsigned int
T_32PUINT8 = 0x0477, // 32 bit pointer to 64 bit unsigned int
T_32PFUINT8 = 0x0577, // 16:32 pointer to 64 bit unsigned int
T_64PUINT8 = 0x0677, // 64 bit pointer to 64 bit unsigned int
// 128 bit octet types
T_OCT = 0x0014, // 128 bit signed
T_POCT = 0x0114, // 16 bit pointer to 128 bit signed
T_PFOCT = 0x0214, // 16:16 far pointer to 128 bit signed
T_PHOCT = 0x0314, // 16:16 huge pointer to 128 bit signed
T_32POCT = 0x0414, // 32 bit pointer to 128 bit signed
T_32PFOCT = 0x0514, // 16:32 pointer to 128 bit signed
T_64POCT = 0x0614, // 64 bit pointer to 128 bit signed
T_UOCT = 0x0024, // 128 bit unsigned
T_PUOCT = 0x0124, // 16 bit pointer to 128 bit unsigned
T_PFUOCT = 0x0224, // 16:16 far pointer to 128 bit unsigned
T_PHUOCT = 0x0324, // 16:16 huge pointer to 128 bit unsigned
T_32PUOCT = 0x0424, // 32 bit pointer to 128 bit unsigned
T_32PFUOCT = 0x0524, // 16:32 pointer to 128 bit unsigned
T_64PUOCT = 0x0624, // 64 bit pointer to 128 bit unsigned
// 128 bit int types
T_INT16 = 0x0078, // 128 bit signed int
T_PINT16 = 0x0178, // 16 bit pointer to 128 bit signed int
T_PFINT16 = 0x0278, // 16:16 far pointer to 128 bit signed int
T_PHINT16 = 0x0378, // 16:16 huge pointer to 128 bit signed int
T_32PINT16 = 0x0478, // 32 bit pointer to 128 bit signed int
T_32PFINT16 = 0x0578, // 16:32 pointer to 128 bit signed int
T_64PINT16 = 0x0678, // 64 bit pointer to 128 bit signed int
T_UINT16 = 0x0079, // 128 bit unsigned int
T_PUINT16 = 0x0179, // 16 bit pointer to 128 bit unsigned int
T_PFUINT16 = 0x0279, // 16:16 far pointer to 128 bit unsigned int
T_PHUINT16 = 0x0379, // 16:16 huge pointer to 128 bit unsigned int
T_32PUINT16 = 0x0479, // 32 bit pointer to 128 bit unsigned int
T_32PFUINT16 = 0x0579, // 16:32 pointer to 128 bit unsigned int
T_64PUINT16 = 0x0679, // 64 bit pointer to 128 bit unsigned int
// 16 bit real types
T_REAL16 = 0x0046, // 16 bit real
T_PREAL16 = 0x0146, // 16 bit pointer to 16 bit real
T_PFREAL16 = 0x0246, // 16:16 far pointer to 16 bit real
T_PHREAL16 = 0x0346, // 16:16 huge pointer to 16 bit real
T_32PREAL16 = 0x0446, // 32 bit pointer to 16 bit real
T_32PFREAL16 = 0x0546, // 16:32 pointer to 16 bit real
T_64PREAL16 = 0x0646, // 64 bit pointer to 16 bit real
// 32 bit real types
T_REAL32 = 0x0040, // 32 bit real
T_PREAL32 = 0x0140, // 16 bit pointer to 32 bit real
T_PFREAL32 = 0x0240, // 16:16 far pointer to 32 bit real
T_PHREAL32 = 0x0340, // 16:16 huge pointer to 32 bit real
T_32PREAL32 = 0x0440, // 32 bit pointer to 32 bit real
T_32PFREAL32 = 0x0540, // 16:32 pointer to 32 bit real
T_64PREAL32 = 0x0640, // 64 bit pointer to 32 bit real
// 32 bit partial-precision real types
T_REAL32PP = 0x0045, // 32 bit PP real
T_PREAL32PP = 0x0145, // 16 bit pointer to 32 bit PP real
T_PFREAL32PP = 0x0245, // 16:16 far pointer to 32 bit PP real
T_PHREAL32PP = 0x0345, // 16:16 huge pointer to 32 bit PP real
T_32PREAL32PP = 0x0445, // 32 bit pointer to 32 bit PP real
T_32PFREAL32PP = 0x0545, // 16:32 pointer to 32 bit PP real
T_64PREAL32PP = 0x0645, // 64 bit pointer to 32 bit PP real
// 48 bit real types
T_REAL48 = 0x0044, // 48 bit real
T_PREAL48 = 0x0144, // 16 bit pointer to 48 bit real
T_PFREAL48 = 0x0244, // 16:16 far pointer to 48 bit real
T_PHREAL48 = 0x0344, // 16:16 huge pointer to 48 bit real
T_32PREAL48 = 0x0444, // 32 bit pointer to 48 bit real
T_32PFREAL48 = 0x0544, // 16:32 pointer to 48 bit real
T_64PREAL48 = 0x0644, // 64 bit pointer to 48 bit real
// 64 bit real types
T_REAL64 = 0x0041, // 64 bit real
T_PREAL64 = 0x0141, // 16 bit pointer to 64 bit real
T_PFREAL64 = 0x0241, // 16:16 far pointer to 64 bit real
T_PHREAL64 = 0x0341, // 16:16 huge pointer to 64 bit real
T_32PREAL64 = 0x0441, // 32 bit pointer to 64 bit real
T_32PFREAL64 = 0x0541, // 16:32 pointer to 64 bit real
T_64PREAL64 = 0x0641, // 64 bit pointer to 64 bit real
// 80 bit real types
T_REAL80 = 0x0042, // 80 bit real
T_PREAL80 = 0x0142, // 16 bit pointer to 80 bit real
T_PFREAL80 = 0x0242, // 16:16 far pointer to 80 bit real
T_PHREAL80 = 0x0342, // 16:16 huge pointer to 80 bit real
T_32PREAL80 = 0x0442, // 32 bit pointer to 80 bit real
T_32PFREAL80 = 0x0542, // 16:32 pointer to 80 bit real
T_64PREAL80 = 0x0642, // 64 bit pointer to 80 bit real
// 128 bit real types
T_REAL128 = 0x0043, // 128 bit real
T_PREAL128 = 0x0143, // 16 bit pointer to 128 bit real
T_PFREAL128 = 0x0243, // 16:16 far pointer to 128 bit real
T_PHREAL128 = 0x0343, // 16:16 huge pointer to 128 bit real
T_32PREAL128 = 0x0443, // 32 bit pointer to 128 bit real
T_32PFREAL128 = 0x0543, // 16:32 pointer to 128 bit real
T_64PREAL128 = 0x0643, // 64 bit pointer to 128 bit real
// 32 bit complex types
T_CPLX32 = 0x0050, // 32 bit complex
T_PCPLX32 = 0x0150, // 16 bit pointer to 32 bit complex
T_PFCPLX32 = 0x0250, // 16:16 far pointer to 32 bit complex
T_PHCPLX32 = 0x0350, // 16:16 huge pointer to 32 bit complex
T_32PCPLX32 = 0x0450, // 32 bit pointer to 32 bit complex
T_32PFCPLX32 = 0x0550, // 16:32 pointer to 32 bit complex
T_64PCPLX32 = 0x0650, // 64 bit pointer to 32 bit complex
// 64 bit complex types
T_CPLX64 = 0x0051, // 64 bit complex
T_PCPLX64 = 0x0151, // 16 bit pointer to 64 bit complex
T_PFCPLX64 = 0x0251, // 16:16 far pointer to 64 bit complex
T_PHCPLX64 = 0x0351, // 16:16 huge pointer to 64 bit complex
T_32PCPLX64 = 0x0451, // 32 bit pointer to 64 bit complex
T_32PFCPLX64 = 0x0551, // 16:32 pointer to 64 bit complex
T_64PCPLX64 = 0x0651, // 64 bit pointer to 64 bit complex
// 80 bit complex types
T_CPLX80 = 0x0052, // 80 bit complex
T_PCPLX80 = 0x0152, // 16 bit pointer to 80 bit complex
T_PFCPLX80 = 0x0252, // 16:16 far pointer to 80 bit complex
T_PHCPLX80 = 0x0352, // 16:16 huge pointer to 80 bit complex
T_32PCPLX80 = 0x0452, // 32 bit pointer to 80 bit complex
T_32PFCPLX80 = 0x0552, // 16:32 pointer to 80 bit complex
T_64PCPLX80 = 0x0652, // 64 bit pointer to 80 bit complex
// 128 bit complex types
T_CPLX128 = 0x0053, // 128 bit complex
T_PCPLX128 = 0x0153, // 16 bit pointer to 128 bit complex
T_PFCPLX128 = 0x0253, // 16:16 far pointer to 128 bit complex
T_PHCPLX128 = 0x0353, // 16:16 huge pointer to 128 bit real
T_32PCPLX128 = 0x0453, // 32 bit pointer to 128 bit complex
T_32PFCPLX128 = 0x0553, // 16:32 pointer to 128 bit complex
T_64PCPLX128 = 0x0653, // 64 bit pointer to 128 bit complex
// boolean types
T_BOOL08 = 0x0030, // 8 bit boolean
T_PBOOL08 = 0x0130, // 16 bit pointer to 8 bit boolean
T_PFBOOL08 = 0x0230, // 16:16 far pointer to 8 bit boolean
T_PHBOOL08 = 0x0330, // 16:16 huge pointer to 8 bit boolean
T_32PBOOL08 = 0x0430, // 32 bit pointer to 8 bit boolean
T_32PFBOOL08 = 0x0530, // 16:32 pointer to 8 bit boolean
T_64PBOOL08 = 0x0630, // 64 bit pointer to 8 bit boolean
T_BOOL16 = 0x0031, // 16 bit boolean
T_PBOOL16 = 0x0131, // 16 bit pointer to 16 bit boolean
T_PFBOOL16 = 0x0231, // 16:16 far pointer to 16 bit boolean
T_PHBOOL16 = 0x0331, // 16:16 huge pointer to 16 bit boolean
T_32PBOOL16 = 0x0431, // 32 bit pointer to 18 bit boolean
T_32PFBOOL16 = 0x0531, // 16:32 pointer to 16 bit boolean
T_64PBOOL16 = 0x0631, // 64 bit pointer to 18 bit boolean
T_BOOL32 = 0x0032, // 32 bit boolean
T_PBOOL32 = 0x0132, // 16 bit pointer to 32 bit boolean
T_PFBOOL32 = 0x0232, // 16:16 far pointer to 32 bit boolean
T_PHBOOL32 = 0x0332, // 16:16 huge pointer to 32 bit boolean
T_32PBOOL32 = 0x0432, // 32 bit pointer to 32 bit boolean
T_32PFBOOL32 = 0x0532, // 16:32 pointer to 32 bit boolean
T_64PBOOL32 = 0x0632, // 64 bit pointer to 32 bit boolean
T_BOOL64 = 0x0033, // 64 bit boolean
T_PBOOL64 = 0x0133, // 16 bit pointer to 64 bit boolean
T_PFBOOL64 = 0x0233, // 16:16 far pointer to 64 bit boolean
T_PHBOOL64 = 0x0333, // 16:16 huge pointer to 64 bit boolean
T_32PBOOL64 = 0x0433, // 32 bit pointer to 64 bit boolean
T_32PFBOOL64 = 0x0533, // 16:32 pointer to 64 bit boolean
T_64PBOOL64 = 0x0633, // 64 bit pointer to 64 bit boolean
// ???
T_NCVPTR = 0x01f0, // CV Internal type for created near pointers
T_FCVPTR = 0x02f0, // CV Internal type for created far pointers
T_HCVPTR = 0x03f0, // CV Internal type for created huge pointers
T_32NCVPTR = 0x04f0, // CV Internal type for created near 32-bit pointers
T_32FCVPTR = 0x05f0, // CV Internal type for created far 32-bit pointers
T_64NCVPTR = 0x06f0, // CV Internal type for created near 64-bit pointers
} TYPE_ENUM_e;
/** No leaf index can have a value of 0x0000. The leaf indices are
* separated into ranges depending upon the use of the type record.
* The second range is for the type records that are directly referenced
* in symbols. The first range is for type records that are not
* referenced by symbols but instead are referenced by other type
* records. All type records must have a starting leaf index in these
* first two ranges. The third range of leaf indices are used to build
* up complex lists such as the field list of a class type record. No
* type record can begin with one of the leaf indices. The fourth ranges
* of type indices are used to represent numeric data in a symbol or
* type record. These leaf indices are greater than 0x8000. At the
* point that type or symbol processor is expecting a numeric field, the
* next two bytes in the type record are examined. If the value is less
* than 0x8000, then the two bytes contain the numeric value. If the
* value is greater than 0x8000, then the data follows the leaf index in
* a format specified by the leaf index. The final range of leaf indices
* are used to force alignment of subfields within a complex type record..
*/
typedef enum LEAF_ENUM_e {
// leaf indices starting records but referenced from symbol records
LF_MODIFIER_16t = 0x0001,
LF_POINTER_16t = 0x0002,
LF_ARRAY_16t = 0x0003,
LF_CLASS_16t = 0x0004,
LF_STRUCTURE_16t = 0x0005,
LF_UNION_16t = 0x0006,
LF_ENUM_16t = 0x0007,
LF_PROCEDURE_16t = 0x0008,
LF_MFUNCTION_16t = 0x0009,
LF_VTSHAPE = 0x000a,
LF_COBOL0_16t = 0x000b,
LF_COBOL1 = 0x000c,
LF_BARRAY_16t = 0x000d,
LF_LABEL = 0x000e,
LF_NULL = 0x000f,
LF_NOTTRAN = 0x0010,
LF_DIMARRAY_16t = 0x0011,
LF_VFTPATH_16t = 0x0012,
LF_PRECOMP_16t = 0x0013, // not referenced from symbol
LF_ENDPRECOMP = 0x0014, // not referenced from symbol
LF_OEM_16t = 0x0015, // oem definable type string
LF_TYPESERVER_ST = 0x0016, // not referenced from symbol
// leaf indices starting records but referenced only from type records
LF_SKIP_16t = 0x0200,
LF_ARGLIST_16t = 0x0201,
LF_DEFARG_16t = 0x0202,
LF_LIST = 0x0203,
LF_FIELDLIST_16t = 0x0204,
LF_DERIVED_16t = 0x0205,
LF_BITFIELD_16t = 0x0206,
LF_METHODLIST_16t = 0x0207,
LF_DIMCONU_16t = 0x0208,
LF_DIMCONLU_16t = 0x0209,
LF_DIMVARU_16t = 0x020a,
LF_DIMVARLU_16t = 0x020b,
LF_REFSYM = 0x020c,
LF_BCLASS_16t = 0x0400,
LF_VBCLASS_16t = 0x0401,
LF_IVBCLASS_16t = 0x0402,
LF_ENUMERATE_ST = 0x0403,
LF_FRIENDFCN_16t = 0x0404,
LF_INDEX_16t = 0x0405,
LF_MEMBER_16t = 0x0406,
LF_STMEMBER_16t = 0x0407,
LF_METHOD_16t = 0x0408,
LF_NESTTYPE_16t = 0x0409,
LF_VFUNCTAB_16t = 0x040a,
LF_FRIENDCLS_16t = 0x040b,
LF_ONEMETHOD_16t = 0x040c,
LF_VFUNCOFF_16t = 0x040d,
// 32-bit type index versions of leaves, all have the 0x1000 bit set
//
LF_TI16_MAX = 0x1000,
LF_MODIFIER = 0x1001,
LF_POINTER = 0x1002,
LF_ARRAY_ST = 0x1003,
LF_CLASS_ST = 0x1004,
LF_STRUCTURE_ST = 0x1005,
LF_UNION_ST = 0x1006,
LF_ENUM_ST = 0x1007,
LF_PROCEDURE = 0x1008,
LF_MFUNCTION = 0x1009,
LF_COBOL0 = 0x100a,
LF_BARRAY = 0x100b,
LF_DIMARRAY_ST = 0x100c,
LF_VFTPATH = 0x100d,
LF_PRECOMP_ST = 0x100e, // not referenced from symbol
LF_OEM = 0x100f, // oem definable type string
LF_ALIAS_ST = 0x1010, // alias (typedef) type
LF_OEM2 = 0x1011, // oem definable type string
// leaf indices starting records but referenced only from type records
LF_SKIP = 0x1200,
LF_ARGLIST = 0x1201,
LF_DEFARG_ST = 0x1202,
LF_FIELDLIST = 0x1203,
LF_DERIVED = 0x1204,
LF_BITFIELD = 0x1205,
LF_METHODLIST = 0x1206,
LF_DIMCONU = 0x1207,
LF_DIMCONLU = 0x1208,
LF_DIMVARU = 0x1209,
LF_DIMVARLU = 0x120a,
LF_BCLASS = 0x1400,
LF_VBCLASS = 0x1401,
LF_IVBCLASS = 0x1402,
LF_FRIENDFCN_ST = 0x1403,
LF_INDEX = 0x1404,
LF_MEMBER_ST = 0x1405,
LF_STMEMBER_ST = 0x1406,
LF_METHOD_ST = 0x1407,
LF_NESTTYPE_ST = 0x1408,
LF_VFUNCTAB = 0x1409,
LF_FRIENDCLS = 0x140a,
LF_ONEMETHOD_ST = 0x140b,
LF_VFUNCOFF = 0x140c,
LF_NESTTYPEEX_ST = 0x140d,
LF_MEMBERMODIFY_ST = 0x140e,
LF_MANAGED_ST = 0x140f,
// Types w/ SZ names
LF_ST_MAX = 0x1500,
LF_TYPESERVER = 0x1501, // not referenced from symbol
LF_ENUMERATE = 0x1502,
LF_ARRAY = 0x1503,
LF_CLASS = 0x1504,
LF_STRUCTURE = 0x1505,
LF_UNION = 0x1506,
LF_ENUM = 0x1507,
LF_DIMARRAY = 0x1508,
LF_PRECOMP = 0x1509, // not referenced from symbol
LF_ALIAS = 0x150a, // alias (typedef) type
LF_DEFARG = 0x150b,
LF_FRIENDFCN = 0x150c,
LF_MEMBER = 0x150d,
LF_STMEMBER = 0x150e,
LF_METHOD = 0x150f,
LF_NESTTYPE = 0x1510,
LF_ONEMETHOD = 0x1511,
LF_NESTTYPEEX = 0x1512,
LF_MEMBERMODIFY = 0x1513,
LF_MANAGED = 0x1514,
LF_TYPESERVER2 = 0x1515,
LF_STRIDED_ARRAY = 0x1516, // same as LF_ARRAY, but with stride between adjacent elements
LF_HLSL = 0x1517,
LF_MODIFIER_EX = 0x1518,
LF_INTERFACE = 0x1519,
LF_BINTERFACE = 0x151a,
LF_VECTOR = 0x151b,
LF_MATRIX = 0x151c,
LF_VFTABLE = 0x151d, // a virtual function table
LF_ENDOFLEAFRECORD = LF_VFTABLE,
LF_TYPE_LAST, // one greater than the last type record
LF_TYPE_MAX = LF_TYPE_LAST - 1,
LF_FUNC_ID = 0x1601, // global func ID
LF_MFUNC_ID = 0x1602, // member func ID
LF_BUILDINFO = 0x1603, // build info: tool, version, command line, src/pdb file
LF_SUBSTR_LIST = 0x1604, // similar to LF_ARGLIST, for list of sub strings
LF_STRING_ID = 0x1605, // string ID
LF_UDT_SRC_LINE = 0x1606, // source and line on where an UDT is defined
// only generated by compiler
LF_UDT_MOD_SRC_LINE = 0x1607, // module, source and line on where an UDT is defined
// only generated by linker
LF_ID_LAST, // one greater than the last ID record
LF_ID_MAX = LF_ID_LAST - 1,
LF_NUMERIC = 0x8000,
LF_CHAR = 0x8000,
LF_SHORT = 0x8001,
LF_USHORT = 0x8002,
LF_LONG = 0x8003,
LF_ULONG = 0x8004,
LF_REAL32 = 0x8005,
LF_REAL64 = 0x8006,
LF_REAL80 = 0x8007,
LF_REAL128 = 0x8008,
LF_QUADWORD = 0x8009,
LF_UQUADWORD = 0x800a,
LF_REAL48 = 0x800b,
LF_COMPLEX32 = 0x800c,
LF_COMPLEX64 = 0x800d,
LF_COMPLEX80 = 0x800e,
LF_COMPLEX128 = 0x800f,
LF_VARSTRING = 0x8010,
LF_OCTWORD = 0x8017,
LF_UOCTWORD = 0x8018,
LF_DECIMAL = 0x8019,
LF_DATE = 0x801a,
LF_UTF8STRING = 0x801b,
LF_REAL16 = 0x801c,
LF_PAD0 = 0xf0,
LF_PAD1 = 0xf1,
LF_PAD2 = 0xf2,
LF_PAD3 = 0xf3,
LF_PAD4 = 0xf4,
LF_PAD5 = 0xf5,
LF_PAD6 = 0xf6,
LF_PAD7 = 0xf7,
LF_PAD8 = 0xf8,
LF_PAD9 = 0xf9,
LF_PAD10 = 0xfa,
LF_PAD11 = 0xfb,
LF_PAD12 = 0xfc,
LF_PAD13 = 0xfd,
LF_PAD14 = 0xfe,
LF_PAD15 = 0xff,
} LEAF_ENUM_e;
// end of leaf indices
// Type enum for pointer records
// Pointers can be one of the following types
typedef enum CV_ptrtype_e {
CV_PTR_NEAR = 0x00, // 16 bit pointer
CV_PTR_FAR = 0x01, // 16:16 far pointer
CV_PTR_HUGE = 0x02, // 16:16 huge pointer
CV_PTR_BASE_SEG = 0x03, // based on segment
CV_PTR_BASE_VAL = 0x04, // based on value of base
CV_PTR_BASE_SEGVAL = 0x05, // based on segment value of base
CV_PTR_BASE_ADDR = 0x06, // based on address of base