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:
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
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'
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
78 * The different flavors can coexist in the same file (is this really
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
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.
101 /* ======================================== *
103 * ======================================== */
107 unsigned char namelen
;
111 typedef unsigned short cv_typ16_t
;
112 typedef unsigned int cv_typ_t
;
113 typedef cv_typ_t cv_itemid_t
;
115 typedef struct cv_property_t
117 unsigned short is_packed
: 1;
118 unsigned short has_ctor
: 1;
119 unsigned short has_overloaded_operator
: 1;
120 unsigned short is_nested
: 1;
121 unsigned short has_nested
: 1;
122 unsigned short has_overloaded_assign
: 1;
123 unsigned short has_operator_cast
: 1;
124 unsigned short is_forward_defn
: 1;
125 unsigned short is_scoped
: 1;
126 unsigned short has_decorated_name
: 1; /* follows name field */
127 unsigned short is_sealed
: 1; /* not usage as base class */
128 unsigned short hfa
: 2;
129 unsigned short is_intrinsic
: 1;
130 unsigned short mocom
: 2;
134 /* ======================================== *
136 * ======================================== */
142 unsigned short int len
;
143 unsigned short int id
;
146 /* types found in TPI stream (#2) */
149 unsigned short int len
;
150 unsigned short int id
;
157 unsigned short int len
;
158 unsigned short int id
;
165 unsigned short int len
;
166 unsigned short int id
;
169 struct p_string p_name
;
174 unsigned short int len
;
175 unsigned short int id
;
177 unsigned int attribute
;
178 struct p_string p_name
;
183 unsigned short int len
;
184 unsigned short int id
;
187 unsigned short int arrlen
; /* numeric leaf */
189 struct p_string p_name
;
195 unsigned short int len
;
196 unsigned short int id
;
199 unsigned short int arrlen
; /* numeric leaf */
201 struct p_string p_name
;
207 unsigned short int len
;
208 unsigned short int id
;
211 unsigned short int arrlen
; /* numeric leaf */
219 unsigned short int len
;
220 unsigned short int id
;
222 cv_typ16_t fieldlist
;
223 cv_property_t property
;
226 unsigned short int structlen
; /* numeric leaf */
228 struct p_string p_name
;
234 unsigned short int len
;
235 unsigned short int id
;
237 cv_property_t property
;
241 unsigned short int structlen
; /* numeric leaf */
243 struct p_string p_name
;
249 unsigned short int len
;
250 unsigned short int id
;
252 cv_property_t property
;
256 unsigned short int structlen
; /* numeric leaf */
264 unsigned short int len
;
265 unsigned short int id
;
267 cv_typ16_t fieldlist
;
268 cv_property_t property
;
269 unsigned short int un_len
; /* numeric leaf */
271 struct p_string p_name
;
277 unsigned short int len
;
278 unsigned short int id
;
280 cv_property_t property
;
282 unsigned short int un_len
; /* numeric leaf */
284 struct p_string p_name
;
290 unsigned short int len
;
291 unsigned short int id
;
293 cv_property_t property
;
295 unsigned short int un_len
; /* numeric leaf */
303 unsigned short int len
;
304 unsigned short int id
;
307 cv_typ16_t fieldlist
;
308 cv_property_t property
;
309 struct p_string p_name
;
314 unsigned short int len
;
315 unsigned short int id
;
317 cv_property_t property
;
320 struct p_string p_name
;
325 unsigned short int len
;
326 unsigned short int id
;
328 cv_property_t property
;
336 unsigned short int len
;
337 unsigned short int id
;
339 unsigned char callconv
;
340 unsigned char funcattr
;
341 unsigned short int params
;
347 unsigned short int len
;
348 unsigned short int id
;
350 unsigned char callconv
;
351 unsigned char funcattr
;
352 unsigned short int params
;
358 unsigned short int len
;
359 unsigned short int id
;
361 cv_typ16_t class_type
;
362 cv_typ16_t this_type
;
363 unsigned char callconv
;
364 unsigned char funcattr
;
365 unsigned short int params
;
367 unsigned int this_adjust
;
372 unsigned short int len
;
373 unsigned short int id
;
377 unsigned char callconv
;
378 unsigned char funcattr
;
379 unsigned short params
;
381 unsigned int this_adjust
;
384 /* types found in IPI stream (#4) */
387 unsigned short int len
;
388 unsigned short int id
; /* LF_FUNC_ID */
396 unsigned short int len
;
397 unsigned short int id
; /* LF_MFUNC_ID */
405 unsigned short int len
;
406 unsigned short int id
; /* LF_STRING_ID */
413 unsigned short int len
;
414 unsigned short int id
; /* LF_UDT_SRC_LINE */
422 unsigned short int len
;
423 unsigned short int id
; /* LF_UDT_MOD_SRC_LINE */
428 } udt_mod_src_line_v3
;
432 unsigned short int len
;
433 unsigned short int id
; /* LF_BUILDINFO */
434 unsigned short count
;
440 union codeview_reftype
444 unsigned short int len
;
445 unsigned short int id
;
450 unsigned short int len
;
451 unsigned short int id
;
452 unsigned char list
[1];
457 unsigned short int len
;
458 unsigned short int id
;
460 unsigned char bitoff
;
466 unsigned short int len
;
467 unsigned short int id
;
470 unsigned char bitoff
;
475 unsigned short int len
;
476 unsigned short int id
;
483 unsigned short int len
;
484 unsigned short int id
;
491 unsigned short int len
;
492 unsigned short int id
;
494 cv_typ16_t drvdcls
[1];
499 unsigned short int len
;
500 unsigned short int id
;
507 unsigned short int len
;
508 unsigned short int id
;
510 cv_typ_t baseVftable
;
511 unsigned offsetInObjectLayout
;
513 char names
[1]; /* array of len 0-terminated strings (size of cbstr in char:s) */
517 union codeview_fieldtype
521 unsigned short int id
;
526 unsigned short int id
;
529 unsigned short int offset
; /* numeric leaf */
534 unsigned short int id
;
537 unsigned short int offset
; /* numeric leaf */
542 unsigned short int id
;
546 unsigned short int vbpoff
; /* numeric leaf */
548 unsigned short int vboff
; /* numeric leaf */
554 unsigned short int id
;
558 unsigned short int vbpoff
; /* numeric leaf */
560 unsigned short int vboff
; /* numeric leaf */
566 unsigned short int id
;
568 unsigned short int value
; /* numeric leaf */
570 struct p_string p_name
;
576 unsigned short int id
;
578 unsigned short int value
; /* numeric leaf */
586 unsigned short int id
;
588 struct p_string p_name
;
593 unsigned short int id
;
596 struct p_string p_name
;
601 unsigned short int id
;
609 unsigned short int id
;
612 unsigned short int offset
; /* numeric leaf */
614 struct p_string p_name
;
620 unsigned short int id
;
623 unsigned short int offset
; /* numeric leaf */
625 struct p_string p_name
;
631 unsigned short int id
;
634 unsigned short int offset
; /* numeric leaf */
643 unsigned short int id
;
646 struct p_string p_name
;
651 unsigned short int id
;
654 struct p_string p_name
;
659 unsigned short int id
;
667 unsigned short int id
;
670 struct p_string p_name
;
675 unsigned short int id
;
678 struct p_string p_name
;
683 unsigned short int id
;
691 unsigned short int id
;
693 struct p_string p_name
;
698 unsigned short int id
;
701 struct p_string p_name
;
706 unsigned short int id
;
714 unsigned short int id
;
720 unsigned short int id
;
727 unsigned short int id
;
733 unsigned short int id
;
740 unsigned short int id
;
743 struct p_string p_name
;
748 unsigned short int id
;
751 struct p_string p_name
;
756 unsigned short int id
;
764 unsigned short int id
;
767 unsigned int vtab_offset
;
768 struct p_string p_name
;
773 unsigned short int id
;
776 unsigned int vtab_offset
;
777 struct p_string p_name
;
782 unsigned short int id
;
785 unsigned int vtab_offset
;
791 unsigned short int id
;
798 unsigned short int id
;
806 unsigned short int id
;
809 struct p_string p_name
;
814 unsigned short int id
;
817 struct p_string p_name
;
822 unsigned short int id
;
825 struct p_string p_name
;
830 unsigned short int id
;
836 unsigned short int id
;
844 * This covers the basic datatypes that VC++ seems to be using these days.
845 * 32 bit mode only. There are additional numbers for the pointers in 16
846 * bit mode. There are many other types listed in the documents, but these
847 * are apparently not used by the compiler, or represent pointer types
850 * Official MS documentation says that type (< 0x4000, so 12 bits) is made of:
851 * +----------+------+------+----------+------+
852 * | 11 | 10-8 | 7-4 | 3 | 2-0 |
853 * +----------+------+------+----------+------+
854 * | reserved | mode | type | reserved | size |
855 * +----------+------+------+----------+------+
856 * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've
857 * added this basic type... as if bit 3 had been integrated into the size field
860 /* the type number of a built-in type is a 16-bit value specified in the following format:
861 bit # | 11 | 10-8 | 7-4 | 3 | 2-0 |
862 field | reserved | mode | type | reserved | size |
865 <type> is one of the following types:
867 0x01 Signed integral value
868 0x02 Unsigned integral value
881 0x0f Reserved for debugger expression evaluator
883 <size> is an enumerated value for each of the types.
889 0x04 Basic 8-byte currency value
890 0x05 Near Basic string
891 0x06 Far Basic string
892 0x07 Untranslated type from previous Microsoft symbol formats
893 Type = signed/unsigned integral and Boolean values
902 Type = real and complex
917 0x02 2-byte signed integer
918 0x03 2-byte unsigned integer
919 0x04 4-byte signed integer
920 0x05 4-byte unsigned integer
921 0x06 8-byte signed integer
922 0x07 8-byte unsigned integer
924 <mode> is the pointer mode:
925 0x00 Direct; not a pointer
929 0x04 32-bit near pointer
930 0x05 32-bit far pointer
931 0x06 64-bit near pointer
936 #define T_NOTYPE 0x0000 /* Notype */
937 #define T_ABS 0x0001 /* Abs */
938 #define T_SEGMENT 0x0002 /* segment type */
939 #define T_VOID 0x0003 /* Void */
940 #define T_CURRENCY 0x0004 /* basic 8-byte currency value */
941 #define T_NBASICSTR 0x0005 /* near basic string */
942 #define T_FBASICSTR 0x0006 /* far basic string */
943 #define T_NOTTRANS 0x0007 /* untranslated type record from MS symbol format */
944 #define T_HRESULT 0x0008 /* HRESULT - or error code ??? */
945 #define T_CHAR 0x0010 /* signed char */
946 #define T_SHORT 0x0011 /* short */
947 #define T_LONG 0x0012 /* long */
948 #define T_QUAD 0x0013 /* long long */
949 #define T_UCHAR 0x0020 /* unsigned char */
950 #define T_USHORT 0x0021 /* unsigned short */
951 #define T_ULONG 0x0022 /* unsigned long */
952 #define T_UQUAD 0x0023 /* unsigned long long */
953 #define T_BOOL08 0x0030 /* 8-bit boolean */
954 #define T_BOOL16 0x0031 /* 16-bit boolean */
955 #define T_BOOL32 0x0032 /* 32-bit boolean */
956 #define T_BOOL64 0x0033 /* 64-bit boolean */
957 #define T_REAL32 0x0040 /* float */
958 #define T_REAL64 0x0041 /* double */
959 #define T_REAL80 0x0042 /* 80-bit real */
960 #define T_REAL128 0x0043 /* 128-bit real */
961 #define T_REAL48 0x0044 /* 48-bit real */
962 #define T_CPLX32 0x0050 /* 32-bit complex number */
963 #define T_CPLX64 0x0051 /* 64-bit complex number */
964 #define T_CPLX80 0x0052 /* 80-bit complex number */
965 #define T_CPLX128 0x0053 /* 128-bit complex number */
966 #define T_BIT 0x0060 /* bit */
967 #define T_PASCHAR 0x0061 /* pascal CHAR */
968 #define T_RCHAR 0x0070 /* real char */
969 #define T_WCHAR 0x0071 /* wide char */
970 #define T_INT2 0x0072 /* real 16-bit signed int */
971 #define T_UINT2 0x0073 /* real 16-bit unsigned int */
972 #define T_INT4 0x0074 /* int */
973 #define T_UINT4 0x0075 /* unsigned int */
974 #define T_INT8 0x0076 /* 64-bit signed int */
975 #define T_UINT8 0x0077 /* 64-bit unsigned int */
976 #define T_CHAR16 0x007a /* 16-bit unicode char */
977 #define T_CHAR32 0x007b /* 32-bit unicode char */
978 #define T_CHAR8 0x007c /* 8-bit unicode char (C++ 20) */
980 /* near pointers to basic types */
981 #define T_PVOID 0x0103 /* near pointer to void */
982 #define T_PCHAR 0x0110 /* Near pointer to 8-bit signed */
983 #define T_PSHORT 0x0111 /* Near pointer to 16-bit signed */
984 #define T_PLONG 0x0112 /* Near pointer to 32-bit signed */
985 #define T_PQUAD 0x0113 /* Near pointer to 64-bit signed */
986 #define T_PUCHAR 0x0120 /* Near pointer to 8-bit unsigned */
987 #define T_PUSHORT 0x0121 /* Near pointer to 16-bit unsigned */
988 #define T_PULONG 0x0122 /* Near pointer to 32-bit unsigned */
989 #define T_PUQUAD 0x0123 /* Near pointer to 64-bit unsigned */
990 #define T_PBOOL08 0x0130 /* Near pointer to 8-bit Boolean */
991 #define T_PBOOL16 0x0131 /* Near pointer to 16-bit Boolean */
992 #define T_PBOOL32 0x0132 /* Near pointer to 32-bit Boolean */
993 #define T_PBOOL64 0x0133 /* Near pointer to 64-bit Boolean */
994 #define T_PREAL32 0x0140 /* Near pointer to 32-bit real */
995 #define T_PREAL64 0x0141 /* Near pointer to 64-bit real */
996 #define T_PREAL80 0x0142 /* Near pointer to 80-bit real */
997 #define T_PREAL128 0x0143 /* Near pointer to 128-bit real */
998 #define T_PREAL48 0x0144 /* Near pointer to 48-bit real */
999 #define T_PCPLX32 0x0150 /* Near pointer to 32-bit complex */
1000 #define T_PCPLX64 0x0151 /* Near pointer to 64-bit complex */
1001 #define T_PCPLX80 0x0152 /* Near pointer to 80-bit complex */
1002 #define T_PCPLX128 0x0153 /* Near pointer to 128-bit complex */
1003 #define T_PRCHAR 0x0170 /* Near pointer to a real char */
1004 #define T_PWCHAR 0x0171 /* Near pointer to a wide char */
1005 #define T_PINT2 0x0172 /* Near pointer to 16-bit signed int */
1006 #define T_PUINT2 0x0173 /* Near pointer to 16-bit unsigned int */
1007 #define T_PINT4 0x0174 /* Near pointer to 32-bit signed int */
1008 #define T_PUINT4 0x0175 /* Near pointer to 32-bit unsigned int */
1009 #define T_PINT8 0x0176 /* Near pointer to 64-bit signed int */
1010 #define T_PUINT8 0x0177 /* Near pointer to 64-bit unsigned int */
1011 #define T_PCHAR16 0x017a /* Near pointer to 16-bit unicode char */
1012 #define T_PCHAR32 0x017b /* Near pointer to 32-bit unicode char */
1013 #define T_PCHAR8 0x017c /* Near pointer to 8-bit unicode char */
1015 /* far pointers to basic types */
1016 #define T_PFVOID 0x0203 /* Far pointer to void */
1017 #define T_PFCHAR 0x0210 /* Far pointer to 8-bit signed */
1018 #define T_PFSHORT 0x0211 /* Far pointer to 16-bit signed */
1019 #define T_PFLONG 0x0212 /* Far pointer to 32-bit signed */
1020 #define T_PFQUAD 0x0213 /* Far pointer to 64-bit signed */
1021 #define T_PFUCHAR 0x0220 /* Far pointer to 8-bit unsigned */
1022 #define T_PFUSHORT 0x0221 /* Far pointer to 16-bit unsigned */
1023 #define T_PFULONG 0x0222 /* Far pointer to 32-bit unsigned */
1024 #define T_PFUQUAD 0x0223 /* Far pointer to 64-bit unsigned */
1025 #define T_PFBOOL08 0x0230 /* Far pointer to 8-bit Boolean */
1026 #define T_PFBOOL16 0x0231 /* Far pointer to 16-bit Boolean */
1027 #define T_PFBOOL32 0x0232 /* Far pointer to 32-bit Boolean */
1028 #define T_PFBOOL64 0x0233 /* Far pointer to 64-bit Boolean */
1029 #define T_PFREAL32 0x0240 /* Far pointer to 32-bit real */
1030 #define T_PFREAL64 0x0241 /* Far pointer to 64-bit real */
1031 #define T_PFREAL80 0x0242 /* Far pointer to 80-bit real */
1032 #define T_PFREAL128 0x0243 /* Far pointer to 128-bit real */
1033 #define T_PFREAL48 0x0244 /* Far pointer to 48-bit real */
1034 #define T_PFCPLX32 0x0250 /* Far pointer to 32-bit complex */
1035 #define T_PFCPLX64 0x0251 /* Far pointer to 64-bit complex */
1036 #define T_PFCPLX80 0x0252 /* Far pointer to 80-bit complex */
1037 #define T_PFCPLX128 0x0253 /* Far pointer to 128-bit complex */
1038 #define T_PFRCHAR 0x0270 /* Far pointer to a real char */
1039 #define T_PFWCHAR 0x0271 /* Far pointer to a wide char */
1040 #define T_PFINT2 0x0272 /* Far pointer to 16-bit signed int */
1041 #define T_PFUINT2 0x0273 /* Far pointer to 16-bit unsigned int */
1042 #define T_PFINT4 0x0274 /* Far pointer to 32-bit signed int */
1043 #define T_PFUINT4 0x0275 /* Far pointer to 32-bit unsigned int */
1044 #define T_PFINT8 0x0276 /* Far pointer to 64-bit signed int */
1045 #define T_PFUINT8 0x0277 /* Far pointer to 64-bit unsigned int */
1046 #define T_PFCHAR16 0x027a /* Far pointer to 16-bit unicode char */
1047 #define T_PFCHAR32 0x027b /* Far pointer to 32-bit unicode char */
1048 #define T_PFCHAR8 0x027c /* Far pointer to 8-bit unicode char */
1050 /* huge pointers to basic types */
1051 #define T_PHVOID 0x0303 /* Huge pointer to void */
1052 #define T_PHCHAR 0x0310 /* Huge pointer to 8-bit signed */
1053 #define T_PHSHORT 0x0311 /* Huge pointer to 16-bit signed */
1054 #define T_PHLONG 0x0312 /* Huge pointer to 32-bit signed */
1055 #define T_PHQUAD 0x0313 /* Huge pointer to 64-bit signed */
1056 #define T_PHUCHAR 0x0320 /* Huge pointer to 8-bit unsigned */
1057 #define T_PHUSHORT 0x0321 /* Huge pointer to 16-bit unsigned */
1058 #define T_PHULONG 0x0322 /* Huge pointer to 32-bit unsigned */
1059 #define T_PHUQUAD 0x0323 /* Huge pointer to 64-bit unsigned */
1060 #define T_PHBOOL08 0x0330 /* Huge pointer to 8-bit Boolean */
1061 #define T_PHBOOL16 0x0331 /* Huge pointer to 16-bit Boolean */
1062 #define T_PHBOOL32 0x0332 /* Huge pointer to 32-bit Boolean */
1063 #define T_PHBOOL64 0x0333 /* Huge pointer to 64-bit Boolean */
1064 #define T_PHREAL32 0x0340 /* Huge pointer to 32-bit real */
1065 #define T_PHREAL64 0x0341 /* Huge pointer to 64-bit real */
1066 #define T_PHREAL80 0x0342 /* Huge pointer to 80-bit real */
1067 #define T_PHREAL128 0x0343 /* Huge pointer to 128-bit real */
1068 #define T_PHREAL48 0x0344 /* Huge pointer to 48-bit real */
1069 #define T_PHCPLX32 0x0350 /* Huge pointer to 32-bit complex */
1070 #define T_PHCPLX64 0x0351 /* Huge pointer to 64-bit complex */
1071 #define T_PHCPLX80 0x0352 /* Huge pointer to 80-bit complex */
1072 #define T_PHCPLX128 0x0353 /* Huge pointer to 128-bit real */
1073 #define T_PHRCHAR 0x0370 /* Huge pointer to a real char */
1074 #define T_PHWCHAR 0x0371 /* Huge pointer to a wide char */
1075 #define T_PHINT2 0x0372 /* Huge pointer to 16-bit signed int */
1076 #define T_PHUINT2 0x0373 /* Huge pointer to 16-bit unsigned int */
1077 #define T_PHINT4 0x0374 /* Huge pointer to 32-bit signed int */
1078 #define T_PHUINT4 0x0375 /* Huge pointer to 32-bit unsigned int */
1079 #define T_PHINT8 0x0376 /* Huge pointer to 64-bit signed int */
1080 #define T_PHUINT8 0x0377 /* Huge pointer to 64-bit unsigned int */
1081 #define T_PHCHAR16 0x037a /* Huge pointer to 16-bit unicode char */
1082 #define T_PHCHAR32 0x037b /* Huge pointer to 32-bit unicode char */
1083 #define T_PHCHAR8 0x037c /* Huge pointer to 8-bit unicode char */
1085 /* 32-bit near pointers to basic types */
1086 #define T_32PVOID 0x0403 /* 32-bit near pointer to void */
1087 #define T_32PHRESULT 0x0408 /* 16:32 near pointer to HRESULT - or error code ??? */
1088 #define T_32PCHAR 0x0410 /* 16:32 near pointer to 8-bit signed */
1089 #define T_32PSHORT 0x0411 /* 16:32 near pointer to 16-bit signed */
1090 #define T_32PLONG 0x0412 /* 16:32 near pointer to 32-bit signed */
1091 #define T_32PQUAD 0x0413 /* 16:32 near pointer to 64-bit signed */
1092 #define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8-bit unsigned */
1093 #define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16-bit unsigned */
1094 #define T_32PULONG 0x0422 /* 16:32 near pointer to 32-bit unsigned */
1095 #define T_32PUQUAD 0x0423 /* 16:32 near pointer to 64-bit unsigned */
1096 #define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8-bit Boolean */
1097 #define T_32PBOOL16 0x0431 /* 16:32 near pointer to 16-bit Boolean */
1098 #define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32-bit Boolean */
1099 #define T_32PBOOL64 0x0433 /* 16:32 near pointer to 64-bit Boolean */
1100 #define T_32PREAL32 0x0440 /* 16:32 near pointer to 32-bit real */
1101 #define T_32PREAL64 0x0441 /* 16:32 near pointer to 64-bit real */
1102 #define T_32PREAL80 0x0442 /* 16:32 near pointer to 80-bit real */
1103 #define T_32PREAL128 0x0443 /* 16:32 near pointer to 128-bit real */
1104 #define T_32PREAL48 0x0444 /* 16:32 near pointer to 48-bit real */
1105 #define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32-bit complex */
1106 #define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64-bit complex */
1107 #define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80-bit complex */
1108 #define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128-bit complex */
1109 #define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */
1110 #define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */
1111 #define T_32PINT2 0x0472 /* 16:32 near pointer to 16-bit signed int */
1112 #define T_32PUINT2 0x0473 /* 16:32 near pointer to 16-bit unsigned int */
1113 #define T_32PINT4 0x0474 /* 16:32 near pointer to 32-bit signed int */
1114 #define T_32PUINT4 0x0475 /* 16:32 near pointer to 32-bit unsigned int */
1115 #define T_32PINT8 0x0476 /* 16:32 near pointer to 64-bit signed int */
1116 #define T_32PUINT8 0x0477 /* 16:32 near pointer to 64-bit unsigned int */
1117 #define T_32PCHAR16 0x047a /* 16:32 near pointer to 16-bit unicode char */
1118 #define T_32PCHAR32 0x047b /* 16:32 near pointer to 32-bit unicode char */
1119 #define T_32PCHAR8 0x047c /* 16:32 near pointer to 8-bit unicode char */
1121 /* 32-bit far pointers to basic types */
1122 #define T_32PFVOID 0x0503 /* 32-bit far pointer to void */
1123 #define T_32PFHRESULT 0x0508 /* 16:32 far pointer to HRESULT - or error code ??? */
1124 #define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */
1125 #define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */
1126 #define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */
1127 #define T_32PFQUAD 0x0513 /* 16:32 far pointer to 64-bit signed */
1128 #define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8-bit unsigned */
1129 #define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16-bit unsigned */
1130 #define T_32PFULONG 0x0522 /* 16:32 far pointer to 32-bit unsigned */
1131 #define T_32PFUQUAD 0x0523 /* 16:32 far pointer to 64-bit unsigned */
1132 #define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8-bit Boolean */
1133 #define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16-bit Boolean */
1134 #define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32-bit Boolean */
1135 #define T_32PFBOOL64 0x0533 /* 16:32 far pointer to 64-bit Boolean */
1136 #define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32-bit real */
1137 #define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64-bit real */
1138 #define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80-bit real */
1139 #define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128-bit real */
1140 #define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48-bit real */
1141 #define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32-bit complex */
1142 #define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64-bit complex */
1143 #define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80-bit complex */
1144 #define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128-bit complex */
1145 #define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */
1146 #define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */
1147 #define T_32PFINT2 0x0572 /* 16:32 far pointer to 16-bit signed int */
1148 #define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16-bit unsigned int */
1149 #define T_32PFINT4 0x0574 /* 16:32 far pointer to 32-bit signed int */
1150 #define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32-bit unsigned int */
1151 #define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */
1152 #define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */
1153 #define T_32PFCHAR16 0x057a /* 16:32 far pointer to 16-bit unicode char */
1154 #define T_32PFCHAR32 0x057b /* 16:32 far pointer to 32-bit unicode char */
1155 #define T_32PFCHAR8 0x057c /* 16:32 far pointer to 8-bit unicode char */
1157 /* 64-bit near pointers to basic types */
1158 #define T_64PVOID 0x0603 /* 64-bit near pointer to void */
1159 #define T_64PHRESULT 0x0608 /* 64 near pointer to HRESULT - or error code ??? */
1160 #define T_64PCHAR 0x0610 /* 64 near pointer to 8-bit signed */
1161 #define T_64PSHORT 0x0611 /* 64 near pointer to 16-bit signed */
1162 #define T_64PLONG 0x0612 /* 64 near pointer to 32-bit signed */
1163 #define T_64PQUAD 0x0613 /* 64 near pointer to 64-bit signed */
1164 #define T_64PUCHAR 0x0620 /* 64 near pointer to 8-bit unsigned */
1165 #define T_64PUSHORT 0x0621 /* 64 near pointer to 16-bit unsigned */
1166 #define T_64PULONG 0x0622 /* 64 near pointer to 32-bit unsigned */
1167 #define T_64PUQUAD 0x0623 /* 64 near pointer to 64-bit unsigned */
1168 #define T_64PBOOL08 0x0630 /* 64 near pointer to 8-bit Boolean */
1169 #define T_64PBOOL16 0x0631 /* 64 near pointer to 16-bit Boolean */
1170 #define T_64PBOOL32 0x0632 /* 64 near pointer to 32-bit Boolean */
1171 #define T_64PBOOL64 0x0633 /* 64 near pointer to 64-bit Boolean */
1172 #define T_64PREAL32 0x0640 /* 64 near pointer to 32-bit real */
1173 #define T_64PREAL64 0x0641 /* 64 near pointer to 64-bit real */
1174 #define T_64PREAL80 0x0642 /* 64 near pointer to 80-bit real */
1175 #define T_64PREAL128 0x0643 /* 64 near pointer to 128-bit real */
1176 #define T_64PREAL48 0x0644 /* 64 near pointer to 48-bit real */
1177 #define T_64PCPLX32 0x0650 /* 64 near pointer to 32-bit complex */
1178 #define T_64PCPLX64 0x0651 /* 64 near pointer to 64-bit complex */
1179 #define T_64PCPLX80 0x0652 /* 64 near pointer to 80-bit complex */
1180 #define T_64PCPLX128 0x0653 /* 64 near pointer to 128-bit complex */
1181 #define T_64PRCHAR 0x0670 /* 64 near pointer to a real char */
1182 #define T_64PWCHAR 0x0671 /* 64 near pointer to a wide char */
1183 #define T_64PINT2 0x0672 /* 64 near pointer to 16-bit signed int */
1184 #define T_64PUINT2 0x0673 /* 64 near pointer to 16-bit unsigned int */
1185 #define T_64PINT4 0x0674 /* 64 near pointer to 32-bit signed int */
1186 #define T_64PUINT4 0x0675 /* 64 near pointer to 32-bit unsigned int */
1187 #define T_64PINT8 0x0676 /* 64 near pointer to 64-bit signed int */
1188 #define T_64PUINT8 0x0677 /* 64 near pointer to 64-bit unsigned int */
1189 #define T_64PCHAR16 0x067a /* 64 near pointer to 16-bit unicode char */
1190 #define T_64PCHAR32 0x067b /* 64 near pointer to 32-bit unicode char */
1191 #define T_64PCHAR8 0x067c /* 64 near pointer to 8-bit unicode char */
1193 /* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */
1194 #define T_FIRSTDEFINABLETYPE 0x1000 /* first type index that's not predefined */
1195 #define T_MAXPREDEFINEDTYPE 0x0680 /* maximum type index for all built-in types */
1196 #define T_MAXBASICTYPE 0x0080 /* maximum type index all non-pointer built-in types */
1197 #define T_BASICTYPE_MASK 0x00ff /* mask of bits that can potentially identify a non-pointer basic type */
1198 #define T_BASICTYPE_SHIFT 8 /* shift count to push out the basic type bits from a type number */
1199 #define T_MODE_MASK 0x0700 /* type mode mask (ptr/non-ptr) */
1200 #define T_SIZE_MASK 0x0007 /* type size mask (depends on 'type' value) */
1201 #define T_TYPE_MASK 0x00f0 /* type type mask (data treatment mode) */
1203 /* bit patterns for the <mode> portion of a built-in type number */
1204 #define T_NEARPTR_BITS 0x0100
1205 #define T_FARPTR_BITS 0x0200
1206 #define T_HUGEPTR_BITS 0x0300
1207 #define T_NEAR32PTR_BITS 0x0400
1208 #define T_FAR32PTR_BITS 0x0500
1209 #define T_NEAR64PTR_BITS 0x0600
1211 #define LF_MODIFIER_V1 0x0001
1212 #define LF_POINTER_V1 0x0002
1213 #define LF_ARRAY_V1 0x0003
1214 #define LF_CLASS_V1 0x0004
1215 #define LF_STRUCTURE_V1 0x0005
1216 #define LF_UNION_V1 0x0006
1217 #define LF_ENUM_V1 0x0007
1218 #define LF_PROCEDURE_V1 0x0008
1219 #define LF_MFUNCTION_V1 0x0009
1220 #define LF_VTSHAPE_V1 0x000a
1221 #define LF_COBOL0_V1 0x000b
1222 #define LF_COBOL1_V1 0x000c
1223 #define LF_BARRAY_V1 0x000d
1224 #define LF_LABEL_V1 0x000e
1225 #define LF_NULL_V1 0x000f
1226 #define LF_NOTTRAN_V1 0x0010
1227 #define LF_DIMARRAY_V1 0x0011
1228 #define LF_VFTPATH_V1 0x0012
1229 #define LF_PRECOMP_V1 0x0013
1230 #define LF_ENDPRECOMP_V1 0x0014
1231 #define LF_OEM_V1 0x0015
1232 #define LF_TYPESERVER_V1 0x0016
1234 #define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
1235 #define LF_POINTER_V2 0x1002
1236 #define LF_ARRAY_V2 0x1003
1237 #define LF_CLASS_V2 0x1004
1238 #define LF_STRUCTURE_V2 0x1005
1239 #define LF_UNION_V2 0x1006
1240 #define LF_ENUM_V2 0x1007
1241 #define LF_PROCEDURE_V2 0x1008
1242 #define LF_MFUNCTION_V2 0x1009
1243 #define LF_COBOL0_V2 0x100a
1244 #define LF_BARRAY_V2 0x100b
1245 #define LF_DIMARRAY_V2 0x100c
1246 #define LF_VFTPATH_V2 0x100d
1247 #define LF_PRECOMP_V2 0x100e
1248 #define LF_OEM_V2 0x100f
1250 #define LF_SKIP_V1 0x0200
1251 #define LF_ARGLIST_V1 0x0201
1252 #define LF_DEFARG_V1 0x0202
1253 #define LF_LIST_V1 0x0203
1254 #define LF_FIELDLIST_V1 0x0204
1255 #define LF_DERIVED_V1 0x0205
1256 #define LF_BITFIELD_V1 0x0206
1257 #define LF_METHODLIST_V1 0x0207
1258 #define LF_DIMCONU_V1 0x0208
1259 #define LF_DIMCONLU_V1 0x0209
1260 #define LF_DIMVARU_V1 0x020a
1261 #define LF_DIMVARLU_V1 0x020b
1262 #define LF_REFSYM_V1 0x020c
1264 #define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
1265 #define LF_ARGLIST_V2 0x1201
1266 #define LF_DEFARG_V2 0x1202
1267 #define LF_FIELDLIST_V2 0x1203
1268 #define LF_DERIVED_V2 0x1204
1269 #define LF_BITFIELD_V2 0x1205
1270 #define LF_METHODLIST_V2 0x1206
1271 #define LF_DIMCONU_V2 0x1207
1272 #define LF_DIMCONLU_V2 0x1208
1273 #define LF_DIMVARU_V2 0x1209
1274 #define LF_DIMVARLU_V2 0x120a
1277 #define LF_BCLASS_V1 0x0400
1278 #define LF_VBCLASS_V1 0x0401
1279 #define LF_IVBCLASS_V1 0x0402
1280 #define LF_ENUMERATE_V1 0x0403
1281 #define LF_FRIENDFCN_V1 0x0404
1282 #define LF_INDEX_V1 0x0405
1283 #define LF_MEMBER_V1 0x0406
1284 #define LF_STMEMBER_V1 0x0407
1285 #define LF_METHOD_V1 0x0408
1286 #define LF_NESTTYPE_V1 0x0409
1287 #define LF_VFUNCTAB_V1 0x040a
1288 #define LF_FRIENDCLS_V1 0x040b
1289 #define LF_ONEMETHOD_V1 0x040c
1290 #define LF_VFUNCOFF_V1 0x040d
1291 #define LF_NESTTYPEEX_V1 0x040e
1292 #define LF_MEMBERMODIFY_V1 0x040f
1294 #define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
1295 #define LF_VBCLASS_V2 0x1401
1296 #define LF_IVBCLASS_V2 0x1402
1297 #define LF_FRIENDFCN_V2 0x1403
1298 #define LF_INDEX_V2 0x1404
1299 #define LF_MEMBER_V2 0x1405
1300 #define LF_STMEMBER_V2 0x1406
1301 #define LF_METHOD_V2 0x1407
1302 #define LF_NESTTYPE_V2 0x1408
1303 #define LF_VFUNCTAB_V2 0x1409
1304 #define LF_FRIENDCLS_V2 0x140a
1305 #define LF_ONEMETHOD_V2 0x140b
1306 #define LF_VFUNCOFF_V2 0x140c
1307 #define LF_NESTTYPEEX_V2 0x140d
1309 #define LF_ENUMERATE_V3 0x1502
1310 #define LF_ARRAY_V3 0x1503
1311 #define LF_CLASS_V3 0x1504
1312 #define LF_STRUCTURE_V3 0x1505
1313 #define LF_UNION_V3 0x1506
1314 #define LF_ENUM_V3 0x1507
1315 #define LF_FRIENDFCN_V3 0x150c
1316 #define LF_MEMBER_V3 0x150d
1317 #define LF_STMEMBER_V3 0x150e
1318 #define LF_METHOD_V3 0x150f
1319 #define LF_NESTTYPE_V3 0x1510
1320 #define LF_ONEMETHOD_V3 0x1511
1321 #define LF_VFTABLE_V3 0x151d
1323 /* leaves found in second type type (aka IPI)
1324 * for simplicity, stored in the same union as other TPI leaves
1326 #define LF_FUNC_ID 0x1601
1327 #define LF_MFUNC_ID 0x1602
1328 #define LF_BUILDINFO 0x1603
1329 #define LF_SUBSTR_LIST 0x1604
1330 #define LF_STRING_ID 0x1605
1331 #define LF_UDT_SRC_LINE 0x1606
1332 #define LF_UDT_MOD_SRC_LINE 0x1607
1334 #define LF_NUMERIC 0x8000 /* numeric leaf types */
1335 #define LF_CHAR 0x8000
1336 #define LF_SHORT 0x8001
1337 #define LF_USHORT 0x8002
1338 #define LF_LONG 0x8003
1339 #define LF_ULONG 0x8004
1340 #define LF_REAL32 0x8005
1341 #define LF_REAL64 0x8006
1342 #define LF_REAL80 0x8007
1343 #define LF_REAL128 0x8008
1344 #define LF_QUADWORD 0x8009
1345 #define LF_UQUADWORD 0x800a
1346 #define LF_REAL48 0x800b
1347 #define LF_COMPLEX32 0x800c
1348 #define LF_COMPLEX64 0x800d
1349 #define LF_COMPLEX80 0x800e
1350 #define LF_COMPLEX128 0x800f
1351 #define LF_VARSTRING 0x8010
1353 /* symtype e.g. for public_vx.symtype */
1354 #define SYMTYPE_NONE 0x0000
1355 #define SYMTYPE_CODE 0x0001
1356 #define SYMTYPE_FUNCTION 0x0002
1357 #define SYMTYPE_MANAGED 0x0004
1358 #define SYMTYPE_MSIL 0x0008
1360 /* ======================================== *
1361 * Symbol information
1362 * ======================================== */
1364 struct cv_addr_range
1366 unsigned int offStart
;
1367 unsigned short isectStart
;
1368 unsigned short cbRange
;
1373 unsigned short gapStartOffset
;
1374 unsigned short cbRange
;
1377 struct cv_local_varflag
1379 unsigned short is_param
: 1;
1380 unsigned short address_taken
: 1;
1381 unsigned short from_compiler
: 1; /* generated by compiler */
1382 unsigned short is_aggregate
: 1; /* split in several variables by compiler */
1383 unsigned short from_aggregate
: 1; /* marks a temporary from an aggregate */
1384 unsigned short is_aliased
: 1;
1385 unsigned short from_alias
: 1;
1386 unsigned short is_return_value
: 1;
1387 unsigned short optimized_out
: 1;
1388 unsigned short enreg_global
: 1; /* global variable accessed from register */
1389 unsigned short enreg_static
: 1;
1391 unsigned short unused
: 5;
1395 union codeview_symbol
1399 unsigned short int len
;
1400 unsigned short int id
;
1405 unsigned short int len
;
1406 unsigned short int id
;
1407 unsigned int offset
;
1408 unsigned short segment
;
1410 struct p_string p_name
;
1415 unsigned short int len
;
1416 unsigned short int id
;
1418 unsigned int offset
;
1419 unsigned short segment
;
1420 struct p_string p_name
;
1425 unsigned short int len
;
1426 unsigned short int id
;
1428 unsigned int offset
;
1429 unsigned short segment
;
1435 unsigned short int len
;
1436 unsigned short int id
;
1437 unsigned int pparent
;
1440 unsigned int offset
;
1441 unsigned short segment
;
1442 unsigned short thunk_len
;
1443 unsigned char thtype
;
1444 struct p_string p_name
;
1449 unsigned short int len
;
1450 unsigned short int id
;
1451 unsigned int pparent
;
1454 unsigned int offset
;
1455 unsigned short segment
;
1456 unsigned short thunk_len
;
1457 unsigned char thtype
;
1463 unsigned short int len
;
1464 unsigned short int id
;
1465 unsigned int pparent
;
1468 unsigned int proc_len
;
1469 unsigned int debug_start
;
1470 unsigned int debug_end
;
1471 unsigned int offset
;
1472 unsigned short segment
;
1473 cv_typ16_t proctype
;
1474 unsigned char flags
;
1475 struct p_string p_name
;
1480 unsigned short int len
;
1481 unsigned short int id
;
1482 unsigned int pparent
;
1485 unsigned int proc_len
;
1486 unsigned int debug_start
;
1487 unsigned int debug_end
;
1489 unsigned int offset
;
1490 unsigned short segment
;
1491 unsigned char flags
;
1492 struct p_string p_name
;
1497 unsigned short int len
;
1498 unsigned short int id
;
1499 unsigned int pparent
;
1502 unsigned int proc_len
;
1503 unsigned int debug_start
;
1504 unsigned int debug_end
;
1506 unsigned int offset
;
1507 unsigned short segment
;
1508 unsigned char flags
;
1514 unsigned short int len
;
1515 unsigned short int id
;
1516 unsigned int offset
;
1517 unsigned short segment
;
1518 unsigned short pubsymflags
;
1519 struct p_string p_name
;
1524 unsigned short int len
;
1525 unsigned short int id
;
1526 unsigned int pubsymflags
;
1527 unsigned int offset
;
1528 unsigned short segment
;
1529 struct p_string p_name
;
1534 unsigned short int len
;
1535 unsigned short int id
;
1536 unsigned int pubsymflags
;
1537 unsigned int offset
;
1538 unsigned short segment
;
1544 unsigned short int len
;
1545 unsigned short int id
; /* Always S_BPREL32_16t */
1546 unsigned int offset
; /* Stack offset relative to BP */
1548 struct p_string p_name
;
1553 unsigned short int len
;
1554 unsigned short int id
; /* Always S_BPREL32_ST */
1555 unsigned int offset
; /* Stack offset relative to EBP */
1557 struct p_string p_name
;
1562 unsigned short int len
;
1563 unsigned short int id
; /* Always S_BPREL32 */
1564 int offset
; /* Stack offset relative to BP */
1571 unsigned short int len
;
1572 unsigned short int id
; /* Always S_BPREL32 */
1573 int offset
; /* Stack offset relative to BP */
1581 unsigned short int len
;
1582 unsigned short int id
; /* Always S_REGISTER */
1585 struct p_string p_name
;
1586 /* don't handle register tracking */
1591 unsigned short int len
;
1592 unsigned short int id
; /* Always S_REGISTER_ST */
1593 cv_typ_t type
; /* check whether type & reg are correct */
1595 struct p_string p_name
;
1596 /* don't handle register tracking */
1601 unsigned short int len
;
1602 unsigned short int id
; /* Always S_REGISTER */
1603 cv_typ_t type
; /* check whether type & reg are correct */
1606 /* don't handle register tracking */
1611 unsigned short int len
;
1612 unsigned short int id
;
1613 unsigned int parent
;
1615 unsigned int length
;
1616 unsigned int offset
;
1617 unsigned short segment
;
1618 struct p_string p_name
;
1623 unsigned short int len
;
1624 unsigned short int id
;
1625 unsigned int parent
;
1627 unsigned int length
;
1628 unsigned int offset
;
1629 unsigned short segment
;
1635 unsigned short int len
;
1636 unsigned short int id
;
1637 unsigned short trampType
; /* 0: incremental, 1: branchisland */
1638 unsigned short cbThunk
;
1639 unsigned int offThunk
;
1640 unsigned int offTarget
;
1641 unsigned short sectThunk
;
1642 unsigned short sectTarget
;
1647 unsigned short int len
;
1648 unsigned short int id
;
1649 unsigned int offset
;
1650 unsigned short segment
;
1651 unsigned char flags
;
1652 struct p_string p_name
;
1657 unsigned short int len
;
1658 unsigned short int id
;
1659 unsigned int offset
;
1660 unsigned short segment
;
1661 unsigned char flags
;
1667 unsigned short int len
;
1668 unsigned short int id
;
1670 unsigned short cvalue
; /* numeric leaf */
1672 struct p_string p_name
;
1678 unsigned short int len
;
1679 unsigned short int id
;
1681 unsigned short cvalue
; /* numeric leaf */
1683 struct p_string p_name
;
1689 unsigned short int len
;
1690 unsigned short int id
;
1692 unsigned short cvalue
;
1700 unsigned short int len
;
1701 unsigned short int id
;
1703 struct p_string p_name
;
1708 unsigned short int len
;
1709 unsigned short int id
;
1711 struct p_string p_name
;
1716 unsigned short int len
;
1717 unsigned short int id
;
1724 unsigned short int len
;
1725 unsigned short int id
;
1727 struct p_string p_name
;
1732 unsigned short int len
;
1733 unsigned short int id
;
1740 unsigned short int len
;
1741 unsigned short int id
;
1742 unsigned char machine
;
1745 unsigned char language
: 8;
1746 unsigned char _dome
: 8; /* other missing fields */
1747 unsigned char pad
: 8;
1749 struct p_string p_name
;
1754 unsigned short int len
;
1755 unsigned short int id
;
1757 unsigned int iLanguage
: 8;
1758 unsigned int _dome
: 9; /* other missing fields */
1759 unsigned int pad
: 15;
1761 unsigned short machine
;
1762 unsigned short fe_major
;
1763 unsigned short fe_minor
;
1764 unsigned short fe_build
;
1765 unsigned short be_major
;
1766 unsigned short be_minor
;
1767 unsigned short be_build
;
1768 struct p_string p_name
;
1773 unsigned short int len
;
1774 unsigned short int id
;
1776 unsigned int iLanguage
: 8;
1777 unsigned int _dome
: 9; /* other missing fields */
1778 unsigned int pad
: 15;
1780 unsigned short machine
;
1781 unsigned short fe_major
;
1782 unsigned short fe_minor
;
1783 unsigned short fe_build
;
1784 unsigned short be_major
;
1785 unsigned short be_minor
;
1786 unsigned short be_build
;
1792 unsigned short int len
;
1793 unsigned short int id
;
1795 unsigned int iLanguage
: 8;
1796 unsigned int _dome
: 12; /* other missing fields */
1797 unsigned int pad
: 12;
1799 unsigned short machine
;
1800 unsigned short fe_major
;
1801 unsigned short fe_minor
;
1802 unsigned short fe_build
;
1803 unsigned short fe_qfe
;
1804 unsigned short be_major
;
1805 unsigned short be_minor
;
1806 unsigned short be_build
;
1807 unsigned short be_qfe
;
1813 unsigned short int len
;
1814 unsigned short int id
;
1815 unsigned int offset
;
1816 unsigned short segment
;
1818 struct p_string p_name
;
1823 unsigned short int len
;
1824 unsigned short int id
;
1826 unsigned int offset
;
1827 unsigned short segment
;
1828 struct p_string p_name
;
1833 unsigned short int len
;
1834 unsigned short int id
;
1836 unsigned int offset
;
1837 unsigned short segment
;
1843 unsigned short int len
;
1844 unsigned short int id
;
1845 unsigned int sumName
;
1847 unsigned short imod
;
1853 unsigned short int len
;
1854 unsigned short int id
;
1855 unsigned int offset
;
1856 unsigned short segment
;
1861 unsigned short int len
;
1862 unsigned short int id
;
1863 unsigned int offset
;
1864 unsigned int unknown
;
1865 } security_cookie_v3
;
1869 unsigned short int len
;
1870 unsigned short int id
;
1871 unsigned int sz_frame
; /* size of frame */
1872 unsigned int unknown2
;
1873 unsigned int unknown3
;
1874 unsigned int sz_saved_regs
; /* size of saved registers from callee */
1875 unsigned int eh_offset
; /* offset for exception handler */
1876 unsigned short eh_sect
; /* section for exception handler */
1882 unsigned short int len
;
1883 unsigned short int id
;
1884 unsigned int offset
;
1885 unsigned short sect_idx
;
1886 unsigned short inst_len
;
1888 } heap_alloc_site_v3
;
1892 unsigned short int len
;
1893 unsigned short int id
;
1895 struct cv_local_varflag varflags
;
1901 unsigned short int len
;
1902 unsigned short int id
;
1903 unsigned int program
;
1904 struct cv_addr_range range
;
1905 struct cv_addr_gap gaps
[0];
1910 unsigned short int len
;
1911 unsigned short int id
;
1912 unsigned int program
;
1913 unsigned int offParent
;
1914 struct cv_addr_range range
;
1915 struct cv_addr_gap gaps
[0];
1916 } defrange_subfield_v3
;
1920 unsigned short int len
;
1921 unsigned short int id
;
1923 unsigned short attr
;
1924 struct cv_addr_range range
;
1925 struct cv_addr_gap gaps
[0];
1926 } defrange_register_v3
;
1930 unsigned short int len
;
1931 unsigned short int id
;
1932 int offFramePointer
;
1933 struct cv_addr_range range
;
1934 struct cv_addr_gap gaps
[0];
1935 } defrange_frameptrrel_v3
;
1939 unsigned short int len
;
1940 unsigned short int id
;
1941 int offFramePointer
;
1942 } defrange_frameptr_relfullscope_v3
;
1946 unsigned short int len
;
1947 unsigned short int id
;
1949 unsigned short attr
;
1950 unsigned int offParent
: 12;
1951 unsigned int padding
: 20;
1952 struct cv_addr_range range
;
1953 struct cv_addr_gap gaps
[0];
1954 } defrange_subfield_register_v3
;
1958 unsigned short int len
;
1959 unsigned short int id
;
1960 unsigned short baseReg
;
1961 unsigned short spilledUdtMember
: 1;
1962 unsigned short padding
: 3;
1963 unsigned short offsetParent
: 12;
1965 struct cv_addr_range range
;
1966 struct cv_addr_gap gaps
[0];
1967 } defrange_registerrel_v3
;
1971 unsigned short int len
;
1972 unsigned short int id
;
1978 unsigned short int len
;
1979 unsigned short int id
;
1980 unsigned int pParent
;
1982 cv_itemid_t inlinee
;
1983 unsigned char binaryAnnotations
[0];
1988 unsigned short int len
;
1989 unsigned short int typ
;
1991 unsigned short sect
;
1992 unsigned short _pad0
;
1998 unsigned short int len
;
1999 unsigned short int id
;
2000 unsigned int pParent
;
2002 cv_itemid_t inlinee
;
2003 unsigned int invocations
;
2004 unsigned char binaryAnnotations
[0];
2009 unsigned short int len
;
2010 unsigned short int id
;
2012 cv_typ_t funcs
[0]; /* array of cuntions, count entries */
2014 unsigned int invocations
[0]; /* array of count entries, paires with funcs */
2020 unsigned short int len
;
2021 unsigned short int id
;
2023 unsigned int modOffset
;
2024 struct cv_local_varflag varflags
;
2030 unsigned short int len
;
2031 unsigned short int id
;
2032 struct p_string pname
;
2037 unsigned short int len
;
2038 unsigned short int id
;
2044 unsigned short int len
;
2045 unsigned short int id
;
2046 unsigned int pParent
;
2048 unsigned int length
;
2049 unsigned int scf
; /* CV_SEPCODEFLAGS */
2051 unsigned int offParent
;
2052 unsigned short int sect
;
2053 unsigned short int sectParent
;
2058 unsigned short int len
;
2059 unsigned short int id
;
2061 unsigned short int seg
;
2062 unsigned short int csz
; /* number of bytes in following array */
2063 char rgsz
[1]; /* array of null terminated strings (bounded by csz) */
2068 unsigned short int len
;
2069 unsigned short int id
;
2070 unsigned int invocations
;
2073 unsigned staInstLive
;
2077 enum BinaryAnnotationOpcode
2081 BA_OP_ChangeCodeOffsetBase
,
2082 BA_OP_ChangeCodeOffset
,
2083 BA_OP_ChangeCodeLength
,
2085 BA_OP_ChangeLineOffset
,
2086 BA_OP_ChangeLineEndDelta
,
2087 BA_OP_ChangeRangeKind
,
2088 BA_OP_ChangeColumnStart
,
2089 BA_OP_ChangeColumnEndDelta
,
2090 BA_OP_ChangeCodeOffsetAndLineOffset
,
2091 BA_OP_ChangeCodeLengthAndCodeOffset
,
2092 BA_OP_ChangeColumnEnd
,
2095 #define S_COMPILE 0x0001
2096 #define S_REGISTER_16t 0x0002
2097 #define S_CONSTANT_16t 0x0003
2098 #define S_UDT_16t 0x0004
2099 #define S_SSEARCH 0x0005
2100 #define S_END 0x0006
2101 #define S_SKIP 0x0007
2102 #define S_CVRESERVE 0x0008
2103 #define S_OBJNAME_ST 0x0009
2104 #define S_ENDARG 0x000a
2105 #define S_COBOLUDT_16t 0x000b
2106 #define S_MANYREG_16t 0x000c
2107 #define S_RETURN 0x000d
2108 #define S_ENTRYTHIS 0x000e
2110 #define S_BPREL32_16t 0x0200
2111 #define S_LDATA32_16t 0x0201
2112 #define S_GDATA32_16t 0x0202
2113 #define S_PUB32_16t 0x0203
2114 #define S_LPROC32_16t 0x0204
2115 #define S_GPROC32_16t 0x0205
2116 #define S_THUNK32_ST 0x0206
2117 #define S_BLOCK32_ST 0x0207
2118 #define S_WITH32_ST 0x0208
2119 #define S_LABEL32_ST 0x0209
2120 #define S_CEXMODEL32 0x020a
2121 #define S_VFTABLE32_16t 0x020b
2122 #define S_REGREL32_16t 0x020c
2123 #define S_LTHREAD32_16t 0x020d
2124 #define S_GTHREAD32_16t 0x020e
2126 #define S_PROCREF_ST 0x0400
2127 #define S_DATAREF_ST 0x0401
2128 #define S_ALIGN 0x0402
2129 #define S_LPROCREF_ST 0x0403
2131 #define S_REGISTER_ST 0x1001 /* Variants with new 32-bit type indices */
2132 #define S_CONSTANT_ST 0x1002
2133 #define S_UDT_ST 0x1003
2134 #define S_COBOLUDT_ST 0x1004
2135 #define S_MANYREG_ST 0x1005
2136 #define S_BPREL32_ST 0x1006
2137 #define S_LDATA32_ST 0x1007
2138 #define S_GDATA32_ST 0x1008
2139 #define S_PUB32_ST 0x1009
2140 #define S_LPROC32_ST 0x100a
2141 #define S_GPROC32_ST 0x100b
2142 #define S_VFTABLE32 0x100c
2143 #define S_REGREL32_ST 0x100d
2144 #define S_LTHREAD32_ST 0x100e
2145 #define S_GTHREAD32_ST 0x100f
2146 #define S_FRAMEPROC 0x1012
2147 #define S_COMPILE2_ST 0x1013
2148 #define S_ANNOTATION 0x1019
2149 #define S_UNAMESPACE_ST 0x1029
2151 #define S_OBJNAME 0x1101
2152 #define S_THUNK32 0x1102
2153 #define S_BLOCK32 0x1103
2154 #define S_WITH32 0x1104
2155 #define S_LABEL32 0x1105
2156 #define S_REGISTER 0x1106
2157 #define S_CONSTANT 0x1107
2158 #define S_UDT 0x1108
2159 #define S_COBOLUDT 0x1109
2160 #define S_MANYREG 0x110A
2161 #define S_BPREL32 0x110B
2162 #define S_LDATA32 0x110C
2163 #define S_GDATA32 0x110D
2164 #define S_PUB32 0x110E
2165 #define S_LPROC32 0x110F
2166 #define S_GPROC32 0x1110
2167 #define S_REGREL32 0x1111
2168 #define S_LTHREAD32 0x1112
2169 #define S_GTHREAD32 0x1113
2170 #define S_LPROCMIPS 0x1114
2171 #define S_GPROCMIPS 0x1115
2172 #define S_COMPILE2 0x1116 /* compiler command line options and build information */
2173 #define S_MANYREG2 0x1117
2174 #define S_LPROCIA64 0x1118
2175 #define S_GPROCIA64 0x1119
2176 #define S_LOCALSLOT 0x111A
2177 #define S_PARAMSLOT 0x111B
2178 #define S_LMANDATA 0x111C
2179 #define S_GMANDATA 0x111D
2180 #define S_MANFRAMEREL 0x111E
2181 #define S_MANREGISTER 0x111F
2182 #define S_MANSLOT 0x1120
2183 #define S_MANMANYREG 0x1121
2184 #define S_MANREGREL 0x1122
2185 #define S_MANMANYREG2 0x1123
2186 #define S_UNAMESPACE 0x1124
2187 #define S_PROCREF 0x1125 /* didn't get the difference between the two */
2188 #define S_DATAREF 0x1126
2189 #define S_LPROCREF 0x1127
2190 #define S_ANNOTATIONREF 0x1128
2191 #define S_TOKENREF 0x1129
2192 #define S_GMANPROC 0x112A
2193 #define S_LMANPROC 0x112B
2194 #define S_TRAMPOLINE 0x112C
2195 #define S_MANCONSTANT 0x112D
2196 #define S_ATTR_FRAMEREL 0x112E
2197 #define S_ATTR_REGISTER 0x112F
2198 #define S_ATTR_REGREL 0x1130
2199 #define S_ATTR_MANYREG 0x1131
2200 #define S_SEPCODE 0x1132
2201 #define S_LOCAL_2005 0x1133
2202 #define S_DEFRANGE_2005 0x1134
2203 #define S_DEFRANGE2_2005 0x1135
2204 #define S_SECTION 0x1136
2205 #define S_COFFGROUP 0x1137
2206 #define S_EXPORT 0x1138
2207 #define S_CALLSITEINFO 0x1139
2208 #define S_FRAMECOOKIE 0x113A
2209 #define S_DISCARDED 0x113B
2210 #define S_COMPILE3 0x113C
2211 #define S_ENVBLOCK 0x113D
2213 #define S_LOCAL 0x113E
2214 #define S_DEFRANGE 0x113F
2215 #define S_DEFRANGE_SUBFIELD 0x1140
2216 #define S_DEFRANGE_REGISTER 0x1141
2217 #define S_DEFRANGE_FRAMEPOINTER_REL 0x1142
2218 #define S_DEFRANGE_SUBFIELD_REGISTER 0x1143
2219 #define S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE 0x1144
2220 #define S_DEFRANGE_REGISTER_REL 0x1145
2221 #define S_LPROC32_ID 0x1146
2222 #define S_GPROC32_ID 0x1147
2223 #define S_LPROCMIPS_ID 0x1148
2224 #define S_GPROCMIPS_ID 0x1149
2225 #define S_LPROCIA64_ID 0x114A
2226 #define S_GPROCIA64_ID 0x114B
2227 #define S_BUILDINFO 0x114C
2228 #define S_INLINESITE 0x114D
2229 #define S_INLINESITE_END 0x114E
2230 #define S_PROC_ID_END 0x114F
2231 #define S_DEFRANGE_HLSL 0x1150
2232 #define S_GDATA_HLSL 0x1151
2233 #define S_LDATA_HLSL 0x1152
2235 #define S_FILESTATIC 0x1153
2236 #define S_ARMSWITCHTABLE 0x1159
2237 #define S_CALLEES 0x115A
2238 #define S_CALLERS 0x115B
2239 #define S_POGODATA 0x115C
2240 #define S_INLINESITE2 0x115D
2241 #define S_HEAPALLOCSITE 0x115E
2242 #define S_MOD_TYPEREF 0x115F
2243 #define S_REF_MINIPDB 0x1160
2244 #define S_PDBMAP 0x1161
2245 #define S_GDATA_HLSL32 0x1162
2246 #define S_LDATA_HLSL32 0x1163
2247 #define S_GDATA_HLSL32_EX 0x1164
2248 #define S_LDATA_HLSL32_EX 0x1165
2250 /* not documented yet on MS CV github repo, but that's how LLVM calls it */
2251 #define S_INLINEES 0x1168
2253 /* ======================================== *
2254 * Line number information
2255 * ======================================== */
2257 enum DEBUG_S_SUBSECTION_TYPE
2259 DEBUG_S_IGNORE
= 0x80000000, /* bit flag: when set, ignore whole subsection content */
2261 DEBUG_S_SYMBOLS
= 0xf1,
2263 DEBUG_S_STRINGTABLE
,
2266 DEBUG_S_INLINEELINES
,
2267 DEBUG_S_CROSSSCOPEIMPORTS
,
2268 DEBUG_S_CROSSSCOPEEXPORTS
,
2271 DEBUG_S_FUNC_MDTOKEN_MAP
,
2272 DEBUG_S_TYPE_MDTOKEN_MAP
,
2273 DEBUG_S_MERGED_ASSEMBLYINPUT
,
2275 DEBUG_S_COFF_SYMBOL_RVA
,
2278 struct CV_DebugSSubsectionHeader_t
2280 enum DEBUG_S_SUBSECTION_TYPE type
;
2284 struct CV_DebugSLinesHeader_t
2287 unsigned short segCon
;
2288 unsigned short flags
;
2292 struct CV_DebugSLinesFileBlockHeader_t
2297 /* followed by two variable length arrays
2298 * CV_Line_t lines[nLines];
2299 * ^ columns present when CV_DebugSLinesHeader_t.flags has CV_LINES_HAVE_COLUMNS set
2300 * CV_Column_t columns[nLines];
2304 #define CV_LINES_HAVE_COLUMNS 0x0001
2309 unsigned linenumStart
:24;
2310 unsigned deltaLineEnd
:7;
2311 unsigned fStatement
:1;
2316 unsigned short offColumnStart
;
2317 unsigned short offColumnEnd
;
2320 struct CV_Checksum_t
/* this one is not defined in microsoft pdb information */
2322 unsigned strOffset
; /* offset in string table for filename */
2323 unsigned char size
; /* size of checksum */
2324 unsigned char method
; /* method used to compute check sum */
2325 unsigned char checksum
[0]; /* (size) bytes */
2326 /* result is padded on 4-byte boundary */
2329 #define CV_INLINEE_SOURCE_LINE_SIGNATURE 0x0
2330 #define CV_INLINEE_SOURCE_LINE_SIGNATURE_EX 0x1
2332 typedef struct CV_InlineeSourceLine_t
2334 cv_itemid_t inlinee
; /* function id */
2335 unsigned fileId
; /* offset in DEBUG_S_FILECHKSMS */
2336 unsigned sourceLineNum
; /* first line number */
2337 } InlineeSourceLine
;
2339 typedef struct CV_InlineeSourceLineEx_t
2341 cv_itemid_t inlinee
; /* function id */
2342 unsigned fileId
; /* offset in DEBUG_S_FILECHKSMS */
2343 unsigned sourceLineNum
; /* first line number */
2344 unsigned int countOfExtraFiles
;
2345 unsigned extraFileId
[0];
2346 } InlineeSourceLineEx
;
2349 /* those are Wine only helpers */
2350 /* align ptr on sz boundary; sz must be a power of 2 */
2351 #define CV_ALIGN(ptr, sz) ((const void*)(((DWORD_PTR)(ptr) + ((sz) - 1)) & ~((sz) - 1)))
2352 /* move after (ptr) record */
2353 #define CV_RECORD_AFTER(ptr) ((const void*)((ptr) + 1))
2354 /* move after (ptr) record and a gap of sz bytes */
2355 #define CV_RECORD_GAP(ptr, sz) ((const void*)((const char*)((ptr) + 1) + (sz)))
2356 /* test whether ptr record is within limit boundary */
2357 #define CV_IS_INSIDE(ptr, limit) (CV_RECORD_AFTER(ptr) <= (const void*)(limit))
2358 #endif /* __WINESRC__ */
2360 struct codeview_linetab_block
2363 unsigned short num_lines
;
2364 unsigned int offsets
[1]; /* in fact num_lines */
2365 /* unsigned short linenos[]; */
2374 /* ======================================== *
2375 * PDB file information
2376 * ======================================== */
2382 unsigned int unknown
;
2385 struct PDB_JG_HEADER
2388 unsigned int signature
;
2389 unsigned int block_size
;
2390 unsigned short free_list
;
2391 unsigned short total_alloc
;
2392 struct PDB_FILE toc
;
2393 unsigned short toc_block
[1];
2396 struct PDB_DS_HEADER
2399 unsigned int block_size
;
2400 unsigned int unknown1
;
2401 unsigned int num_pages
;
2402 unsigned int toc_size
;
2403 unsigned int unknown2
;
2404 unsigned int toc_page
;
2409 unsigned int num_files
;
2410 struct PDB_FILE file
[1];
2415 unsigned int num_files
;
2416 unsigned int file_size
[1];
2421 unsigned int Version
;
2422 unsigned int TimeDateStamp
;
2424 unsigned int cbNames
;
2430 unsigned int Version
;
2431 unsigned int TimeDateStamp
;
2434 unsigned int cbNames
;
2438 typedef struct _PDB_TYPES_OLD
2440 unsigned int version
;
2441 unsigned short first_index
;
2442 unsigned short last_index
;
2443 unsigned int type_size
;
2444 unsigned short hash_file
;
2446 } PDB_TYPES_OLD
, *PPDB_TYPES_OLD
;
2448 typedef struct _PDB_TYPES
2450 unsigned int version
;
2451 unsigned int type_offset
;
2452 unsigned int first_index
;
2453 unsigned int last_index
;
2454 unsigned int type_size
;
2455 unsigned short hash_file
;
2457 unsigned int hash_size
;
2458 unsigned int hash_num_buckets
;
2459 unsigned int hash_offset
;
2460 unsigned int hash_len
;
2461 unsigned int search_offset
;
2462 unsigned int search_len
;
2463 unsigned int type_remap_offset
;
2464 unsigned int type_remap_len
;
2465 } PDB_TYPES
, *PPDB_TYPES
;
2467 typedef struct _PDB_SYMBOL_RANGE
2469 unsigned short segment
;
2470 unsigned short pad1
;
2471 unsigned int offset
;
2473 unsigned int characteristics
;
2474 unsigned short index
;
2475 unsigned short pad2
;
2476 } PDB_SYMBOL_RANGE
, *PPDB_SYMBOL_RANGE
;
2478 typedef struct _PDB_SYMBOL_RANGE_EX
2480 unsigned short segment
;
2481 unsigned short pad1
;
2482 unsigned int offset
;
2484 unsigned int characteristics
;
2485 unsigned short index
;
2486 unsigned short pad2
;
2487 unsigned int timestamp
;
2488 unsigned int unknown
;
2489 } PDB_SYMBOL_RANGE_EX
, *PPDB_SYMBOL_RANGE_EX
;
2491 typedef struct _PDB_SYMBOL_FILE
2493 unsigned int unknown1
;
2494 PDB_SYMBOL_RANGE range
;
2495 unsigned short flag
;
2496 unsigned short file
;
2497 unsigned int symbol_size
;
2498 unsigned int lineno_size
;
2499 unsigned int lineno2_size
;
2500 unsigned int nSrcFiles
;
2501 unsigned int attribute
;
2503 } PDB_SYMBOL_FILE
, *PPDB_SYMBOL_FILE
;
2505 typedef struct _PDB_SYMBOL_FILE_EX
2507 unsigned int unknown1
;
2508 PDB_SYMBOL_RANGE_EX range
;
2509 unsigned short flag
;
2510 unsigned short file
;
2511 unsigned int symbol_size
;
2512 unsigned int lineno_size
;
2513 unsigned int lineno2_size
;
2514 unsigned int nSrcFiles
;
2515 unsigned int attribute
;
2516 unsigned int reserved
[2];
2518 } PDB_SYMBOL_FILE_EX
, *PPDB_SYMBOL_FILE_EX
;
2520 typedef struct _PDB_SYMBOL_SOURCE
2522 unsigned short nModules
;
2523 unsigned short nSrcFiles
;
2524 unsigned short table
[1];
2525 } PDB_SYMBOL_SOURCE
, *PPDB_SYMBOL_SOURCE
;
2527 typedef struct _PDB_SYMBOL_IMPORT
2529 unsigned int unknown1
;
2530 unsigned int unknown2
;
2531 unsigned int TimeDateStamp
;
2534 } PDB_SYMBOL_IMPORT
, *PPDB_SYMBOL_IMPORT
;
2536 typedef struct _PDB_SYMBOLS_OLD
2538 unsigned short global_hash_file
;
2539 unsigned short public_file
;
2540 unsigned short gsym_file
;
2542 unsigned int module_size
;
2543 unsigned int offset_size
;
2544 unsigned int hash_size
;
2545 unsigned int srcmodule_size
;
2546 } PDB_SYMBOLS_OLD
, *PPDB_SYMBOLS_OLD
;
2548 typedef struct _PDB_SYMBOLS
2550 unsigned int signature
;
2551 unsigned int version
;
2553 unsigned short global_hash_file
;
2554 unsigned short flags
;
2555 unsigned short public_file
;
2556 unsigned short bldVer
;
2557 unsigned short gsym_file
;
2558 unsigned short rbldVer
;
2559 unsigned int module_size
;
2560 unsigned int offset_size
;
2561 unsigned int hash_size
;
2562 unsigned int srcmodule_size
;
2563 unsigned int pdbimport_size
;
2564 unsigned int resvd0
;
2565 unsigned int stream_index_size
;
2566 unsigned int unknown2_size
;
2567 unsigned short resvd3
;
2568 unsigned short machine
;
2569 unsigned int resvd4
;
2570 } PDB_SYMBOLS
, *PPDB_SYMBOLS
;
2575 unsigned short unk0
;
2576 unsigned short unk1
;
2577 unsigned short unk2
;
2578 unsigned short unk3
;
2579 unsigned short segments
;
2580 } PDB_STREAM_INDEXES_OLD
;
2585 unsigned short unk0
;
2586 unsigned short unk1
;
2587 unsigned short unk2
;
2588 unsigned short unk3
;
2589 unsigned short segments
;
2590 unsigned short unk4
;
2591 unsigned short unk5
;
2592 unsigned short unk6
;
2593 unsigned short FPO_EXT
;
2594 unsigned short unk7
;
2595 } PDB_STREAM_INDEXES
;
2597 typedef struct _PDB_FPO_DATA
2600 unsigned int func_size
;
2601 unsigned int locals_size
;
2602 unsigned int params_size
;
2603 unsigned int maxstack_size
;
2604 unsigned int str_offset
;
2605 unsigned short prolog_size
;
2606 unsigned short savedregs_size
;
2607 #define PDB_FPO_DFL_SEH 0x00000001
2608 #define PDB_FPO_DFL_EH 0x00000002
2609 #define PDB_FPO_DFL_IN_BLOCK 0x00000004
2613 typedef struct _PDB_STRING_TABLE
2616 unsigned int hash_version
;
2617 unsigned int length
;
2620 /* This header is followed by:
2621 * - a series (of bytes hdr.length) of 0-terminated strings
2622 * - a serialized hash table
2625 /* Header for hash tables inside DBI (aka symbols) stream.
2626 * - The global hash stream contains only the hash table.
2627 * - The public stream contains the same layout for its hash table
2628 * (but other information as well).
2634 unsigned size_hash_records
;
2637 /* This header is followed by:
2638 * - DBI_HASH_RECORDS (on hdr:size_hash_records bytes)
2639 * - a bitmap of DBI_MAX_HASH + 1 entries (on DBI_BITMAP_HASH_SIZE bytes)
2640 * - a table (one entry per present bit in bitmap) as index into hdr:num_records
2649 #define DBI_MAX_HASH 4096
2650 #define DBI_BITMAP_HASH_SIZE ((DBI_MAX_HASH / (8 * sizeof(unsigned)) + 1) * sizeof(unsigned))
2652 /* Header for public stream (from DBI / SYMBOLS stream)
2653 * Followed by a hash table (cf DBI_HASH_HEADER and the following bits)
2658 unsigned address_map_size
;
2659 unsigned num_thunks
;
2660 unsigned size_thunk
;
2661 unsigned short section_thunk_table
;
2662 unsigned short _pad0
;
2663 unsigned offset_thunk_table
;
2665 } DBI_PUBLIC_HEADER
;
2667 #include "poppack.h"
2669 /* ===================================================
2670 * The old CodeView stuff (for NB09 and NB11)
2671 * =================================================== */
2673 #define sstModule 0x120
2674 #define sstTypes 0x121
2675 #define sstPublic 0x122
2676 #define sstPublicSym 0x123
2677 #define sstSymbols 0x124
2678 #define sstAlignSym 0x125
2679 #define sstSrcLnSeg 0x126
2680 #define sstSrcModule 0x127
2681 #define sstLibraries 0x128
2682 #define sstGlobalSym 0x129
2683 #define sstGlobalPub 0x12a
2684 #define sstGlobalTypes 0x12b
2685 #define sstMPC 0x12c
2686 #define sstSegMap 0x12d
2687 #define sstSegName 0x12e
2688 #define sstPreComp 0x12f
2689 #define sstFileIndex 0x133
2690 #define sstStaticSym 0x134
2692 /* overall structure information */
2693 typedef struct OMFSignature
2699 typedef struct OMFSignatureRSDS
2707 typedef struct _CODEVIEW_PDB_DATA
2711 unsigned int timestamp
;
2714 } CODEVIEW_PDB_DATA
, *PCODEVIEW_PDB_DATA
;
2716 typedef struct OMFDirHeader
2718 unsigned short cbDirHeader
;
2719 unsigned short cbDirEntry
;
2721 unsigned int lfoNextDir
;
2725 typedef struct OMFDirEntry
2727 unsigned short SubSection
;
2728 unsigned short iMod
;
2733 /* sstModule subsection */
2735 typedef struct OMFSegDesc
2743 typedef struct OMFModule
2745 unsigned short ovlNumber
;
2746 unsigned short iLib
;
2747 unsigned short cSeg
;
2750 OMFSegDesc SegInfo[cSeg];
2755 typedef struct OMFGlobalTypes
2758 unsigned int cTypes
;
2760 unsigned int offset[cTypes];
2765 /* sstGlobalPub section */
2767 /* Header for symbol table */
2768 typedef struct OMFSymHash
2770 unsigned short symhash
;
2771 unsigned short addrhash
;
2772 unsigned int cbSymbol
;
2773 unsigned int cbHSym
;
2774 unsigned int cbHAddr
;
2777 /* sstSegMap section */
2779 typedef struct OMFSegMapDesc
2781 unsigned short flags
;
2783 unsigned short group
;
2784 unsigned short frame
;
2785 unsigned short iSegName
;
2786 unsigned short iClassName
;
2787 unsigned int offset
;
2791 typedef struct OMFSegMap
2793 unsigned short cSeg
;
2794 unsigned short cSegLog
;
2795 /* OMFSegMapDesc rgDesc[0];*/
2799 /* sstSrcModule section */
2801 typedef struct OMFSourceLine
2804 unsigned short cLnOff
;
2805 unsigned int offset
[1];
2806 unsigned short lineNbr
[1];
2809 typedef struct OMFSourceFile
2811 unsigned short cSeg
;
2812 unsigned short reserved
;
2813 unsigned int baseSrcLn
[1];
2814 unsigned short cFName
;
2818 typedef struct OMFSourceModule
2820 unsigned short cFile
;
2821 unsigned short cSeg
;
2822 unsigned int baseSrcFile
[1];