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 greated 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;
115 unsigned short int len;
121 unsigned short int len;
129 unsigned short int len;
137 unsigned short int len;
141 struct p_string p_name;
146 unsigned short int len;
148 unsigned int datatype;
149 unsigned int attribute;
150 struct p_string p_name;
155 unsigned short int len;
159 unsigned short int arrlen; /* numeric leaf */
161 struct p_string p_name;
167 unsigned short int len;
169 unsigned int elemtype;
170 unsigned int idxtype;
171 unsigned short int arrlen; /* numeric leaf */
173 struct p_string p_name;
179 unsigned short int len;
181 unsigned int elemtype;
182 unsigned int idxtype;
183 unsigned short int arrlen; /* numeric leaf */
191 unsigned short int len;
198 unsigned short int structlen; /* numeric leaf */
200 struct p_string p_name;
206 unsigned short int len;
210 unsigned int fieldlist;
211 unsigned int derived;
213 unsigned short int structlen; /* numeric leaf */
215 struct p_string p_name;
221 unsigned short int len;
225 unsigned int fieldlist;
226 unsigned int derived;
228 unsigned short int structlen; /* numeric leaf */
236 unsigned short int len;
241 unsigned short int un_len; /* numeric leaf */
243 struct p_string p_name;
249 unsigned short int len;
253 unsigned int fieldlist;
254 unsigned short int un_len; /* numeric leaf */
256 struct p_string p_name;
262 unsigned short int len;
266 unsigned int fieldlist;
267 unsigned short int un_len; /* numeric leaf */
275 unsigned short int len;
281 struct p_string p_name;
286 unsigned short int len;
291 unsigned int fieldlist;
292 struct p_string p_name;
297 unsigned short int len;
302 unsigned int fieldlist;
308 unsigned short int len;
310 unsigned short int rvtype;
312 unsigned char reserved;
313 unsigned short int params;
314 unsigned short int arglist;
319 unsigned short int len;
323 unsigned char reserved;
324 unsigned short int params;
325 unsigned int arglist;
330 unsigned short int len;
332 unsigned short int rvtype;
333 unsigned short int class_type;
334 unsigned short int this_type;
336 unsigned char reserved;
337 unsigned short int params;
338 unsigned short int arglist;
339 unsigned int this_adjust;
344 unsigned short int len;
347 unsigned int class_type;
350 unsigned char reserved;
351 unsigned short params;
352 unsigned int arglist;
353 unsigned int this_adjust;
357 union codeview_reftype
361 unsigned short int len;
367 unsigned short int len;
369 unsigned char list[1];
374 unsigned short int len;
377 unsigned char bitoff;
383 unsigned short int len;
387 unsigned char bitoff;
392 unsigned short int len;
395 unsigned short args[1];
400 unsigned short int len;
408 union codeview_fieldtype
420 unsigned short int offset; /* numeric leaf */
428 unsigned short int offset; /* numeric leaf */
437 unsigned short int vbpoff; /* numeric leaf */
439 unsigned short int vboff; /* numeric leaf */
449 unsigned short int vbpoff; /* numeric leaf */
451 unsigned short int vboff; /* numeric leaf */
459 unsigned short int value; /* numeric leaf */
461 struct p_string p_name;
469 unsigned short int value; /* numeric leaf */
479 struct p_string p_name;
487 struct p_string p_name;
495 unsigned short int offset; /* numeric leaf */
497 struct p_string p_name;
506 unsigned short int offset; /* numeric leaf */
508 struct p_string p_name;
517 unsigned short int offset; /* numeric leaf */
519 unsigned char name[1];
529 struct p_string p_name;
537 struct p_string p_name;
553 struct p_string p_name;
561 struct p_string p_name;
576 struct p_string p_name;
584 struct p_string p_name;
626 struct p_string p_name;
634 struct p_string p_name;
650 unsigned int vtab_offset;
651 struct p_string p_name;
659 unsigned int vtab_offset;
660 struct p_string p_name;
668 unsigned int vtab_offset;
692 struct p_string p_name;
700 struct p_string p_name;
708 struct p_string p_name;
715 * This covers the basic datatypes that VC++ seems to be using these days.
716 * 32 bit mode only. There are additional numbers for the pointers in 16
717 * bit mode. There are many other types listed in the documents, but these
718 * are apparently not used by the compiler, or represent pointer types
721 #define T_NOTYPE 0x0000 /* Notype */
722 #define T_ABS 0x0001 /* Abs */
723 #define T_VOID 0x0003 /* Void */
724 #define T_CHAR 0x0010 /* signed char */
725 #define T_SHORT 0x0011 /* short */
726 #define T_LONG 0x0012 /* long */
727 #define T_QUAD 0x0013 /* long long */
728 #define T_UCHAR 0x0020 /* unsigned char */
729 #define T_USHORT 0x0021 /* unsigned short */
730 #define T_ULONG 0x0022 /* unsigned long */
731 #define T_UQUAD 0x0023 /* unsigned long long */
732 #define T_REAL32 0x0040 /* float */
733 #define T_REAL64 0x0041 /* double */
734 #define T_RCHAR 0x0070 /* real char */
735 #define T_WCHAR 0x0071 /* wide char */
736 #define T_INT4 0x0074 /* int */
737 #define T_UINT4 0x0075 /* unsigned int */
739 #define T_32PVOID 0x0403 /* 32 bit near pointer to void */
740 #define T_32PCHAR 0x0410 /* 16:32 near pointer to signed char */
741 #define T_32PSHORT 0x0411 /* 16:32 near pointer to short */
742 #define T_32PLONG 0x0412 /* 16:32 near pointer to int */
743 #define T_32PQUAD 0x0413 /* 16:32 near pointer to long long */
744 #define T_32PUCHAR 0x0420 /* 16:32 near pointer to unsigned char */
745 #define T_32PUSHORT 0x0421 /* 16:32 near pointer to unsigned short */
746 #define T_32PULONG 0x0422 /* 16:32 near pointer to unsigned int */
747 #define T_32PUQUAD 0x0423 /* 16:32 near pointer to long long */
748 #define T_32PREAL32 0x0440 /* 16:32 near pointer to float */
749 #define T_32PREAL64 0x0441 /* 16:32 near pointer to float */
750 #define T_32PRCHAR 0x0470 /* 16:32 near pointer to real char */
751 #define T_32PWCHAR 0x0471 /* 16:32 near pointer to real char */
752 #define T_32PINT4 0x0474 /* 16:32 near pointer to int */
753 #define T_32PUINT4 0x0475 /* 16:32 near pointer to unsigned int */
756 #define LF_MODIFIER_V1 0x0001
757 #define LF_POINTER_V1 0x0002
758 #define LF_ARRAY_V1 0x0003
759 #define LF_CLASS_V1 0x0004
760 #define LF_STRUCTURE_V1 0x0005
761 #define LF_UNION_V1 0x0006
762 #define LF_ENUM_V1 0x0007
763 #define LF_PROCEDURE_V1 0x0008
764 #define LF_MFUNCTION_V1 0x0009
765 #define LF_VTSHAPE_V1 0x000a
766 #define LF_COBOL0_V1 0x000b
767 #define LF_COBOL1_V1 0x000c
768 #define LF_BARRAY_V1 0x000d
769 #define LF_LABEL_V1 0x000e
770 #define LF_NULL_V1 0x000f
771 #define LF_NOTTRAN_V1 0x0010
772 #define LF_DIMARRAY_V1 0x0011
773 #define LF_VFTPATH_V1 0x0012
774 #define LF_PRECOMP_V1 0x0013
775 #define LF_ENDPRECOMP_V1 0x0014
776 #define LF_OEM_V1 0x0015
777 #define LF_TYPESERVER_V1 0x0016
779 #define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
780 #define LF_POINTER_V2 0x1002
781 #define LF_ARRAY_V2 0x1003
782 #define LF_CLASS_V2 0x1004
783 #define LF_STRUCTURE_V2 0x1005
784 #define LF_UNION_V2 0x1006
785 #define LF_ENUM_V2 0x1007
786 #define LF_PROCEDURE_V2 0x1008
787 #define LF_MFUNCTION_V2 0x1009
788 #define LF_COBOL0_V2 0x100a
789 #define LF_BARRAY_V2 0x100b
790 #define LF_DIMARRAY_V2 0x100c
791 #define LF_VFTPATH_V2 0x100d
792 #define LF_PRECOMP_V2 0x100e
793 #define LF_OEM_V2 0x100f
795 #define LF_SKIP_V1 0x0200
796 #define LF_ARGLIST_V1 0x0201
797 #define LF_DEFARG_V1 0x0202
798 #define LF_LIST_V1 0x0203
799 #define LF_FIELDLIST_V1 0x0204
800 #define LF_DERIVED_V1 0x0205
801 #define LF_BITFIELD_V1 0x0206
802 #define LF_METHODLIST_V1 0x0207
803 #define LF_DIMCONU_V1 0x0208
804 #define LF_DIMCONLU_V1 0x0209
805 #define LF_DIMVARU_V1 0x020a
806 #define LF_DIMVARLU_V1 0x020b
807 #define LF_REFSYM_V1 0x020c
809 #define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
810 #define LF_ARGLIST_V2 0x1201
811 #define LF_DEFARG_V2 0x1202
812 #define LF_FIELDLIST_V2 0x1203
813 #define LF_DERIVED_V2 0x1204
814 #define LF_BITFIELD_V2 0x1205
815 #define LF_METHODLIST_V2 0x1206
816 #define LF_DIMCONU_V2 0x1207
817 #define LF_DIMCONLU_V2 0x1208
818 #define LF_DIMVARU_V2 0x1209
819 #define LF_DIMVARLU_V2 0x120a
822 #define LF_BCLASS_V1 0x0400
823 #define LF_VBCLASS_V1 0x0401
824 #define LF_IVBCLASS_V1 0x0402
825 #define LF_ENUMERATE_V1 0x0403
826 #define LF_FRIENDFCN_V1 0x0404
827 #define LF_INDEX_V1 0x0405
828 #define LF_MEMBER_V1 0x0406
829 #define LF_STMEMBER_V1 0x0407
830 #define LF_METHOD_V1 0x0408
831 #define LF_NESTTYPE_V1 0x0409
832 #define LF_VFUNCTAB_V1 0x040a
833 #define LF_FRIENDCLS_V1 0x040b
834 #define LF_ONEMETHOD_V1 0x040c
835 #define LF_VFUNCOFF_V1 0x040d
836 #define LF_NESTTYPEEX_V1 0x040e
837 #define LF_MEMBERMODIFY_V1 0x040f
839 #define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
840 #define LF_VBCLASS_V2 0x1401
841 #define LF_IVBCLASS_V2 0x1402
842 #define LF_FRIENDFCN_V2 0x1403
843 #define LF_INDEX_V2 0x1404
844 #define LF_MEMBER_V2 0x1405
845 #define LF_STMEMBER_V2 0x1406
846 #define LF_METHOD_V2 0x1407
847 #define LF_NESTTYPE_V2 0x1408
848 #define LF_VFUNCTAB_V2 0x1409
849 #define LF_FRIENDCLS_V2 0x140a
850 #define LF_ONEMETHOD_V2 0x140b
851 #define LF_VFUNCOFF_V2 0x140c
852 #define LF_NESTTYPEEX_V2 0x140d
854 #define LF_ENUMERATE_V3 0x1502
855 #define LF_ARRAY_V3 0x1503
856 #define LF_CLASS_V3 0x1504
857 #define LF_STRUCTURE_V3 0x1505
858 #define LF_UNION_V3 0x1506
859 #define LF_ENUM_V3 0x1507
860 #define LF_MEMBER_V3 0x150d
861 #define LF_STMEMBER_V3 0x150e
862 #define LF_METHOD_V3 0x150f
863 #define LF_NESTTYPE_V3 0x1510
864 #define LF_ONEMETHOD_V3 0x1511
866 #define LF_NUMERIC 0x8000 /* numeric leaf types */
867 #define LF_CHAR 0x8000
868 #define LF_SHORT 0x8001
869 #define LF_USHORT 0x8002
870 #define LF_LONG 0x8003
871 #define LF_ULONG 0x8004
872 #define LF_REAL32 0x8005
873 #define LF_REAL64 0x8006
874 #define LF_REAL80 0x8007
875 #define LF_REAL128 0x8008
876 #define LF_QUADWORD 0x8009
877 #define LF_UQUADWORD 0x800a
878 #define LF_REAL48 0x800b
879 #define LF_COMPLEX32 0x800c
880 #define LF_COMPLEX64 0x800d
881 #define LF_COMPLEX80 0x800e
882 #define LF_COMPLEX128 0x800f
883 #define LF_VARSTRING 0x8010
885 /* ======================================== *
887 * ======================================== */
889 union codeview_symbol
902 unsigned short segment;
903 unsigned short symtype;
904 struct p_string p_name;
911 unsigned int symtype;
913 unsigned short segment;
914 struct p_string p_name;
921 unsigned int symtype;
923 unsigned short segment;
931 unsigned int pparent;
935 unsigned short segment;
936 unsigned short thunk_len;
937 unsigned char thtype;
938 struct p_string p_name;
945 unsigned int pparent;
949 unsigned short segment;
950 unsigned short thunk_len;
951 unsigned char thtype;
959 unsigned int pparent;
962 unsigned int proc_len;
963 unsigned int debug_start;
964 unsigned int debug_end;
966 unsigned short segment;
967 unsigned short proctype;
969 struct p_string p_name;
976 unsigned int pparent;
979 unsigned int proc_len;
980 unsigned int debug_start;
981 unsigned int debug_end;
982 unsigned int proctype;
984 unsigned short segment;
986 struct p_string p_name;
993 unsigned int pparent;
996 unsigned int proc_len;
997 unsigned int debug_start;
998 unsigned int debug_end;
999 unsigned int proctype;
1000 unsigned int offset;
1001 unsigned short segment;
1002 unsigned char flags;
1010 unsigned int symtype;
1011 unsigned int offset;
1012 unsigned short segment;
1013 struct p_string p_name;
1020 unsigned int symtype;
1021 unsigned int offset;
1022 unsigned short segment;
1028 short int len; /* Total length of this entry */
1029 short int id; /* Always S_BPREL_V1 */
1030 unsigned int offset; /* Stack offset relative to BP */
1031 unsigned short symtype;
1032 struct p_string p_name;
1037 short int len; /* Total length of this entry */
1038 short int id; /* Always S_BPREL_V2 */
1039 unsigned int offset; /* Stack offset relative to EBP */
1040 unsigned int symtype;
1041 struct p_string p_name;
1046 short int len; /* Total length of this entry */
1047 short int id; /* Always S_BPREL_V3 */
1048 int offset; /* Stack offset relative to BP */
1049 unsigned int symtype;
1055 short int len; /* Total length of this entry */
1056 short int id; /* Always S_REGISTER */
1057 unsigned short type;
1059 struct p_string p_name;
1060 /* don't handle register tracking */
1065 short int len; /* Total length of this entry */
1066 short int id; /* Always S_REGISTER_V2 */
1067 unsigned int type; /* check whether type & reg are correct */
1069 struct p_string p_name;
1070 /* don't handle register tracking */
1075 short int len; /* Total length of this entry */
1076 short int id; /* Always S_REGISTER_V3 */
1077 unsigned int type; /* check whether type & reg are correct */
1080 /* don't handle register tracking */
1087 unsigned int parent;
1089 unsigned int length;
1090 unsigned int offset;
1091 unsigned short segment;
1092 struct p_string p_name;
1099 unsigned int parent;
1101 unsigned int length;
1102 unsigned int offset;
1103 unsigned short segment;
1111 unsigned int offset;
1112 unsigned short segment;
1113 unsigned char flags;
1114 struct p_string p_name;
1121 unsigned int offset;
1122 unsigned short segment;
1123 unsigned char flags;
1131 unsigned short type;
1132 unsigned short cvalue; /* numeric leaf */
1134 struct p_string p_name;
1143 unsigned short cvalue; /* numeric leaf */
1145 struct p_string p_name;
1154 unsigned short cvalue;
1164 unsigned short type;
1165 struct p_string p_name;
1173 struct p_string p_name;
1189 struct p_string p_name;
1196 unsigned int unknown;
1197 struct p_string p_name;
1204 unsigned unknown1[4];
1205 unsigned short unknown2;
1206 struct p_string p_name;
1213 unsigned int unknown;
1221 unsigned int offset;
1222 unsigned short segment;
1226 #define S_COMPILAND_V1 0x0001
1227 #define S_REGISTER_V1 0x0002
1228 #define S_CONSTANT_V1 0x0003
1229 #define S_UDT_V1 0x0004
1230 #define S_SSEARCH_V1 0x0005
1231 #define S_END_V1 0x0006
1232 #define S_SKIP_V1 0x0007
1233 #define S_CVRESERVE_V1 0x0008
1234 #define S_OBJNAME_V1 0x0009
1235 #define S_ENDARG_V1 0x000a
1236 #define S_COBOLUDT_V1 0x000b
1237 #define S_MANYREG_V1 0x000c
1238 #define S_RETURN_V1 0x000d
1239 #define S_ENTRYTHIS_V1 0x000e
1241 #define S_BPREL_V1 0x0200
1242 #define S_LDATA_V1 0x0201
1243 #define S_GDATA_V1 0x0202
1244 #define S_PUB_V1 0x0203
1245 #define S_LPROC_V1 0x0204
1246 #define S_GPROC_V1 0x0205
1247 #define S_THUNK_V1 0x0206
1248 #define S_BLOCK_V1 0x0207
1249 #define S_WITH_V1 0x0208
1250 #define S_LABEL_V1 0x0209
1251 #define S_CEXMODEL_V1 0x020a
1252 #define S_VFTPATH_V1 0x020b
1253 #define S_REGREL_V1 0x020c
1254 #define S_LTHREAD_V1 0x020d
1255 #define S_GTHREAD_V1 0x020e
1257 #define S_PROCREF_V1 0x0400
1258 #define S_DATAREF_V1 0x0401
1259 #define S_ALIGN_V1 0x0402
1260 #define S_LPROCREF_V1 0x0403
1262 #define S_REGISTER_V2 0x1001 /* Variants with new 32-bit type indices */
1263 #define S_CONSTANT_V2 0x1002
1264 #define S_UDT_V2 0x1003
1265 #define S_COBOLUDT_V2 0x1004
1266 #define S_MANYREG_V2 0x1005
1267 #define S_BPREL_V2 0x1006
1268 #define S_LDATA_V2 0x1007
1269 #define S_GDATA_V2 0x1008
1270 #define S_PUB_V2 0x1009
1271 #define S_LPROC_V2 0x100a
1272 #define S_GPROC_V2 0x100b
1273 #define S_VFTTABLE_V2 0x100c
1274 #define S_REGREL_V2 0x100d
1275 #define S_LTHREAD_V2 0x100e
1276 #define S_GTHREAD_V2 0x100f
1278 #define S_XXXXXXXXX_32 0x1012 /* seems linked to a function, content unknown */
1280 #define S_COMPILAND_V2 0x1013
1282 #define S_COMPILAND_V3 0x1101
1283 #define S_THUNK_V3 0x1102
1284 #define S_BLOCK_V3 0x1103
1285 #define S_LABEL_V3 0x1105
1286 #define S_REGISTER_V3 0x1106
1287 #define S_CONSTANT_V3 0x1107
1288 #define S_UDT_V3 0x1108
1289 #define S_BPREL_V3 0x110B
1290 #define S_LDATA_V3 0x110C
1291 #define S_GDATA_V3 0x110D
1292 #define S_PUB_V3 0x110E
1293 #define S_LPROC_V3 0x110F
1294 #define S_GPROC_V3 0x1110
1295 #define S_MSTOOL_V3 0x1116 /* not really understood */
1296 #define S_PUB_FUNC1_V3 0x1125 /* didn't get the difference between the two */
1297 #define S_PUB_FUNC2_V3 0x1127
1299 /* ======================================== *
1300 * Line number information
1301 * ======================================== */
1306 const unsigned char* uc;
1309 const unsigned int* ui;
1318 struct codeview_linetab
1324 unsigned int source;
1325 const unsigned short* linetab;
1326 const unsigned int* offtab;
1330 /* ======================================== *
1331 * PDB file information
1332 * ======================================== */
1341 struct PDB_JG_HEADER
1348 struct PDB_FILE toc;
1352 struct PDB_DS_HEADER
1366 struct PDB_FILE file[1];
1378 DWORD TimeDateStamp;
1387 DWORD TimeDateStamp;
1394 typedef struct _PDB_TYPES_OLD
1402 } PDB_TYPES_OLD, *PPDB_TYPES_OLD;
1404 typedef struct _PDB_TYPES
1417 DWORD search_offset;
1419 DWORD unknown_offset;
1421 } PDB_TYPES, *PPDB_TYPES;
1423 typedef struct _PDB_SYMBOL_RANGE
1429 DWORD characteristics;
1432 } PDB_SYMBOL_RANGE, *PPDB_SYMBOL_RANGE;
1434 typedef struct _PDB_SYMBOL_RANGE_EX
1440 DWORD characteristics;
1445 } PDB_SYMBOL_RANGE_EX, *PPDB_SYMBOL_RANGE_EX;
1447 typedef struct _PDB_SYMBOL_FILE
1450 PDB_SYMBOL_RANGE range;
1459 } PDB_SYMBOL_FILE, *PPDB_SYMBOL_FILE;
1461 typedef struct _PDB_SYMBOL_FILE_EX
1464 PDB_SYMBOL_RANGE_EX range;
1474 } PDB_SYMBOL_FILE_EX, *PPDB_SYMBOL_FILE_EX;
1476 typedef struct _PDB_SYMBOL_SOURCE
1481 } PDB_SYMBOL_SOURCE, *PPDB_SYMBOL_SOURCE;
1483 typedef struct _PDB_SYMBOL_IMPORT
1487 DWORD TimeDateStamp;
1490 } PDB_SYMBOL_IMPORT, *PPDB_SYMBOL_IMPORT;
1492 typedef struct _PDB_SYMBOLS_OLD
1501 DWORD srcmodule_size;
1502 } PDB_SYMBOLS_OLD, *PPDB_SYMBOLS_OLD;
1504 typedef struct _PDB_SYMBOLS
1515 DWORD srcmodule_size;
1516 DWORD pdbimport_size;
1518 } PDB_SYMBOLS, *PPDB_SYMBOLS;
1520 #include "poppack.h"
1522 /* ----------------------------------------------
1523 * Information used for parsing
1524 * ---------------------------------------------- */
1532 struct msc_debug_info
1534 struct module* module;
1536 const IMAGE_SECTION_HEADER* sectp;
1538 const OMAP_DATA* omapp;
1543 extern BOOL coff_process_info(const struct msc_debug_info* msc_dbg);
1545 /* ===================================================
1546 * The old CodeView stuff (for NB09 and NB11)
1547 * =================================================== */
1549 #define sstModule 0x120
1550 #define sstTypes 0x121
1551 #define sstPublic 0x122
1552 #define sstPublicSym 0x123
1553 #define sstSymbols 0x124
1554 #define sstAlignSym 0x125
1555 #define sstSrcLnSeg 0x126
1556 #define sstSrcModule 0x127
1557 #define sstLibraries 0x128
1558 #define sstGlobalSym 0x129
1559 #define sstGlobalPub 0x12a
1560 #define sstGlobalTypes 0x12b
1561 #define sstMPC 0x12c
1562 #define sstSegMap 0x12d
1563 #define sstSegName 0x12e
1564 #define sstPreComp 0x12f
1565 #define sstFileIndex 0x133
1566 #define sstStaticSym 0x134
1568 typedef struct _CODEVIEW_HEADER_NBxx
1572 } CODEVIEW_HEADER_NBxx,* PCODEVIEW_HEADER_NBxx;
1574 typedef struct _CODEVIEW_HEADER_RSDS
1580 } CODEVIEW_HEADER_RSDS,* PCODEVIEW_HEADER_RSDS;
1582 typedef struct _CODEVIEW_PDB_DATA
1587 } CODEVIEW_PDB_DATA, *PCODEVIEW_PDB_DATA;
1589 typedef struct _CV_DIRECTORY_HEADER
1596 } CV_DIRECTORY_HEADER, *PCV_DIRECTORY_HEADER;
1598 typedef struct _CV_DIRECTORY_ENTRY
1604 } CV_DIRECTORY_ENTRY, *PCV_DIRECTORY_ENTRY;
1606 typedef struct _CV_ENTRY_MODULE_SEGINFO
1612 } CV_ENTRY_MODULE_SEGINFO;
1614 typedef struct _CV_ENTRY_MODULE
1621 CV_ENTRY_MODULE_SEGINFO SegInfo[cSeg];
1626 typedef struct _CV_ENTRY_GLOBAL_TYPES
1631 DWORD offset[cTypes];
1634 } CV_ENTRY_GLOBAL_TYPES;