winegstreamer: Register stub ResamplerMediaObject transform.
[wine.git] / include / wine / mscvpdb.h
blob1772e6d10dfadaca571d58a2955fd78c495d2fa7
1 /*
2 * MS debug information definitions.
4 * Copyright (C) 1996 Eric Youngdale
5 * Copyright (C) 1999-2000 Ulrich Weigand
6 * Copyright (C) 2004 Eric Pouech
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 /* MS has stored all its debug information in a set of structures
24 * which has been rather consistent across the years (ie you can grasp
25 * some continuity, and not so many drastic changes).
27 * A bit of history on the various formats
28 * MSVC 1.0 PDB v1 (new format for debug info)
29 * MSVC 2.0 Inclusion in link of debug info (PDB v2)
30 * MSVC 5.0 Types are 24 bits (instead of 16 for <= 4.x)
31 * MSVC x.0 PDB (change in internal streams layout)
33 * .DBG Contains COFF, FPO and Codeview info
34 * .PDB New format for debug info (information is
35 * derived from Codeview information)
36 * VCx0.PDB x major MSVC number, stores types, while
37 * <project>.PDB stores symbols.
39 * Debug information can either be found in the debug section of a PE
40 * module (in something close to a .DBG file), or the debug section
41 * can actually refer to an external file, which can be in turn,
42 * either a .DBG or .PDB file.
44 * Regarding PDB files:
45 * -------------------
46 * They are implemented as a set of internal files (as a small file
47 * system). The file is split into blocks, an internal file is made
48 * of a set of blocks. Internal files are accessed through
49 * numbers. For example,
50 * 1/ is the ROOT (basic information on the file)
51 * 2/ is the Symbol information (global symbols, local variables...)
52 * 3/ is the Type internal file (each the symbols can have type
53 * information associated with it).
55 * Over the years, three formats existed for the PDB:
56 * - ?? was rather linked to 16 bit code (our support shall be rather
57 * bad)
58 * - JG: it's the signature embedded in the file header. This format
59 * has been used in MSVC 2.0 => 5.0.
60 * - DS: it's the signature embedded in the file header. It's the
61 * current format supported my MS.
63 * Types internal stream
64 * ---------------------
65 * Types (from the Type internal file) have existed in three flavors
66 * (note that those flavors came as historical evolution, but there
67 * isn't a one to one link between types evolution and PDB formats'
68 * evolutions:
69 * - the first flavor (suffixed by V1 in this file), where the types
70 * and subtypes are 16 bit entities; and where strings are in Pascal
71 * format (first char is their length and are not 0 terminated)
72 * - the second flavor (suffixed by V2) differs from first flavor with
73 * types and subtypes as 32 bit entities. This forced some
74 * reordering of fields in some types
75 * - the third flavor (suffixed by V3) differs from second flavor with
76 * strings stored as C strings (ie are 0 terminated, instead of
77 * length prefixed)
78 * The different flavors can coexist in the same file (is this really
79 * true ??)
81 * For the evolution of types, the need of the second flavor was the
82 * number of types to be defined (limited to 0xFFFF, including the C
83 * basic types); the need of the third flavor is the increase of
84 * symbol size (to be greater than 256), which was likely needed for
85 * complex C++ types (nested + templates).
87 * It's somehow difficult to represent the layout of those types on
88 * disk because:
89 * - some integral values are stored as numeric leaf, which size is
90 * variable depending on its value
92 * Symbols internal stream
93 * -----------------------
94 * Here also we find three flavors (that we've suffixed with _V1, _V2
95 * and _V3) even if their evolution is closer to the evolution of
96 * types, they are not completely linked together.
99 #include "pshpack1.h"
101 /* ======================================== *
102 * Internal types
103 * ======================================== */
105 struct p_string
107 unsigned char namelen;
108 char name[1];
111 typedef unsigned short cv_typ16_t;
112 typedef unsigned int cv_typ_t;
113 typedef cv_typ_t cv_itemid_t;
115 /* ======================================== *
116 * Type information
117 * ======================================== */
119 union codeview_type
121 struct
123 unsigned short int len;
124 unsigned short int id;
125 } generic;
127 /* types found in TPI stream (#2) */
128 struct
130 unsigned short int len;
131 unsigned short int id;
132 short int attribute;
133 cv_typ16_t type;
134 } modifier_v1;
136 struct
138 unsigned short int len;
139 unsigned short int id;
140 cv_typ_t type;
141 short int attribute;
142 } modifier_v2;
144 struct
146 unsigned short int len;
147 unsigned short int id;
148 short int attribute;
149 short int datatype;
150 struct p_string p_name;
151 } pointer_v1;
153 struct
155 unsigned short int len;
156 unsigned short int id;
157 cv_typ_t datatype;
158 unsigned int attribute;
159 struct p_string p_name;
160 } pointer_v2;
162 struct
164 unsigned short int len;
165 unsigned short int id;
166 cv_typ16_t elemtype;
167 cv_typ16_t idxtype;
168 unsigned short int arrlen; /* numeric leaf */
169 #if 0
170 struct p_string p_name;
171 #endif
172 } array_v1;
174 struct
176 unsigned short int len;
177 unsigned short int id;
178 cv_typ_t elemtype;
179 cv_typ_t idxtype;
180 unsigned short int arrlen; /* numeric leaf */
181 #if 0
182 struct p_string p_name;
183 #endif
184 } array_v2;
186 struct
188 unsigned short int len;
189 unsigned short int id;
190 cv_typ_t elemtype;
191 cv_typ_t idxtype;
192 unsigned short int arrlen; /* numeric leaf */
193 #if 0
194 char name[1];
195 #endif
196 } array_v3;
198 struct
200 unsigned short int len;
201 unsigned short int id;
202 short int n_element;
203 cv_typ16_t fieldlist;
204 short int property;
205 cv_typ16_t derived;
206 cv_typ16_t vshape;
207 unsigned short int structlen; /* numeric leaf */
208 #if 0
209 struct p_string p_name;
210 #endif
211 } struct_v1;
213 struct
215 unsigned short int len;
216 unsigned short int id;
217 short int n_element;
218 short int property;
219 cv_typ_t fieldlist;
220 cv_typ_t derived;
221 cv_typ_t vshape;
222 unsigned short int structlen; /* numeric leaf */
223 #if 0
224 struct p_string p_name;
225 #endif
226 } struct_v2;
228 struct
230 unsigned short int len;
231 unsigned short int id;
232 short int n_element;
233 short int property;
234 cv_typ_t fieldlist;
235 cv_typ_t derived;
236 cv_typ_t vshape;
237 unsigned short int structlen; /* numeric leaf */
238 #if 0
239 char name[1];
240 #endif
241 } struct_v3;
243 struct
245 unsigned short int len;
246 unsigned short int id;
247 short int count;
248 cv_typ16_t fieldlist;
249 short int property;
250 unsigned short int un_len; /* numeric leaf */
251 #if 0
252 struct p_string p_name;
253 #endif
254 } union_v1;
256 struct
258 unsigned short int len;
259 unsigned short int id;
260 short int count;
261 short int property;
262 cv_typ_t fieldlist;
263 unsigned short int un_len; /* numeric leaf */
264 #if 0
265 struct p_string p_name;
266 #endif
267 } union_v2;
269 struct
271 unsigned short int len;
272 unsigned short int id;
273 short int count;
274 short int property;
275 cv_typ_t fieldlist;
276 unsigned short int un_len; /* numeric leaf */
277 #if 0
278 char name[1];
279 #endif
280 } union_v3;
282 struct
284 unsigned short int len;
285 unsigned short int id;
286 short int count;
287 cv_typ16_t type;
288 cv_typ16_t fieldlist;
289 short int property;
290 struct p_string p_name;
291 } enumeration_v1;
293 struct
295 unsigned short int len;
296 unsigned short int id;
297 short int count;
298 short int property;
299 cv_typ_t type;
300 cv_typ_t fieldlist;
301 struct p_string p_name;
302 } enumeration_v2;
304 struct
306 unsigned short int len;
307 unsigned short int id;
308 short int count;
309 short int property;
310 cv_typ_t type;
311 cv_typ_t fieldlist;
312 char name[1];
313 } enumeration_v3;
315 struct
317 unsigned short int len;
318 unsigned short int id;
319 cv_typ16_t rvtype;
320 unsigned char callconv;
321 unsigned char funcattr;
322 unsigned short int params;
323 cv_typ16_t arglist;
324 } procedure_v1;
326 struct
328 unsigned short int len;
329 unsigned short int id;
330 cv_typ_t rvtype;
331 unsigned char callconv;
332 unsigned char funcattr;
333 unsigned short int params;
334 cv_typ_t arglist;
335 } procedure_v2;
337 struct
339 unsigned short int len;
340 unsigned short int id;
341 cv_typ16_t rvtype;
342 cv_typ16_t class_type;
343 cv_typ16_t this_type;
344 unsigned char callconv;
345 unsigned char funcattr;
346 unsigned short int params;
347 cv_typ16_t arglist;
348 unsigned int this_adjust;
349 } mfunction_v1;
351 struct
353 unsigned short int len;
354 unsigned short int id;
355 cv_typ_t rvtype;
356 cv_typ_t class_type;
357 cv_typ_t this_type;
358 unsigned char callconv;
359 unsigned char funcattr;
360 unsigned short params;
361 cv_typ_t arglist;
362 unsigned int this_adjust;
363 } mfunction_v2;
365 /* types found in IPI stream (#4) */
366 struct
368 unsigned short int len;
369 unsigned short int id; /* LF_FUNC_ID */
370 cv_itemid_t scopeId;
371 cv_typ_t type;
372 char name[1];
373 } func_id_v3;
375 struct
377 unsigned short int len;
378 unsigned short int id; /* LF_MFUNC_ID */
379 cv_typ_t parentType;
380 cv_typ_t type;
381 char name[1];
382 } mfunc_id_v3;
384 struct
386 unsigned short int len;
387 unsigned short int id; /* LF_STRING_ID */
388 cv_itemid_t strid;
389 char name[1];
390 } string_id_v3;
392 struct
394 unsigned short int len;
395 unsigned short int id; /* LF_UDT_SRC_LINE */
396 cv_typ_t type;
397 cv_itemid_t src;
398 unsigned int line;
399 } udt_src_line_v3;
401 struct
403 unsigned short int len;
404 unsigned short int id; /* LF_UDT_MOD_SRC_LINE */
405 cv_typ_t type;
406 cv_itemid_t src;
407 unsigned int line;
408 unsigned short imod;
409 } udt_mod_src_line_v3;
411 struct
413 unsigned short int len;
414 unsigned short int id; /* LF_BUILDINFO */
415 unsigned short count;
416 cv_itemid_t arg[1];
417 } buildinfo_v3;
421 union codeview_reftype
423 struct
425 unsigned short int len;
426 unsigned short int id;
427 } generic;
429 struct
431 unsigned short int len;
432 unsigned short int id;
433 unsigned char list[1];
434 } fieldlist;
436 struct
438 unsigned short int len;
439 unsigned short int id;
440 unsigned char nbits;
441 unsigned char bitoff;
442 cv_typ16_t type;
443 } bitfield_v1;
445 struct
447 unsigned short int len;
448 unsigned short int id;
449 cv_typ_t type;
450 unsigned char nbits;
451 unsigned char bitoff;
452 } bitfield_v2;
454 struct
456 unsigned short int len;
457 unsigned short int id;
458 unsigned short num;
459 cv_typ16_t args[1];
460 } arglist_v1;
462 struct
464 unsigned short int len;
465 unsigned short int id;
466 unsigned num;
467 cv_typ_t args[1];
468 } arglist_v2;
470 struct
472 unsigned short int len;
473 unsigned short int id;
474 unsigned short num;
475 cv_typ16_t drvdcls[1];
476 } derived_v1;
478 struct
480 unsigned short int len;
481 unsigned short int id;
482 unsigned num;
483 cv_typ_t drvdcls[1];
484 } derived_v2;
486 struct
488 unsigned short int len;
489 unsigned short int id;
490 cv_typ_t type;
491 cv_typ_t baseVftable;
492 unsigned offsetInObjectLayout;
493 unsigned cbstr;
494 char names[1]; /* array of len 0-terminated strings (size of cbstr in char:s) */
495 } vftable_v3;
498 union codeview_fieldtype
500 struct
502 unsigned short int id;
503 } generic;
505 struct
507 unsigned short int id;
508 cv_typ16_t type;
509 short int attribute;
510 unsigned short int offset; /* numeric leaf */
511 } bclass_v1;
513 struct
515 unsigned short int id;
516 short int attribute;
517 cv_typ_t type;
518 unsigned short int offset; /* numeric leaf */
519 } bclass_v2;
521 struct
523 unsigned short int id;
524 cv_typ16_t btype;
525 cv_typ16_t vbtype;
526 short int attribute;
527 unsigned short int vbpoff; /* numeric leaf */
528 #if 0
529 unsigned short int vboff; /* numeric leaf */
530 #endif
531 } vbclass_v1;
533 struct
535 unsigned short int id;
536 short int attribute;
537 cv_typ_t btype;
538 cv_typ_t vbtype;
539 unsigned short int vbpoff; /* numeric leaf */
540 #if 0
541 unsigned short int vboff; /* numeric leaf */
542 #endif
543 } vbclass_v2;
545 struct
547 unsigned short int id;
548 short int attribute;
549 unsigned short int value; /* numeric leaf */
550 #if 0
551 struct p_string p_name;
552 #endif
553 } enumerate_v1;
555 struct
557 unsigned short int id;
558 short int attribute;
559 unsigned short int value; /* numeric leaf */
560 #if 0
561 char name[1];
562 #endif
563 } enumerate_v3;
565 struct
567 unsigned short int id;
568 cv_typ16_t type;
569 struct p_string p_name;
570 } friendfcn_v1;
572 struct
574 unsigned short int id;
575 short int _pad0;
576 cv_typ_t type;
577 struct p_string p_name;
578 } friendfcn_v2;
580 struct
582 unsigned short int id;
583 short int _pad0;
584 cv_typ_t type;
585 char name[1];
586 } friendfcn_v3;
588 struct
590 unsigned short int id;
591 cv_typ16_t type;
592 short int attribute;
593 unsigned short int offset; /* numeric leaf */
594 #if 0
595 struct p_string p_name;
596 #endif
597 } member_v1;
599 struct
601 unsigned short int id;
602 short int attribute;
603 cv_typ_t type;
604 unsigned short int offset; /* numeric leaf */
605 #if 0
606 struct p_string p_name;
607 #endif
608 } member_v2;
610 struct
612 unsigned short int id;
613 short int attribute;
614 cv_typ_t type;
615 unsigned short int offset; /* numeric leaf */
616 #if 0
617 char name[1];
618 #endif
620 member_v3;
622 struct
624 unsigned short int id;
625 cv_typ16_t type;
626 short int attribute;
627 struct p_string p_name;
628 } stmember_v1;
630 struct
632 unsigned short int id;
633 short int attribute;
634 cv_typ_t type;
635 struct p_string p_name;
636 } stmember_v2;
638 struct
640 unsigned short int id;
641 short int attribute;
642 cv_typ_t type;
643 char name[1];
644 } stmember_v3;
646 struct
648 unsigned short int id;
649 short int count;
650 cv_typ16_t mlist;
651 struct p_string p_name;
652 } method_v1;
654 struct
656 unsigned short int id;
657 short int count;
658 cv_typ_t mlist;
659 struct p_string p_name;
660 } method_v2;
662 struct
664 unsigned short int id;
665 short int count;
666 cv_typ_t mlist;
667 char name[1];
668 } method_v3;
670 struct
672 unsigned short int id;
673 cv_typ16_t type;
674 struct p_string p_name;
675 } nesttype_v1;
677 struct
679 unsigned short int id;
680 short int _pad0;
681 cv_typ_t type;
682 struct p_string p_name;
683 } nesttype_v2;
685 struct
687 unsigned short int id;
688 short int _pad0;
689 cv_typ_t type;
690 char name[1];
691 } nesttype_v3;
693 struct
695 unsigned short int id;
696 cv_typ16_t type;
697 } vfunctab_v1;
699 struct
701 unsigned short int id;
702 short int _pad0;
703 cv_typ_t type;
704 } vfunctab_v2;
706 struct
708 unsigned short int id;
709 cv_typ16_t type;
710 } friendcls_v1;
712 struct
714 unsigned short int id;
715 short int _pad0;
716 cv_typ_t type;
717 } friendcls_v2;
719 struct
721 unsigned short int id;
722 short int attribute;
723 cv_typ16_t type;
724 struct p_string p_name;
725 } onemethod_v1;
727 struct
729 unsigned short int id;
730 short int attribute;
731 cv_typ_t type;
732 struct p_string p_name;
733 } onemethod_v2;
735 struct
737 unsigned short int id;
738 short int attribute;
739 cv_typ_t type;
740 char name[1];
741 } onemethod_v3;
743 struct
745 unsigned short int id;
746 short int attribute;
747 cv_typ16_t type;
748 unsigned int vtab_offset;
749 struct p_string p_name;
750 } onemethod_virt_v1;
752 struct
754 unsigned short int id;
755 short int attribute;
756 cv_typ_t type;
757 unsigned int vtab_offset;
758 struct p_string p_name;
759 } onemethod_virt_v2;
761 struct
763 unsigned short int id;
764 short int attribute;
765 cv_typ_t type;
766 unsigned int vtab_offset;
767 char name[1];
768 } onemethod_virt_v3;
770 struct
772 unsigned short int id;
773 cv_typ16_t type;
774 unsigned int offset;
775 } vfuncoff_v1;
777 struct
779 unsigned short int id;
780 short int _pad0;
781 cv_typ_t type;
782 unsigned int offset;
783 } vfuncoff_v2;
785 struct
787 unsigned short int id;
788 short int attribute;
789 cv_typ16_t type;
790 struct p_string p_name;
791 } nesttypeex_v1;
793 struct
795 unsigned short int id;
796 short int attribute;
797 cv_typ_t type;
798 struct p_string p_name;
799 } nesttypeex_v2;
801 struct
803 unsigned short int id;
804 short int attribute;
805 cv_typ_t type;
806 struct p_string p_name;
807 } membermodify_v2;
809 struct
811 unsigned short int id;
812 cv_typ16_t ref;
813 } index_v1;
815 struct
817 unsigned short int id;
818 short int _pad0;
819 cv_typ_t ref;
820 } index_v2;
825 * This covers the basic datatypes that VC++ seems to be using these days.
826 * 32 bit mode only. There are additional numbers for the pointers in 16
827 * bit mode. There are many other types listed in the documents, but these
828 * are apparently not used by the compiler, or represent pointer types
829 * that are not used.
831 * Official MS documentation says that type (< 0x4000, so 12 bits) is made of:
832 * +----------+------+------+----------+------+
833 * | 11 | 10-8 | 7-4 | 3 | 2-0 |
834 * +----------+------+------+----------+------+
835 * | reserved | mode | type | reserved | size |
836 * +----------+------+------+----------+------+
837 * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've
838 * added this basic type... as if bit 3 had been integrated into the size field
841 /* the type number of a built-in type is a 16-bit value specified in the following format:
842 bit # | 11 | 10-8 | 7-4 | 3 | 2-0 |
843 field | reserved | mode | type | reserved | size |
845 where
846 <type> is one of the following types:
847 0x00 Special
848 0x01 Signed integral value
849 0x02 Unsigned integral value
850 0x03 Boolean
851 0x04 Real
852 0x05 Complex
853 0x06 Special2
854 0x07 Real int value
855 0x08 Reserved
856 0x09 Reserved
857 0x0a Reserved
858 0x0b Reserved
859 0x0c Reserved
860 0x0d Reserved
861 0x0e Reserved
862 0x0f Reserved for debugger expression evaluator
864 <size> is an enumerated value for each of the types.
865 Type = special
866 0x00 No type
867 0x01 Absolute symbol
868 0x02 Segment
869 0x03 Void
870 0x04 Basic 8-byte currency value
871 0x05 Near Basic string
872 0x06 Far Basic string
873 0x07 Untranslated type from previous Microsoft symbol formats
874 Type = signed/unsigned integral and Boolean values
875 0x00 1 byte
876 0x01 2 byte
877 0x02 4 byte
878 0x03 8 byte
879 0x04 Reserved
880 0x05 Reserved
881 0x06 Reserved
882 0x07 Reserved
883 Type = real and complex
884 0x00 32 bit
885 0x01 64 bit
886 0x02 80 bit
887 0x03 128 bit
888 0x04 48 bit
889 0x05 Reserved
890 0x06 Reserved
891 0x07 Reserved
892 Type = special2
893 0x00 Bit
894 0x01 Pascal CHAR
895 Type = Real int
896 0x00 Char
897 0x01 Wide character
898 0x02 2-byte signed integer
899 0x03 2-byte unsigned integer
900 0x04 4-byte signed integer
901 0x05 4-byte unsigned integer
902 0x06 8-byte signed integer
903 0x07 8-byte unsigned integer
905 <mode> is the pointer mode:
906 0x00 Direct; not a pointer
907 0x01 Near pointer
908 0x02 Far pointer
909 0x03 Huge pointer
910 0x04 32-bit near pointer
911 0x05 32-bit far pointer
912 0x06 64-bit near pointer
913 0x07 Reserved
916 /* basic types */
917 #define T_NOTYPE 0x0000 /* Notype */
918 #define T_ABS 0x0001 /* Abs */
919 #define T_SEGMENT 0x0002 /* segment type */
920 #define T_VOID 0x0003 /* Void */
921 #define T_CURRENCY 0x0004 /* basic 8-byte currency value */
922 #define T_NBASICSTR 0x0005 /* near basic string */
923 #define T_FBASICSTR 0x0006 /* far basic string */
924 #define T_NOTTRANS 0x0007 /* untranslated type record from MS symbol format */
925 #define T_HRESULT 0x0008 /* HRESULT - or error code ??? */
926 #define T_CHAR 0x0010 /* signed char */
927 #define T_SHORT 0x0011 /* short */
928 #define T_LONG 0x0012 /* long */
929 #define T_QUAD 0x0013 /* long long */
930 #define T_UCHAR 0x0020 /* unsigned char */
931 #define T_USHORT 0x0021 /* unsigned short */
932 #define T_ULONG 0x0022 /* unsigned long */
933 #define T_UQUAD 0x0023 /* unsigned long long */
934 #define T_BOOL08 0x0030 /* 8-bit boolean */
935 #define T_BOOL16 0x0031 /* 16-bit boolean */
936 #define T_BOOL32 0x0032 /* 32-bit boolean */
937 #define T_BOOL64 0x0033 /* 64-bit boolean */
938 #define T_REAL32 0x0040 /* float */
939 #define T_REAL64 0x0041 /* double */
940 #define T_REAL80 0x0042 /* 80-bit real */
941 #define T_REAL128 0x0043 /* 128-bit real */
942 #define T_REAL48 0x0044 /* 48-bit real */
943 #define T_CPLX32 0x0050 /* 32-bit complex number */
944 #define T_CPLX64 0x0051 /* 64-bit complex number */
945 #define T_CPLX80 0x0052 /* 80-bit complex number */
946 #define T_CPLX128 0x0053 /* 128-bit complex number */
947 #define T_BIT 0x0060 /* bit */
948 #define T_PASCHAR 0x0061 /* pascal CHAR */
949 #define T_RCHAR 0x0070 /* real char */
950 #define T_WCHAR 0x0071 /* wide char */
951 #define T_INT2 0x0072 /* real 16-bit signed int */
952 #define T_UINT2 0x0073 /* real 16-bit unsigned int */
953 #define T_INT4 0x0074 /* int */
954 #define T_UINT4 0x0075 /* unsigned int */
955 #define T_INT8 0x0076 /* 64-bit signed int */
956 #define T_UINT8 0x0077 /* 64-bit unsigned int */
957 #define T_CHAR16 0x007a /* 16-bit unicode char */
958 #define T_CHAR32 0x007b /* 32-bit unicode char */
959 #define T_CHAR8 0x007c /* 8-bit unicode char (C++ 20) */
961 /* near pointers to basic types */
962 #define T_PVOID 0x0103 /* near pointer to void */
963 #define T_PCHAR 0x0110 /* Near pointer to 8-bit signed */
964 #define T_PSHORT 0x0111 /* Near pointer to 16-bit signed */
965 #define T_PLONG 0x0112 /* Near pointer to 32-bit signed */
966 #define T_PQUAD 0x0113 /* Near pointer to 64-bit signed */
967 #define T_PUCHAR 0x0120 /* Near pointer to 8-bit unsigned */
968 #define T_PUSHORT 0x0121 /* Near pointer to 16-bit unsigned */
969 #define T_PULONG 0x0122 /* Near pointer to 32-bit unsigned */
970 #define T_PUQUAD 0x0123 /* Near pointer to 64-bit unsigned */
971 #define T_PBOOL08 0x0130 /* Near pointer to 8-bit Boolean */
972 #define T_PBOOL16 0x0131 /* Near pointer to 16-bit Boolean */
973 #define T_PBOOL32 0x0132 /* Near pointer to 32-bit Boolean */
974 #define T_PBOOL64 0x0133 /* Near pointer to 64-bit Boolean */
975 #define T_PREAL32 0x0140 /* Near pointer to 32-bit real */
976 #define T_PREAL64 0x0141 /* Near pointer to 64-bit real */
977 #define T_PREAL80 0x0142 /* Near pointer to 80-bit real */
978 #define T_PREAL128 0x0143 /* Near pointer to 128-bit real */
979 #define T_PREAL48 0x0144 /* Near pointer to 48-bit real */
980 #define T_PCPLX32 0x0150 /* Near pointer to 32-bit complex */
981 #define T_PCPLX64 0x0151 /* Near pointer to 64-bit complex */
982 #define T_PCPLX80 0x0152 /* Near pointer to 80-bit complex */
983 #define T_PCPLX128 0x0153 /* Near pointer to 128-bit complex */
984 #define T_PRCHAR 0x0170 /* Near pointer to a real char */
985 #define T_PWCHAR 0x0171 /* Near pointer to a wide char */
986 #define T_PINT2 0x0172 /* Near pointer to 16-bit signed int */
987 #define T_PUINT2 0x0173 /* Near pointer to 16-bit unsigned int */
988 #define T_PINT4 0x0174 /* Near pointer to 32-bit signed int */
989 #define T_PUINT4 0x0175 /* Near pointer to 32-bit unsigned int */
990 #define T_PINT8 0x0176 /* Near pointer to 64-bit signed int */
991 #define T_PUINT8 0x0177 /* Near pointer to 64-bit unsigned int */
992 #define T_PCHAR16 0x017a /* Near pointer to 16-bit unicode char */
993 #define T_PCHAR32 0x017b /* Near pointer to 32-bit unicode char */
994 #define T_PCHAR8 0x017c /* Near pointer to 8-bit unicode char */
996 /* far pointers to basic types */
997 #define T_PFVOID 0x0203 /* Far pointer to void */
998 #define T_PFCHAR 0x0210 /* Far pointer to 8-bit signed */
999 #define T_PFSHORT 0x0211 /* Far pointer to 16-bit signed */
1000 #define T_PFLONG 0x0212 /* Far pointer to 32-bit signed */
1001 #define T_PFQUAD 0x0213 /* Far pointer to 64-bit signed */
1002 #define T_PFUCHAR 0x0220 /* Far pointer to 8-bit unsigned */
1003 #define T_PFUSHORT 0x0221 /* Far pointer to 16-bit unsigned */
1004 #define T_PFULONG 0x0222 /* Far pointer to 32-bit unsigned */
1005 #define T_PFUQUAD 0x0223 /* Far pointer to 64-bit unsigned */
1006 #define T_PFBOOL08 0x0230 /* Far pointer to 8-bit Boolean */
1007 #define T_PFBOOL16 0x0231 /* Far pointer to 16-bit Boolean */
1008 #define T_PFBOOL32 0x0232 /* Far pointer to 32-bit Boolean */
1009 #define T_PFBOOL64 0x0233 /* Far pointer to 64-bit Boolean */
1010 #define T_PFREAL32 0x0240 /* Far pointer to 32-bit real */
1011 #define T_PFREAL64 0x0241 /* Far pointer to 64-bit real */
1012 #define T_PFREAL80 0x0242 /* Far pointer to 80-bit real */
1013 #define T_PFREAL128 0x0243 /* Far pointer to 128-bit real */
1014 #define T_PFREAL48 0x0244 /* Far pointer to 48-bit real */
1015 #define T_PFCPLX32 0x0250 /* Far pointer to 32-bit complex */
1016 #define T_PFCPLX64 0x0251 /* Far pointer to 64-bit complex */
1017 #define T_PFCPLX80 0x0252 /* Far pointer to 80-bit complex */
1018 #define T_PFCPLX128 0x0253 /* Far pointer to 128-bit complex */
1019 #define T_PFRCHAR 0x0270 /* Far pointer to a real char */
1020 #define T_PFWCHAR 0x0271 /* Far pointer to a wide char */
1021 #define T_PFINT2 0x0272 /* Far pointer to 16-bit signed int */
1022 #define T_PFUINT2 0x0273 /* Far pointer to 16-bit unsigned int */
1023 #define T_PFINT4 0x0274 /* Far pointer to 32-bit signed int */
1024 #define T_PFUINT4 0x0275 /* Far pointer to 32-bit unsigned int */
1025 #define T_PFINT8 0x0276 /* Far pointer to 64-bit signed int */
1026 #define T_PFUINT8 0x0277 /* Far pointer to 64-bit unsigned int */
1027 #define T_PFCHAR16 0x027a /* Far pointer to 16-bit unicode char */
1028 #define T_PFCHAR32 0x027b /* Far pointer to 32-bit unicode char */
1029 #define T_PFCHAR8 0x027c /* Far pointer to 8-bit unicode char */
1031 /* huge pointers to basic types */
1032 #define T_PHVOID 0x0303 /* Huge pointer to void */
1033 #define T_PHCHAR 0x0310 /* Huge pointer to 8-bit signed */
1034 #define T_PHSHORT 0x0311 /* Huge pointer to 16-bit signed */
1035 #define T_PHLONG 0x0312 /* Huge pointer to 32-bit signed */
1036 #define T_PHQUAD 0x0313 /* Huge pointer to 64-bit signed */
1037 #define T_PHUCHAR 0x0320 /* Huge pointer to 8-bit unsigned */
1038 #define T_PHUSHORT 0x0321 /* Huge pointer to 16-bit unsigned */
1039 #define T_PHULONG 0x0322 /* Huge pointer to 32-bit unsigned */
1040 #define T_PHUQUAD 0x0323 /* Huge pointer to 64-bit unsigned */
1041 #define T_PHBOOL08 0x0330 /* Huge pointer to 8-bit Boolean */
1042 #define T_PHBOOL16 0x0331 /* Huge pointer to 16-bit Boolean */
1043 #define T_PHBOOL32 0x0332 /* Huge pointer to 32-bit Boolean */
1044 #define T_PHBOOL64 0x0333 /* Huge pointer to 64-bit Boolean */
1045 #define T_PHREAL32 0x0340 /* Huge pointer to 32-bit real */
1046 #define T_PHREAL64 0x0341 /* Huge pointer to 64-bit real */
1047 #define T_PHREAL80 0x0342 /* Huge pointer to 80-bit real */
1048 #define T_PHREAL128 0x0343 /* Huge pointer to 128-bit real */
1049 #define T_PHREAL48 0x0344 /* Huge pointer to 48-bit real */
1050 #define T_PHCPLX32 0x0350 /* Huge pointer to 32-bit complex */
1051 #define T_PHCPLX64 0x0351 /* Huge pointer to 64-bit complex */
1052 #define T_PHCPLX80 0x0352 /* Huge pointer to 80-bit complex */
1053 #define T_PHCPLX128 0x0353 /* Huge pointer to 128-bit real */
1054 #define T_PHRCHAR 0x0370 /* Huge pointer to a real char */
1055 #define T_PHWCHAR 0x0371 /* Huge pointer to a wide char */
1056 #define T_PHINT2 0x0372 /* Huge pointer to 16-bit signed int */
1057 #define T_PHUINT2 0x0373 /* Huge pointer to 16-bit unsigned int */
1058 #define T_PHINT4 0x0374 /* Huge pointer to 32-bit signed int */
1059 #define T_PHUINT4 0x0375 /* Huge pointer to 32-bit unsigned int */
1060 #define T_PHINT8 0x0376 /* Huge pointer to 64-bit signed int */
1061 #define T_PHUINT8 0x0377 /* Huge pointer to 64-bit unsigned int */
1062 #define T_PHCHAR16 0x037a /* Huge pointer to 16-bit unicode char */
1063 #define T_PHCHAR32 0x037b /* Huge pointer to 32-bit unicode char */
1064 #define T_PHCHAR8 0x037c /* Huge pointer to 8-bit unicode char */
1066 /* 32-bit near pointers to basic types */
1067 #define T_32PVOID 0x0403 /* 32-bit near pointer to void */
1068 #define T_32PHRESULT 0x0408 /* 16:32 near pointer to HRESULT - or error code ??? */
1069 #define T_32PCHAR 0x0410 /* 16:32 near pointer to 8-bit signed */
1070 #define T_32PSHORT 0x0411 /* 16:32 near pointer to 16-bit signed */
1071 #define T_32PLONG 0x0412 /* 16:32 near pointer to 32-bit signed */
1072 #define T_32PQUAD 0x0413 /* 16:32 near pointer to 64-bit signed */
1073 #define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8-bit unsigned */
1074 #define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16-bit unsigned */
1075 #define T_32PULONG 0x0422 /* 16:32 near pointer to 32-bit unsigned */
1076 #define T_32PUQUAD 0x0423 /* 16:32 near pointer to 64-bit unsigned */
1077 #define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8-bit Boolean */
1078 #define T_32PBOOL16 0x0431 /* 16:32 near pointer to 16-bit Boolean */
1079 #define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32-bit Boolean */
1080 #define T_32PBOOL64 0x0433 /* 16:32 near pointer to 64-bit Boolean */
1081 #define T_32PREAL32 0x0440 /* 16:32 near pointer to 32-bit real */
1082 #define T_32PREAL64 0x0441 /* 16:32 near pointer to 64-bit real */
1083 #define T_32PREAL80 0x0442 /* 16:32 near pointer to 80-bit real */
1084 #define T_32PREAL128 0x0443 /* 16:32 near pointer to 128-bit real */
1085 #define T_32PREAL48 0x0444 /* 16:32 near pointer to 48-bit real */
1086 #define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32-bit complex */
1087 #define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64-bit complex */
1088 #define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80-bit complex */
1089 #define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128-bit complex */
1090 #define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */
1091 #define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */
1092 #define T_32PINT2 0x0472 /* 16:32 near pointer to 16-bit signed int */
1093 #define T_32PUINT2 0x0473 /* 16:32 near pointer to 16-bit unsigned int */
1094 #define T_32PINT4 0x0474 /* 16:32 near pointer to 32-bit signed int */
1095 #define T_32PUINT4 0x0475 /* 16:32 near pointer to 32-bit unsigned int */
1096 #define T_32PINT8 0x0476 /* 16:32 near pointer to 64-bit signed int */
1097 #define T_32PUINT8 0x0477 /* 16:32 near pointer to 64-bit unsigned int */
1098 #define T_32PCHAR16 0x047a /* 16:32 near pointer to 16-bit unicode char */
1099 #define T_32PCHAR32 0x047b /* 16:32 near pointer to 32-bit unicode char */
1100 #define T_32PCHAR8 0x047c /* 16:32 near pointer to 8-bit unicode char */
1102 /* 32-bit far pointers to basic types */
1103 #define T_32PFVOID 0x0503 /* 32-bit far pointer to void */
1104 #define T_32PFHRESULT 0x0508 /* 16:32 far pointer to HRESULT - or error code ??? */
1105 #define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */
1106 #define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */
1107 #define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */
1108 #define T_32PFQUAD 0x0513 /* 16:32 far pointer to 64-bit signed */
1109 #define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8-bit unsigned */
1110 #define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16-bit unsigned */
1111 #define T_32PFULONG 0x0522 /* 16:32 far pointer to 32-bit unsigned */
1112 #define T_32PFUQUAD 0x0523 /* 16:32 far pointer to 64-bit unsigned */
1113 #define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8-bit Boolean */
1114 #define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16-bit Boolean */
1115 #define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32-bit Boolean */
1116 #define T_32PFBOOL64 0x0533 /* 16:32 far pointer to 64-bit Boolean */
1117 #define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32-bit real */
1118 #define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64-bit real */
1119 #define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80-bit real */
1120 #define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128-bit real */
1121 #define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48-bit real */
1122 #define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32-bit complex */
1123 #define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64-bit complex */
1124 #define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80-bit complex */
1125 #define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128-bit complex */
1126 #define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */
1127 #define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */
1128 #define T_32PFINT2 0x0572 /* 16:32 far pointer to 16-bit signed int */
1129 #define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16-bit unsigned int */
1130 #define T_32PFINT4 0x0574 /* 16:32 far pointer to 32-bit signed int */
1131 #define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32-bit unsigned int */
1132 #define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */
1133 #define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */
1134 #define T_32PFCHAR16 0x057a /* 16:32 far pointer to 16-bit unicode char */
1135 #define T_32PFCHAR32 0x057b /* 16:32 far pointer to 32-bit unicode char */
1136 #define T_32PFCHAR8 0x057c /* 16:32 far pointer to 8-bit unicode char */
1138 /* 64-bit near pointers to basic types */
1139 #define T_64PVOID 0x0603 /* 64-bit near pointer to void */
1140 #define T_64PHRESULT 0x0608 /* 64 near pointer to HRESULT - or error code ??? */
1141 #define T_64PCHAR 0x0610 /* 64 near pointer to 8-bit signed */
1142 #define T_64PSHORT 0x0611 /* 64 near pointer to 16-bit signed */
1143 #define T_64PLONG 0x0612 /* 64 near pointer to 32-bit signed */
1144 #define T_64PQUAD 0x0613 /* 64 near pointer to 64-bit signed */
1145 #define T_64PUCHAR 0x0620 /* 64 near pointer to 8-bit unsigned */
1146 #define T_64PUSHORT 0x0621 /* 64 near pointer to 16-bit unsigned */
1147 #define T_64PULONG 0x0622 /* 64 near pointer to 32-bit unsigned */
1148 #define T_64PUQUAD 0x0623 /* 64 near pointer to 64-bit unsigned */
1149 #define T_64PBOOL08 0x0630 /* 64 near pointer to 8-bit Boolean */
1150 #define T_64PBOOL16 0x0631 /* 64 near pointer to 16-bit Boolean */
1151 #define T_64PBOOL32 0x0632 /* 64 near pointer to 32-bit Boolean */
1152 #define T_64PBOOL64 0x0633 /* 64 near pointer to 64-bit Boolean */
1153 #define T_64PREAL32 0x0640 /* 64 near pointer to 32-bit real */
1154 #define T_64PREAL64 0x0641 /* 64 near pointer to 64-bit real */
1155 #define T_64PREAL80 0x0642 /* 64 near pointer to 80-bit real */
1156 #define T_64PREAL128 0x0643 /* 64 near pointer to 128-bit real */
1157 #define T_64PREAL48 0x0644 /* 64 near pointer to 48-bit real */
1158 #define T_64PCPLX32 0x0650 /* 64 near pointer to 32-bit complex */
1159 #define T_64PCPLX64 0x0651 /* 64 near pointer to 64-bit complex */
1160 #define T_64PCPLX80 0x0652 /* 64 near pointer to 80-bit complex */
1161 #define T_64PCPLX128 0x0653 /* 64 near pointer to 128-bit complex */
1162 #define T_64PRCHAR 0x0670 /* 64 near pointer to a real char */
1163 #define T_64PWCHAR 0x0671 /* 64 near pointer to a wide char */
1164 #define T_64PINT2 0x0672 /* 64 near pointer to 16-bit signed int */
1165 #define T_64PUINT2 0x0673 /* 64 near pointer to 16-bit unsigned int */
1166 #define T_64PINT4 0x0674 /* 64 near pointer to 32-bit signed int */
1167 #define T_64PUINT4 0x0675 /* 64 near pointer to 32-bit unsigned int */
1168 #define T_64PINT8 0x0676 /* 64 near pointer to 64-bit signed int */
1169 #define T_64PUINT8 0x0677 /* 64 near pointer to 64-bit unsigned int */
1170 #define T_64PCHAR16 0x067a /* 64 near pointer to 16-bit unicode char */
1171 #define T_64PCHAR32 0x067b /* 64 near pointer to 32-bit unicode char */
1172 #define T_64PCHAR8 0x067c /* 64 near pointer to 8-bit unicode char */
1174 /* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */
1175 #define T_MAXPREDEFINEDTYPE 0x0580 /* maximum type index for all built-in types */
1176 #define T_MAXBASICTYPE 0x0080 /* maximum type index all non-pointer built-in types */
1177 #define T_BASICTYPE_MASK 0x00ff /* mask of bits that can potentially identify a non-pointer basic type */
1178 #define T_BASICTYPE_SHIFT 8 /* shift count to push out the basic type bits from a type number */
1179 #define T_MODE_MASK 0x0700 /* type mode mask (ptr/non-ptr) */
1180 #define T_SIZE_MASK 0x0007 /* type size mask (depends on 'type' value) */
1181 #define T_TYPE_MASK 0x00f0 /* type type mask (data treatment mode) */
1183 /* bit patterns for the <mode> portion of a built-in type number */
1184 #define T_NEARPTR_BITS 0x0100
1185 #define T_FARPTR_BITS 0x0200
1186 #define T_HUGEPTR_BITS 0x0300
1187 #define T_NEAR32PTR_BITS 0x0400
1188 #define T_FAR32PTR_BITS 0x0500
1189 #define T_NEAR64PTR_BITS 0x0600
1191 #define LF_MODIFIER_V1 0x0001
1192 #define LF_POINTER_V1 0x0002
1193 #define LF_ARRAY_V1 0x0003
1194 #define LF_CLASS_V1 0x0004
1195 #define LF_STRUCTURE_V1 0x0005
1196 #define LF_UNION_V1 0x0006
1197 #define LF_ENUM_V1 0x0007
1198 #define LF_PROCEDURE_V1 0x0008
1199 #define LF_MFUNCTION_V1 0x0009
1200 #define LF_VTSHAPE_V1 0x000a
1201 #define LF_COBOL0_V1 0x000b
1202 #define LF_COBOL1_V1 0x000c
1203 #define LF_BARRAY_V1 0x000d
1204 #define LF_LABEL_V1 0x000e
1205 #define LF_NULL_V1 0x000f
1206 #define LF_NOTTRAN_V1 0x0010
1207 #define LF_DIMARRAY_V1 0x0011
1208 #define LF_VFTPATH_V1 0x0012
1209 #define LF_PRECOMP_V1 0x0013
1210 #define LF_ENDPRECOMP_V1 0x0014
1211 #define LF_OEM_V1 0x0015
1212 #define LF_TYPESERVER_V1 0x0016
1214 #define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
1215 #define LF_POINTER_V2 0x1002
1216 #define LF_ARRAY_V2 0x1003
1217 #define LF_CLASS_V2 0x1004
1218 #define LF_STRUCTURE_V2 0x1005
1219 #define LF_UNION_V2 0x1006
1220 #define LF_ENUM_V2 0x1007
1221 #define LF_PROCEDURE_V2 0x1008
1222 #define LF_MFUNCTION_V2 0x1009
1223 #define LF_COBOL0_V2 0x100a
1224 #define LF_BARRAY_V2 0x100b
1225 #define LF_DIMARRAY_V2 0x100c
1226 #define LF_VFTPATH_V2 0x100d
1227 #define LF_PRECOMP_V2 0x100e
1228 #define LF_OEM_V2 0x100f
1230 #define LF_SKIP_V1 0x0200
1231 #define LF_ARGLIST_V1 0x0201
1232 #define LF_DEFARG_V1 0x0202
1233 #define LF_LIST_V1 0x0203
1234 #define LF_FIELDLIST_V1 0x0204
1235 #define LF_DERIVED_V1 0x0205
1236 #define LF_BITFIELD_V1 0x0206
1237 #define LF_METHODLIST_V1 0x0207
1238 #define LF_DIMCONU_V1 0x0208
1239 #define LF_DIMCONLU_V1 0x0209
1240 #define LF_DIMVARU_V1 0x020a
1241 #define LF_DIMVARLU_V1 0x020b
1242 #define LF_REFSYM_V1 0x020c
1244 #define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
1245 #define LF_ARGLIST_V2 0x1201
1246 #define LF_DEFARG_V2 0x1202
1247 #define LF_FIELDLIST_V2 0x1203
1248 #define LF_DERIVED_V2 0x1204
1249 #define LF_BITFIELD_V2 0x1205
1250 #define LF_METHODLIST_V2 0x1206
1251 #define LF_DIMCONU_V2 0x1207
1252 #define LF_DIMCONLU_V2 0x1208
1253 #define LF_DIMVARU_V2 0x1209
1254 #define LF_DIMVARLU_V2 0x120a
1256 /* Field lists */
1257 #define LF_BCLASS_V1 0x0400
1258 #define LF_VBCLASS_V1 0x0401
1259 #define LF_IVBCLASS_V1 0x0402
1260 #define LF_ENUMERATE_V1 0x0403
1261 #define LF_FRIENDFCN_V1 0x0404
1262 #define LF_INDEX_V1 0x0405
1263 #define LF_MEMBER_V1 0x0406
1264 #define LF_STMEMBER_V1 0x0407
1265 #define LF_METHOD_V1 0x0408
1266 #define LF_NESTTYPE_V1 0x0409
1267 #define LF_VFUNCTAB_V1 0x040a
1268 #define LF_FRIENDCLS_V1 0x040b
1269 #define LF_ONEMETHOD_V1 0x040c
1270 #define LF_VFUNCOFF_V1 0x040d
1271 #define LF_NESTTYPEEX_V1 0x040e
1272 #define LF_MEMBERMODIFY_V1 0x040f
1274 #define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
1275 #define LF_VBCLASS_V2 0x1401
1276 #define LF_IVBCLASS_V2 0x1402
1277 #define LF_FRIENDFCN_V2 0x1403
1278 #define LF_INDEX_V2 0x1404
1279 #define LF_MEMBER_V2 0x1405
1280 #define LF_STMEMBER_V2 0x1406
1281 #define LF_METHOD_V2 0x1407
1282 #define LF_NESTTYPE_V2 0x1408
1283 #define LF_VFUNCTAB_V2 0x1409
1284 #define LF_FRIENDCLS_V2 0x140a
1285 #define LF_ONEMETHOD_V2 0x140b
1286 #define LF_VFUNCOFF_V2 0x140c
1287 #define LF_NESTTYPEEX_V2 0x140d
1289 #define LF_ENUMERATE_V3 0x1502
1290 #define LF_ARRAY_V3 0x1503
1291 #define LF_CLASS_V3 0x1504
1292 #define LF_STRUCTURE_V3 0x1505
1293 #define LF_UNION_V3 0x1506
1294 #define LF_ENUM_V3 0x1507
1295 #define LF_FRIENDFCN_V3 0x150c
1296 #define LF_MEMBER_V3 0x150d
1297 #define LF_STMEMBER_V3 0x150e
1298 #define LF_METHOD_V3 0x150f
1299 #define LF_NESTTYPE_V3 0x1510
1300 #define LF_ONEMETHOD_V3 0x1511
1301 #define LF_VFTABLE_V3 0x151d
1303 /* leaves found in second type type (aka IPI)
1304 * for simplicity, stored in the same union as other TPI leaves
1306 #define LF_FUNC_ID 0x1601
1307 #define LF_MFUNC_ID 0x1602
1308 #define LF_BUILDINFO 0x1603
1309 #define LF_SUBSTR_LIST 0x1604
1310 #define LF_STRING_ID 0x1605
1311 #define LF_UDT_SRC_LINE 0x1606
1312 #define LF_UDT_MOD_SRC_LINE 0x1607
1314 #define LF_NUMERIC 0x8000 /* numeric leaf types */
1315 #define LF_CHAR 0x8000
1316 #define LF_SHORT 0x8001
1317 #define LF_USHORT 0x8002
1318 #define LF_LONG 0x8003
1319 #define LF_ULONG 0x8004
1320 #define LF_REAL32 0x8005
1321 #define LF_REAL64 0x8006
1322 #define LF_REAL80 0x8007
1323 #define LF_REAL128 0x8008
1324 #define LF_QUADWORD 0x8009
1325 #define LF_UQUADWORD 0x800a
1326 #define LF_REAL48 0x800b
1327 #define LF_COMPLEX32 0x800c
1328 #define LF_COMPLEX64 0x800d
1329 #define LF_COMPLEX80 0x800e
1330 #define LF_COMPLEX128 0x800f
1331 #define LF_VARSTRING 0x8010
1333 /* symtype e.g. for public_vx.symtype */
1334 #define SYMTYPE_NONE 0x0000
1335 #define SYMTYPE_CODE 0x0001
1336 #define SYMTYPE_FUNCTION 0x0002
1337 #define SYMTYPE_MANAGED 0x0004
1338 #define SYMTYPE_MSIL 0x0008
1340 /* ======================================== *
1341 * Symbol information
1342 * ======================================== */
1344 struct cv_addr_range
1346 unsigned int offStart;
1347 unsigned short isectStart;
1348 unsigned short cbRange;
1351 struct cv_addr_gap
1353 unsigned short gapStartOffset;
1354 unsigned short cbRange;
1357 union codeview_symbol
1359 struct
1361 unsigned short int len;
1362 unsigned short int id;
1363 } generic;
1365 struct
1367 unsigned short int len;
1368 unsigned short int id;
1369 unsigned int offset;
1370 unsigned short segment;
1371 cv_typ16_t symtype;
1372 struct p_string p_name;
1373 } data_v1;
1375 struct
1377 unsigned short int len;
1378 unsigned short int id;
1379 cv_typ_t symtype;
1380 unsigned int offset;
1381 unsigned short segment;
1382 struct p_string p_name;
1383 } data_v2;
1385 struct
1387 unsigned short int len;
1388 unsigned short int id;
1389 cv_typ_t symtype;
1390 unsigned int offset;
1391 unsigned short segment;
1392 char name[1];
1393 } data_v3;
1395 struct
1397 unsigned short int len;
1398 unsigned short int id;
1399 unsigned int pparent;
1400 unsigned int pend;
1401 unsigned int next;
1402 unsigned int offset;
1403 unsigned short segment;
1404 unsigned short thunk_len;
1405 unsigned char thtype;
1406 struct p_string p_name;
1407 } thunk_v1;
1409 struct
1411 unsigned short int len;
1412 unsigned short int id;
1413 unsigned int pparent;
1414 unsigned int pend;
1415 unsigned int next;
1416 unsigned int offset;
1417 unsigned short segment;
1418 unsigned short thunk_len;
1419 unsigned char thtype;
1420 char name[1];
1421 } thunk_v3;
1423 struct
1425 unsigned short int len;
1426 unsigned short int id;
1427 unsigned int pparent;
1428 unsigned int pend;
1429 unsigned int next;
1430 unsigned int proc_len;
1431 unsigned int debug_start;
1432 unsigned int debug_end;
1433 unsigned int offset;
1434 unsigned short segment;
1435 cv_typ16_t proctype;
1436 unsigned char flags;
1437 struct p_string p_name;
1438 } proc_v1;
1440 struct
1442 unsigned short int len;
1443 unsigned short int id;
1444 unsigned int pparent;
1445 unsigned int pend;
1446 unsigned int next;
1447 unsigned int proc_len;
1448 unsigned int debug_start;
1449 unsigned int debug_end;
1450 cv_typ_t proctype;
1451 unsigned int offset;
1452 unsigned short segment;
1453 unsigned char flags;
1454 struct p_string p_name;
1455 } proc_v2;
1457 struct
1459 unsigned short int len;
1460 unsigned short int id;
1461 unsigned int pparent;
1462 unsigned int pend;
1463 unsigned int next;
1464 unsigned int proc_len;
1465 unsigned int debug_start;
1466 unsigned int debug_end;
1467 cv_typ_t proctype;
1468 unsigned int offset;
1469 unsigned short segment;
1470 unsigned char flags;
1471 char name[1];
1472 } proc_v3;
1474 struct
1476 unsigned short int len;
1477 unsigned short int id;
1478 unsigned int offset;
1479 unsigned short segment;
1480 unsigned short pubsymflags;
1481 struct p_string p_name;
1482 } public_v1;
1484 struct
1486 unsigned short int len;
1487 unsigned short int id;
1488 unsigned int pubsymflags;
1489 unsigned int offset;
1490 unsigned short segment;
1491 struct p_string p_name;
1492 } public_v2;
1494 struct
1496 unsigned short int len;
1497 unsigned short int id;
1498 unsigned int pubsymflags;
1499 unsigned int offset;
1500 unsigned short segment;
1501 char name[1];
1502 } public_v3;
1504 struct
1506 unsigned short int len;
1507 unsigned short int id; /* Always S_BPREL32_16t */
1508 unsigned int offset; /* Stack offset relative to BP */
1509 cv_typ16_t symtype;
1510 struct p_string p_name;
1511 } stack_v1;
1513 struct
1515 unsigned short int len;
1516 unsigned short int id; /* Always S_BPREL32_ST */
1517 unsigned int offset; /* Stack offset relative to EBP */
1518 cv_typ_t symtype;
1519 struct p_string p_name;
1520 } stack_v2;
1522 struct
1524 unsigned short int len;
1525 unsigned short int id; /* Always S_BPREL32 */
1526 int offset; /* Stack offset relative to BP */
1527 cv_typ_t symtype;
1528 char name[1];
1529 } stack_v3;
1531 struct
1533 unsigned short int len;
1534 unsigned short int id; /* Always S_BPREL32 */
1535 int offset; /* Stack offset relative to BP */
1536 cv_typ_t symtype;
1537 unsigned short reg;
1538 char name[1];
1539 } regrel_v3;
1541 struct
1543 unsigned short int len;
1544 unsigned short int id; /* Always S_REGISTER */
1545 cv_typ16_t type;
1546 unsigned short reg;
1547 struct p_string p_name;
1548 /* don't handle register tracking */
1549 } register_v1;
1551 struct
1553 unsigned short int len;
1554 unsigned short int id; /* Always S_REGISTER_ST */
1555 cv_typ_t type; /* check whether type & reg are correct */
1556 unsigned short reg;
1557 struct p_string p_name;
1558 /* don't handle register tracking */
1559 } register_v2;
1561 struct
1563 unsigned short int len;
1564 unsigned short int id; /* Always S_REGISTER */
1565 cv_typ_t type; /* check whether type & reg are correct */
1566 unsigned short reg;
1567 char name[1];
1568 /* don't handle register tracking */
1569 } register_v3;
1571 struct
1573 unsigned short int len;
1574 unsigned short int id;
1575 unsigned int parent;
1576 unsigned int end;
1577 unsigned int length;
1578 unsigned int offset;
1579 unsigned short segment;
1580 struct p_string p_name;
1581 } block_v1;
1583 struct
1585 unsigned short int len;
1586 unsigned short int id;
1587 unsigned int parent;
1588 unsigned int end;
1589 unsigned int length;
1590 unsigned int offset;
1591 unsigned short segment;
1592 char name[1];
1593 } block_v3;
1595 struct
1597 unsigned short int len;
1598 unsigned short int id;
1599 unsigned short trampType; /* 0: incremental, 1: branchisland */
1600 unsigned short cbThunk;
1601 unsigned int offThunk;
1602 unsigned int offTarget;
1603 unsigned short sectThunk;
1604 unsigned short sectTarget;
1605 } trampoline_v3;
1607 struct
1609 unsigned short int len;
1610 unsigned short int id;
1611 unsigned int offset;
1612 unsigned short segment;
1613 unsigned char flags;
1614 struct p_string p_name;
1615 } label_v1;
1617 struct
1619 unsigned short int len;
1620 unsigned short int id;
1621 unsigned int offset;
1622 unsigned short segment;
1623 unsigned char flags;
1624 char name[1];
1625 } label_v3;
1627 struct
1629 unsigned short int len;
1630 unsigned short int id;
1631 cv_typ16_t type;
1632 unsigned short cvalue; /* numeric leaf */
1633 #if 0
1634 struct p_string p_name;
1635 #endif
1636 } constant_v1;
1638 struct
1640 unsigned short int len;
1641 unsigned short int id;
1642 cv_typ_t type;
1643 unsigned short cvalue; /* numeric leaf */
1644 #if 0
1645 struct p_string p_name;
1646 #endif
1647 } constant_v2;
1649 struct
1651 unsigned short int len;
1652 unsigned short int id;
1653 cv_typ_t type;
1654 unsigned short cvalue;
1655 #if 0
1656 char name[1];
1657 #endif
1658 } constant_v3;
1660 struct
1662 unsigned short int len;
1663 unsigned short int id;
1664 cv_typ16_t type;
1665 struct p_string p_name;
1666 } udt_v1;
1668 struct
1670 unsigned short int len;
1671 unsigned short int id;
1672 cv_typ_t type;
1673 struct p_string p_name;
1674 } udt_v2;
1676 struct
1678 unsigned short int len;
1679 unsigned short int id;
1680 cv_typ_t type;
1681 char name[1];
1682 } udt_v3;
1684 struct
1686 unsigned short int len;
1687 unsigned short int id;
1688 unsigned signature;
1689 struct p_string p_name;
1690 } objname_v1;
1692 struct
1694 unsigned short int len;
1695 unsigned short int id;
1696 unsigned signature;
1697 char name[1];
1698 } objname_v3;
1700 struct
1702 unsigned short int len;
1703 unsigned short int id;
1704 unsigned char machine;
1705 struct
1707 unsigned char language : 8;
1708 unsigned char _dome : 8; /* other missing fields */
1709 unsigned char pad : 8;
1710 } flags;
1711 struct p_string p_name;
1712 } compile_v1;
1714 struct
1716 unsigned short int len;
1717 unsigned short int id;
1718 struct {
1719 unsigned int iLanguage : 8;
1720 unsigned int _dome : 9; /* other missing fields */
1721 unsigned int pad : 15;
1722 } flags;
1723 unsigned short machine;
1724 unsigned short fe_major;
1725 unsigned short fe_minor;
1726 unsigned short fe_build;
1727 unsigned short be_major;
1728 unsigned short be_minor;
1729 unsigned short be_build;
1730 struct p_string p_name;
1731 } compile2_v2;
1733 struct
1735 unsigned short int len;
1736 unsigned short int id;
1737 struct {
1738 unsigned int iLanguage : 8;
1739 unsigned int _dome : 9; /* other missing fields */
1740 unsigned int pad : 15;
1741 } flags;
1742 unsigned short machine;
1743 unsigned short fe_major;
1744 unsigned short fe_minor;
1745 unsigned short fe_build;
1746 unsigned short be_major;
1747 unsigned short be_minor;
1748 unsigned short be_build;
1749 char name[1];
1750 } compile2_v3;
1752 struct
1754 unsigned short int len;
1755 unsigned short int id;
1756 struct {
1757 unsigned int iLanguage : 8;
1758 unsigned int _dome : 12; /* other missing fields */
1759 unsigned int pad : 12;
1760 } flags;
1761 unsigned short machine;
1762 unsigned short fe_major;
1763 unsigned short fe_minor;
1764 unsigned short fe_build;
1765 unsigned short fe_qfe;
1766 unsigned short be_major;
1767 unsigned short be_minor;
1768 unsigned short be_build;
1769 unsigned short be_qfe;
1770 char name[1];
1771 } compile3_v3;
1773 struct
1775 unsigned short int len;
1776 unsigned short int id;
1777 unsigned int offset;
1778 unsigned short segment;
1779 cv_typ16_t symtype;
1780 struct p_string p_name;
1781 } thread_v1;
1783 struct
1785 unsigned short int len;
1786 unsigned short int id;
1787 cv_typ_t symtype;
1788 unsigned int offset;
1789 unsigned short segment;
1790 struct p_string p_name;
1791 } thread_v2;
1793 struct
1795 unsigned short int len;
1796 unsigned short int id;
1797 cv_typ_t symtype;
1798 unsigned int offset;
1799 unsigned short segment;
1800 char name[1];
1801 } thread_v3;
1803 struct
1805 unsigned short int len;
1806 unsigned short int id;
1807 unsigned int sumName;
1808 unsigned int ibSym;
1809 unsigned short imod;
1810 char name[1];
1811 } refsym2_v3;
1813 struct
1815 unsigned short int len;
1816 unsigned short int id;
1817 unsigned int offset;
1818 unsigned short segment;
1819 } ssearch_v1;
1821 struct
1823 unsigned short int len;
1824 unsigned short int id;
1825 unsigned int offset;
1826 unsigned int unknown;
1827 } security_cookie_v3;
1829 struct
1831 unsigned short int len;
1832 unsigned short int id;
1833 unsigned int sz_frame; /* size of frame */
1834 unsigned int unknown2;
1835 unsigned int unknown3;
1836 unsigned int sz_saved_regs; /* size of saved registers from callee */
1837 unsigned int eh_offset; /* offset for exception handler */
1838 unsigned short eh_sect; /* section for exception handler */
1839 unsigned int flags;
1840 } frame_info_v2;
1842 struct
1844 unsigned short int len;
1845 unsigned short int id;
1846 unsigned int offset;
1847 unsigned short sect_idx;
1848 unsigned short inst_len;
1849 cv_typ_t index;
1850 } heap_alloc_site_v3;
1852 struct
1854 unsigned short int len;
1855 unsigned short int id;
1856 cv_typ_t symtype;
1857 unsigned short varflags;
1858 char name[1];
1859 } local_v3;
1861 struct
1863 unsigned short int len;
1864 unsigned short int id;
1865 unsigned int program;
1866 struct cv_addr_range range;
1867 struct cv_addr_gap gaps[0];
1868 } defrange_v3;
1870 struct
1872 unsigned short int len;
1873 unsigned short int id;
1874 unsigned int program;
1875 unsigned int offParent;
1876 struct cv_addr_range range;
1877 struct cv_addr_gap gaps[0];
1878 } defrange_subfield_v3;
1880 struct
1882 unsigned short int len;
1883 unsigned short int id;
1884 unsigned short reg;
1885 unsigned short attr;
1886 struct cv_addr_range range;
1887 struct cv_addr_gap gaps[0];
1888 } defrange_register_v3;
1890 struct
1892 unsigned short int len;
1893 unsigned short int id;
1894 int offFramePointer;
1895 struct cv_addr_range range;
1896 struct cv_addr_gap gaps[0];
1897 } defrange_frameptrrel_v3;
1899 struct
1901 unsigned short int len;
1902 unsigned short int id;
1903 int offFramePointer;
1904 } defrange_frameptr_relfullscope_v3;
1906 struct
1908 unsigned short int len;
1909 unsigned short int id;
1910 unsigned short reg;
1911 unsigned short attr;
1912 unsigned int offParent : 12;
1913 unsigned int padding : 20;
1914 struct cv_addr_range range;
1915 struct cv_addr_gap gaps[0];
1916 } defrange_subfield_register_v3;
1918 struct
1920 unsigned short int len;
1921 unsigned short int id;
1922 unsigned short baseReg;
1923 unsigned short spilledUdtMember : 1;
1924 unsigned short padding : 3;
1925 unsigned short offsetParent : 12;
1926 int offBasePointer;
1927 struct cv_addr_range range;
1928 struct cv_addr_gap gaps[0];
1929 } defrange_registerrel_v3;
1931 struct
1933 unsigned short int len;
1934 unsigned short int id;
1935 cv_itemid_t itemid;
1936 } build_info_v3;
1938 struct
1940 unsigned short int len;
1941 unsigned short int id;
1942 unsigned int pParent;
1943 unsigned int pEnd;
1944 cv_itemid_t inlinee;
1945 unsigned char binaryAnnotations[0];
1946 } inline_site_v3;
1948 struct
1950 unsigned short int len;
1951 unsigned short int typ;
1952 unsigned int off;
1953 unsigned short sect;
1954 unsigned short _pad0;
1955 cv_typ_t typind;
1956 } callsiteinfo_v3;
1958 struct
1960 unsigned short int len;
1961 unsigned short int id;
1962 unsigned int pParent;
1963 unsigned int pEnd;
1964 cv_itemid_t inlinee;
1965 unsigned int invocations;
1966 unsigned char binaryAnnotations[0];
1967 } inline_site2_v3;
1969 struct
1971 unsigned short int len;
1972 unsigned short int id;
1973 unsigned int count;
1974 cv_typ_t funcs[0]; /* array of cuntions, count entries */
1975 #if 0
1976 unsigned int invocations[0]; /* array of count entries, paires with funcs */
1977 #endif
1978 } function_list_v3;
1980 struct
1982 unsigned short int len;
1983 unsigned short int id;
1984 cv_typ_t typind;
1985 unsigned int modOffset;
1986 unsigned short varflags;
1987 char name[1];
1988 } file_static_v3;
1990 struct
1992 unsigned short int len;
1993 unsigned short int id;
1994 struct p_string pname;
1995 } unamespace_v2;
1997 struct
1999 unsigned short int len;
2000 unsigned short int id;
2001 char name[1];
2002 } unamespace_v3;
2004 struct
2006 unsigned short int len;
2007 unsigned short int id;
2008 unsigned int pParent;
2009 unsigned int pEnd;
2010 unsigned int length;
2011 unsigned int scf; /* CV_SEPCODEFLAGS */
2012 unsigned int off;
2013 unsigned int offParent;
2014 unsigned short int sect;
2015 unsigned short int sectParent;
2016 } sepcode_v3;
2018 struct
2020 unsigned short int len;
2021 unsigned short int id;
2022 unsigned int off;
2023 unsigned short int seg;
2024 unsigned short int csz; /* number of bytes in following array */
2025 char rgsz[1]; /* array of null terminated strings (bounded by csz) */
2026 } annotation_v3;
2028 struct
2030 unsigned short int len;
2031 unsigned short int id;
2032 unsigned int invocations;
2033 __int64 dynCount;
2034 unsigned numInstrs;
2035 unsigned staInstLive;
2036 } pogoinfo_v3;
2039 enum BinaryAnnotationOpcode
2041 BA_OP_Invalid,
2042 BA_OP_CodeOffset,
2043 BA_OP_ChangeCodeOffsetBase,
2044 BA_OP_ChangeCodeOffset,
2045 BA_OP_ChangeCodeLength,
2046 BA_OP_ChangeFile,
2047 BA_OP_ChangeLineOffset,
2048 BA_OP_ChangeLineEndDelta,
2049 BA_OP_ChangeRangeKind,
2050 BA_OP_ChangeColumnStart,
2051 BA_OP_ChangeColumnEndDelta,
2052 BA_OP_ChangeCodeOffsetAndLineOffset,
2053 BA_OP_ChangeCodeLengthAndCodeOffset,
2054 BA_OP_ChangeColumnEnd,
2057 #define S_COMPILE 0x0001
2058 #define S_REGISTER_16t 0x0002
2059 #define S_CONSTANT_16t 0x0003
2060 #define S_UDT_16t 0x0004
2061 #define S_SSEARCH 0x0005
2062 #define S_END 0x0006
2063 #define S_SKIP 0x0007
2064 #define S_CVRESERVE 0x0008
2065 #define S_OBJNAME_ST 0x0009
2066 #define S_ENDARG 0x000a
2067 #define S_COBOLUDT_16t 0x000b
2068 #define S_MANYREG_16t 0x000c
2069 #define S_RETURN 0x000d
2070 #define S_ENTRYTHIS 0x000e
2072 #define S_BPREL32_16t 0x0200
2073 #define S_LDATA32_16t 0x0201
2074 #define S_GDATA32_16t 0x0202
2075 #define S_PUB32_16t 0x0203
2076 #define S_LPROC32_16t 0x0204
2077 #define S_GPROC32_16t 0x0205
2078 #define S_THUNK32_ST 0x0206
2079 #define S_BLOCK32_ST 0x0207
2080 #define S_WITH32_ST 0x0208
2081 #define S_LABEL32_ST 0x0209
2082 #define S_CEXMODEL32 0x020a
2083 #define S_VFTABLE32_16t 0x020b
2084 #define S_REGREL32_16t 0x020c
2085 #define S_LTHREAD32_16t 0x020d
2086 #define S_GTHREAD32_16t 0x020e
2088 #define S_PROCREF_ST 0x0400
2089 #define S_DATAREF_ST 0x0401
2090 #define S_ALIGN 0x0402
2091 #define S_LPROCREF_ST 0x0403
2093 #define S_REGISTER_ST 0x1001 /* Variants with new 32-bit type indices */
2094 #define S_CONSTANT_ST 0x1002
2095 #define S_UDT_ST 0x1003
2096 #define S_COBOLUDT_ST 0x1004
2097 #define S_MANYREG_ST 0x1005
2098 #define S_BPREL32_ST 0x1006
2099 #define S_LDATA32_ST 0x1007
2100 #define S_GDATA32_ST 0x1008
2101 #define S_PUB32_ST 0x1009
2102 #define S_LPROC32_ST 0x100a
2103 #define S_GPROC32_ST 0x100b
2104 #define S_VFTABLE32 0x100c
2105 #define S_REGREL32_ST 0x100d
2106 #define S_LTHREAD32_ST 0x100e
2107 #define S_GTHREAD32_ST 0x100f
2108 #define S_FRAMEPROC 0x1012
2109 #define S_COMPILE2_ST 0x1013
2110 #define S_ANNOTATION 0x1019
2111 #define S_UNAMESPACE_ST 0x1029
2113 #define S_OBJNAME 0x1101
2114 #define S_THUNK32 0x1102
2115 #define S_BLOCK32 0x1103
2116 #define S_WITH32 0x1104
2117 #define S_LABEL32 0x1105
2118 #define S_REGISTER 0x1106
2119 #define S_CONSTANT 0x1107
2120 #define S_UDT 0x1108
2121 #define S_COBOLUDT 0x1109
2122 #define S_MANYREG 0x110A
2123 #define S_BPREL32 0x110B
2124 #define S_LDATA32 0x110C
2125 #define S_GDATA32 0x110D
2126 #define S_PUB32 0x110E
2127 #define S_LPROC32 0x110F
2128 #define S_GPROC32 0x1110
2129 #define S_REGREL32 0x1111
2130 #define S_LTHREAD32 0x1112
2131 #define S_GTHREAD32 0x1113
2132 #define S_LPROCMIPS 0x1114
2133 #define S_GPROCMIPS 0x1115
2134 #define S_COMPILE2 0x1116 /* compiler command line options and build information */
2135 #define S_MANYREG2 0x1117
2136 #define S_LPROCIA64 0x1118
2137 #define S_GPROCIA64 0x1119
2138 #define S_LOCALSLOT 0x111A
2139 #define S_PARAMSLOT 0x111B
2140 #define S_LMANDATA 0x111C
2141 #define S_GMANDATA 0x111D
2142 #define S_MANFRAMEREL 0x111E
2143 #define S_MANREGISTER 0x111F
2144 #define S_MANSLOT 0x1120
2145 #define S_MANMANYREG 0x1121
2146 #define S_MANREGREL 0x1122
2147 #define S_MANMANYREG2 0x1123
2148 #define S_UNAMESPACE 0x1124
2149 #define S_PROCREF 0x1125 /* didn't get the difference between the two */
2150 #define S_DATAREF 0x1126
2151 #define S_LPROCREF 0x1127
2152 #define S_ANNOTATIONREF 0x1128
2153 #define S_TOKENREF 0x1129
2154 #define S_GMANPROC 0x112A
2155 #define S_LMANPROC 0x112B
2156 #define S_TRAMPOLINE 0x112C
2157 #define S_MANCONSTANT 0x112D
2158 #define S_ATTR_FRAMEREL 0x112E
2159 #define S_ATTR_REGISTER 0x112F
2160 #define S_ATTR_REGREL 0x1130
2161 #define S_ATTR_MANYREG 0x1131
2162 #define S_SEPCODE 0x1132
2163 #define S_LOCAL_2005 0x1133
2164 #define S_DEFRANGE_2005 0x1134
2165 #define S_DEFRANGE2_2005 0x1135
2166 #define S_SECTION 0x1136
2167 #define S_COFFGROUP 0x1137
2168 #define S_EXPORT 0x1138
2169 #define S_CALLSITEINFO 0x1139
2170 #define S_FRAMECOOKIE 0x113A
2171 #define S_DISCARDED 0x113B
2172 #define S_COMPILE3 0x113C
2173 #define S_ENVBLOCK 0x113D
2175 #define S_LOCAL 0x113E
2176 #define S_DEFRANGE 0x113F
2177 #define S_DEFRANGE_SUBFIELD 0x1140
2178 #define S_DEFRANGE_REGISTER 0x1141
2179 #define S_DEFRANGE_FRAMEPOINTER_REL 0x1142
2180 #define S_DEFRANGE_SUBFIELD_REGISTER 0x1143
2181 #define S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE 0x1144
2182 #define S_DEFRANGE_REGISTER_REL 0x1145
2183 #define S_LPROC32_ID 0x1146
2184 #define S_GPROC32_ID 0x1147
2185 #define S_LPROCMIPS_ID 0x1148
2186 #define S_GPROCMIPS_ID 0x1149
2187 #define S_LPROCIA64_ID 0x114A
2188 #define S_GPROCIA64_ID 0x114B
2189 #define S_BUILDINFO 0x114C
2190 #define S_INLINESITE 0x114D
2191 #define S_INLINESITE_END 0x114E
2192 #define S_PROC_ID_END 0x114F
2193 #define S_DEFRANGE_HLSL 0x1150
2194 #define S_GDATA_HLSL 0x1151
2195 #define S_LDATA_HLSL 0x1152
2197 #define S_FILESTATIC 0x1153
2198 #define S_ARMSWITCHTABLE 0x1159
2199 #define S_CALLEES 0x115A
2200 #define S_CALLERS 0x115B
2201 #define S_POGODATA 0x115C
2202 #define S_INLINESITE2 0x115D
2203 #define S_HEAPALLOCSITE 0x115E
2204 #define S_MOD_TYPEREF 0x115F
2205 #define S_REF_MINIPDB 0x1160
2206 #define S_PDBMAP 0x1161
2207 #define S_GDATA_HLSL32 0x1162
2208 #define S_LDATA_HLSL32 0x1163
2209 #define S_GDATA_HLSL32_EX 0x1164
2210 #define S_LDATA_HLSL32_EX 0x1165
2212 /* not documented yet on MS CV github repo, but that's how LLVM calls it */
2213 #define S_INLINEES 0x1168
2215 /* ======================================== *
2216 * Line number information
2217 * ======================================== */
2219 enum DEBUG_S_SUBSECTION_TYPE
2221 DEBUG_S_IGNORE = 0x80000000, /* bit flag: when set, ignore whole subsection content */
2223 DEBUG_S_SYMBOLS = 0xf1,
2224 DEBUG_S_LINES,
2225 DEBUG_S_STRINGTABLE,
2226 DEBUG_S_FILECHKSMS,
2227 DEBUG_S_FRAMEDATA,
2228 DEBUG_S_INLINEELINES,
2229 DEBUG_S_CROSSSCOPEIMPORTS,
2230 DEBUG_S_CROSSSCOPEEXPORTS,
2232 DEBUG_S_IL_LINES,
2233 DEBUG_S_FUNC_MDTOKEN_MAP,
2234 DEBUG_S_TYPE_MDTOKEN_MAP,
2235 DEBUG_S_MERGED_ASSEMBLYINPUT,
2237 DEBUG_S_COFF_SYMBOL_RVA,
2240 struct CV_DebugSSubsectionHeader_t
2242 enum DEBUG_S_SUBSECTION_TYPE type;
2243 unsigned cbLen;
2246 struct CV_DebugSLinesHeader_t
2248 unsigned offCon;
2249 unsigned short segCon;
2250 unsigned short flags;
2251 unsigned cbCon;
2254 struct CV_DebugSLinesFileBlockHeader_t
2256 unsigned offFile;
2257 unsigned nLines;
2258 unsigned cbBlock;
2259 /* followed by two variable length arrays
2260 * CV_Line_t lines[nLines];
2261 * ^ columns present when CV_DebugSLinesHeader_t.flags has CV_LINES_HAVE_COLUMNS set
2262 * CV_Column_t columns[nLines];
2266 #define CV_LINES_HAVE_COLUMNS 0x0001
2268 struct CV_Line_t
2270 unsigned offset;
2271 unsigned linenumStart:24;
2272 unsigned deltaLineEnd:7;
2273 unsigned fStatement:1;
2276 struct CV_Column_t
2278 unsigned short offColumnStart;
2279 unsigned short offColumnEnd;
2282 struct CV_Checksum_t /* this one is not defined in microsoft pdb information */
2284 unsigned strOffset; /* offset in string table for filename */
2285 unsigned char size; /* size of checksum */
2286 unsigned char method; /* method used to compute check sum */
2287 unsigned char checksum[0]; /* (size) bytes */
2288 /* result is padded on 4-byte boundary */
2291 #define CV_INLINEE_SOURCE_LINE_SIGNATURE 0x0
2292 #define CV_INLINEE_SOURCE_LINE_SIGNATURE_EX 0x1
2294 typedef struct CV_InlineeSourceLine_t
2296 cv_itemid_t inlinee; /* function id */
2297 unsigned fileId; /* offset in DEBUG_S_FILECHKSMS */
2298 unsigned sourceLineNum; /* first line number */
2299 } InlineeSourceLine;
2301 typedef struct CV_InlineeSourceLineEx_t
2303 cv_itemid_t inlinee; /* function id */
2304 unsigned fileId; /* offset in DEBUG_S_FILECHKSMS */
2305 unsigned sourceLineNum; /* first line number */
2306 unsigned int countOfExtraFiles;
2307 unsigned extraFileId[0];
2308 } InlineeSourceLineEx;
2310 #ifdef __WINESRC__
2311 /* those are Wine only helpers */
2312 /* align ptr on sz boundary; sz must be a power of 2 */
2313 #define CV_ALIGN(ptr, sz) ((const void*)(((DWORD_PTR)(ptr) + ((sz) - 1)) & ~((sz) - 1)))
2314 /* move after (ptr) record */
2315 #define CV_RECORD_AFTER(ptr) ((const void*)((ptr) + 1))
2316 /* move after (ptr) record and a gap of sz bytes */
2317 #define CV_RECORD_GAP(ptr, sz) ((const void*)((const char*)((ptr) + 1) + (sz)))
2318 /* test whether ptr record is within limit boundary */
2319 #define CV_IS_INSIDE(ptr, limit) (CV_RECORD_AFTER(ptr) <= (const void*)(limit))
2320 #endif /* __WINESRC__ */
2322 struct codeview_linetab_block
2324 unsigned short seg;
2325 unsigned short num_lines;
2326 unsigned int offsets[1]; /* in fact num_lines */
2327 /* unsigned short linenos[]; */
2330 struct startend
2332 unsigned int start;
2333 unsigned int end;
2336 /* ======================================== *
2337 * PDB file information
2338 * ======================================== */
2341 struct PDB_FILE
2343 unsigned int size;
2344 unsigned int unknown;
2347 struct PDB_JG_HEADER
2349 char ident[40];
2350 unsigned int signature;
2351 unsigned int block_size;
2352 unsigned short free_list;
2353 unsigned short total_alloc;
2354 struct PDB_FILE toc;
2355 unsigned short toc_block[1];
2358 struct PDB_DS_HEADER
2360 char signature[32];
2361 unsigned int block_size;
2362 unsigned int unknown1;
2363 unsigned int num_pages;
2364 unsigned int toc_size;
2365 unsigned int unknown2;
2366 unsigned int toc_page;
2369 struct PDB_JG_TOC
2371 unsigned int num_files;
2372 struct PDB_FILE file[1];
2375 struct PDB_DS_TOC
2377 unsigned int num_files;
2378 unsigned int file_size[1];
2381 struct PDB_JG_ROOT
2383 unsigned int Version;
2384 unsigned int TimeDateStamp;
2385 unsigned int Age;
2386 unsigned int cbNames;
2387 char names[1];
2390 struct PDB_DS_ROOT
2392 unsigned int Version;
2393 unsigned int TimeDateStamp;
2394 unsigned int Age;
2395 GUID guid;
2396 unsigned int cbNames;
2397 char names[1];
2400 typedef struct _PDB_TYPES_OLD
2402 unsigned int version;
2403 unsigned short first_index;
2404 unsigned short last_index;
2405 unsigned int type_size;
2406 unsigned short file;
2407 unsigned short pad;
2408 } PDB_TYPES_OLD, *PPDB_TYPES_OLD;
2410 typedef struct _PDB_TYPES
2412 unsigned int version;
2413 unsigned int type_offset;
2414 unsigned int first_index;
2415 unsigned int last_index;
2416 unsigned int type_size;
2417 unsigned short file;
2418 unsigned short pad;
2419 unsigned int hash_size;
2420 unsigned int hash_base;
2421 unsigned int hash_offset;
2422 unsigned int hash_len;
2423 unsigned int search_offset;
2424 unsigned int search_len;
2425 unsigned int unknown_offset;
2426 unsigned int unknown_len;
2427 } PDB_TYPES, *PPDB_TYPES;
2429 typedef struct _PDB_SYMBOL_RANGE
2431 unsigned short segment;
2432 unsigned short pad1;
2433 unsigned int offset;
2434 unsigned int size;
2435 unsigned int characteristics;
2436 unsigned short index;
2437 unsigned short pad2;
2438 } PDB_SYMBOL_RANGE, *PPDB_SYMBOL_RANGE;
2440 typedef struct _PDB_SYMBOL_RANGE_EX
2442 unsigned short segment;
2443 unsigned short pad1;
2444 unsigned int offset;
2445 unsigned int size;
2446 unsigned int characteristics;
2447 unsigned short index;
2448 unsigned short pad2;
2449 unsigned int timestamp;
2450 unsigned int unknown;
2451 } PDB_SYMBOL_RANGE_EX, *PPDB_SYMBOL_RANGE_EX;
2453 typedef struct _PDB_SYMBOL_FILE
2455 unsigned int unknown1;
2456 PDB_SYMBOL_RANGE range;
2457 unsigned short flag;
2458 unsigned short file;
2459 unsigned int symbol_size;
2460 unsigned int lineno_size;
2461 unsigned int lineno2_size;
2462 unsigned int nSrcFiles;
2463 unsigned int attribute;
2464 char filename[1];
2465 } PDB_SYMBOL_FILE, *PPDB_SYMBOL_FILE;
2467 typedef struct _PDB_SYMBOL_FILE_EX
2469 unsigned int unknown1;
2470 PDB_SYMBOL_RANGE_EX range;
2471 unsigned short flag;
2472 unsigned short file;
2473 unsigned int symbol_size;
2474 unsigned int lineno_size;
2475 unsigned int lineno2_size;
2476 unsigned int nSrcFiles;
2477 unsigned int attribute;
2478 unsigned int reserved[2];
2479 char filename[1];
2480 } PDB_SYMBOL_FILE_EX, *PPDB_SYMBOL_FILE_EX;
2482 typedef struct _PDB_SYMBOL_SOURCE
2484 unsigned short nModules;
2485 unsigned short nSrcFiles;
2486 unsigned short table[1];
2487 } PDB_SYMBOL_SOURCE, *PPDB_SYMBOL_SOURCE;
2489 typedef struct _PDB_SYMBOL_IMPORT
2491 unsigned int unknown1;
2492 unsigned int unknown2;
2493 unsigned int TimeDateStamp;
2494 unsigned int Age;
2495 char filename[1];
2496 } PDB_SYMBOL_IMPORT, *PPDB_SYMBOL_IMPORT;
2498 typedef struct _PDB_SYMBOLS_OLD
2500 unsigned short global_file;
2501 unsigned short public_file;
2502 unsigned short gsym_file;
2503 unsigned short pad;
2504 unsigned int module_size;
2505 unsigned int offset_size;
2506 unsigned int hash_size;
2507 unsigned int srcmodule_size;
2508 } PDB_SYMBOLS_OLD, *PPDB_SYMBOLS_OLD;
2510 typedef struct _PDB_SYMBOLS
2512 unsigned int signature;
2513 unsigned int version;
2514 unsigned int age;
2515 unsigned short global_file;
2516 unsigned short flags;
2517 unsigned short public_file;
2518 unsigned short bldVer;
2519 unsigned short gsym_file;
2520 unsigned short rbldVer;
2521 unsigned int module_size;
2522 unsigned int offset_size;
2523 unsigned int hash_size;
2524 unsigned int srcmodule_size;
2525 unsigned int pdbimport_size;
2526 unsigned int resvd0;
2527 unsigned int stream_index_size;
2528 unsigned int unknown2_size;
2529 unsigned short resvd3;
2530 unsigned short machine;
2531 unsigned int resvd4;
2532 } PDB_SYMBOLS, *PPDB_SYMBOLS;
2534 typedef struct
2536 unsigned short FPO;
2537 unsigned short unk0;
2538 unsigned short unk1;
2539 unsigned short unk2;
2540 unsigned short unk3;
2541 unsigned short segments;
2542 } PDB_STREAM_INDEXES_OLD;
2544 typedef struct
2546 unsigned short FPO;
2547 unsigned short unk0;
2548 unsigned short unk1;
2549 unsigned short unk2;
2550 unsigned short unk3;
2551 unsigned short segments;
2552 unsigned short unk4;
2553 unsigned short unk5;
2554 unsigned short unk6;
2555 unsigned short FPO_EXT;
2556 unsigned short unk7;
2557 } PDB_STREAM_INDEXES;
2559 typedef struct _PDB_FPO_DATA
2561 unsigned int start;
2562 unsigned int func_size;
2563 unsigned int locals_size;
2564 unsigned int params_size;
2565 unsigned int maxstack_size;
2566 unsigned int str_offset;
2567 unsigned short prolog_size;
2568 unsigned short savedregs_size;
2569 #define PDB_FPO_DFL_SEH 0x00000001
2570 #define PDB_FPO_DFL_EH 0x00000002
2571 #define PDB_FPO_DFL_IN_BLOCK 0x00000004
2572 unsigned int flags;
2573 } PDB_FPO_DATA;
2575 #include "poppack.h"
2577 /* ===================================================
2578 * The old CodeView stuff (for NB09 and NB11)
2579 * =================================================== */
2581 #define sstModule 0x120
2582 #define sstTypes 0x121
2583 #define sstPublic 0x122
2584 #define sstPublicSym 0x123
2585 #define sstSymbols 0x124
2586 #define sstAlignSym 0x125
2587 #define sstSrcLnSeg 0x126
2588 #define sstSrcModule 0x127
2589 #define sstLibraries 0x128
2590 #define sstGlobalSym 0x129
2591 #define sstGlobalPub 0x12a
2592 #define sstGlobalTypes 0x12b
2593 #define sstMPC 0x12c
2594 #define sstSegMap 0x12d
2595 #define sstSegName 0x12e
2596 #define sstPreComp 0x12f
2597 #define sstFileIndex 0x133
2598 #define sstStaticSym 0x134
2600 /* overall structure information */
2601 typedef struct OMFSignature
2603 char Signature[4];
2604 int filepos;
2605 } OMFSignature;
2607 typedef struct OMFSignatureRSDS
2609 char Signature[4];
2610 GUID guid;
2611 unsigned int age;
2612 char name[1];
2613 } OMFSignatureRSDS;
2615 typedef struct _CODEVIEW_PDB_DATA
2617 char Signature[4];
2618 int filepos;
2619 unsigned int timestamp;
2620 unsigned int age;
2621 char name[1];
2622 } CODEVIEW_PDB_DATA, *PCODEVIEW_PDB_DATA;
2624 typedef struct OMFDirHeader
2626 unsigned short cbDirHeader;
2627 unsigned short cbDirEntry;
2628 unsigned int cDir;
2629 unsigned int lfoNextDir;
2630 unsigned int flags;
2631 } OMFDirHeader;
2633 typedef struct OMFDirEntry
2635 unsigned short SubSection;
2636 unsigned short iMod;
2637 unsigned int lfo;
2638 unsigned int cb;
2639 } OMFDirEntry;
2641 /* sstModule subsection */
2643 typedef struct OMFSegDesc
2645 unsigned short Seg;
2646 unsigned short pad;
2647 unsigned int Off;
2648 unsigned int cbSeg;
2649 } OMFSegDesc;
2651 typedef struct OMFModule
2653 unsigned short ovlNumber;
2654 unsigned short iLib;
2655 unsigned short cSeg;
2656 char Style[2];
2658 OMFSegDesc SegInfo[cSeg];
2659 p_string Name;
2661 } OMFModule;
2663 typedef struct OMFGlobalTypes
2665 unsigned int flags;
2666 unsigned int cTypes;
2668 unsigned int offset[cTypes];
2669 types_record[];
2671 } OMFGlobalTypes;
2673 /* sstGlobalPub section */
2675 /* Header for symbol table */
2676 typedef struct OMFSymHash
2678 unsigned short symhash;
2679 unsigned short addrhash;
2680 unsigned int cbSymbol;
2681 unsigned int cbHSym;
2682 unsigned int cbHAddr;
2683 } OMFSymHash;
2685 /* sstSegMap section */
2687 typedef struct OMFSegMapDesc
2689 unsigned short flags;
2690 unsigned short ovl;
2691 unsigned short group;
2692 unsigned short frame;
2693 unsigned short iSegName;
2694 unsigned short iClassName;
2695 unsigned int offset;
2696 unsigned int cbSeg;
2697 } OMFSegMapDesc;
2699 typedef struct OMFSegMap
2701 unsigned short cSeg;
2702 unsigned short cSegLog;
2703 /* OMFSegMapDesc rgDesc[0];*/
2704 } OMFSegMap;
2707 /* sstSrcModule section */
2709 typedef struct OMFSourceLine
2711 unsigned short Seg;
2712 unsigned short cLnOff;
2713 unsigned int offset[1];
2714 unsigned short lineNbr[1];
2715 } OMFSourceLine;
2717 typedef struct OMFSourceFile
2719 unsigned short cSeg;
2720 unsigned short reserved;
2721 unsigned int baseSrcLn[1];
2722 unsigned short cFName;
2723 char Name;
2724 } OMFSourceFile;
2726 typedef struct OMFSourceModule
2728 unsigned short cFile;
2729 unsigned short cSeg;
2730 unsigned int baseSrcFile[1];
2731 } OMFSourceModule;