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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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
;
158 unsigned char bitoff
;
164 unsigned short int len
;
168 unsigned char bitoff
;
173 unsigned short int len
;
177 unsigned short int arrlen
; /* numeric leaf */
179 struct p_string p_name
;
185 unsigned short int len
;
187 unsigned int elemtype
;
188 unsigned int idxtype
;
189 unsigned short int arrlen
; /* numeric leaf */
191 struct p_string p_name
;
197 unsigned short int len
;
199 unsigned int elemtype
;
200 unsigned int idxtype
;
201 unsigned short int arrlen
; /* numeric leaf */
209 unsigned short int len
;
216 unsigned short int structlen
; /* numeric leaf */
218 struct p_string p_name
;
224 unsigned short int len
;
228 unsigned int fieldlist
;
229 unsigned int derived
;
231 unsigned short int structlen
; /* numeric leaf */
233 struct p_string p_name
;
239 unsigned short int len
;
243 unsigned int fieldlist
;
244 unsigned int derived
;
246 unsigned short int structlen
; /* numeric leaf */
254 unsigned short int len
;
259 unsigned short int un_len
; /* numeric leaf */
261 struct p_string p_name
;
267 unsigned short int len
;
271 unsigned int fieldlist
;
272 unsigned short int un_len
; /* numeric leaf */
274 struct p_string p_name
;
280 unsigned short int len
;
284 unsigned int fieldlist
;
285 unsigned short int un_len
; /* numeric leaf */
293 unsigned short int len
;
299 struct p_string p_name
;
304 unsigned short int len
;
310 struct p_string p_name
;
315 unsigned short int len
;
326 unsigned short int len
;
328 unsigned char list
[1];
333 unsigned short int len
;
335 unsigned short int rvtype
;
337 unsigned char reserved
;
338 unsigned short int params
;
339 unsigned short int arglist
;
344 unsigned short int len
;
348 unsigned char reserved
;
349 unsigned short int params
;
350 unsigned int arglist
;
355 unsigned short int len
;
357 unsigned short int rvtype
;
358 unsigned short int class_type
;
359 unsigned short int this_type
;
361 unsigned char reserved
;
362 unsigned short int params
;
363 unsigned short int arglist
;
364 unsigned int this_adjust
;
369 unsigned short int len
;
371 unsigned unknown1
; /* could be this_type ??? */
372 unsigned int class_type
;
375 unsigned char reserved
;
376 unsigned short params
;
377 unsigned int arglist
;
378 unsigned int this_adjust
;
382 union codeview_fieldtype
394 unsigned short int offset
; /* numeric leaf */
402 unsigned short int offset
; /* numeric leaf */
411 unsigned short int vbpoff
; /* numeric leaf */
413 unsigned short int vboff
; /* numeric leaf */
423 unsigned short int vbpoff
; /* numeric leaf */
425 unsigned short int vboff
; /* numeric leaf */
433 unsigned short int value
; /* numeric leaf */
435 struct p_string p_name
;
443 unsigned short int value
; /* numeric leaf */
453 struct p_string p_name
;
461 struct p_string p_name
;
469 unsigned short int offset
; /* numeric leaf */
471 struct p_string p_name
;
480 unsigned short int offset
; /* numeric leaf */
482 struct p_string p_name
;
491 unsigned short int offset
; /* numeric leaf */
493 unsigned char name
[1];
503 struct p_string p_name
;
511 struct p_string p_name
;
519 struct p_string p_name
;
527 struct p_string p_name
;
534 struct p_string p_name
;
542 struct p_string p_name
;
576 struct p_string p_name
;
584 unsigned int vtab_offset
;
585 struct p_string p_name
;
593 struct p_string p_name
;
601 unsigned int vtab_offset
;
602 struct p_string p_name
;
625 struct p_string p_name
;
633 struct p_string p_name
;
641 struct p_string p_name
;
648 * This covers the basic datatypes that VC++ seems to be using these days.
649 * 32 bit mode only. There are additional numbers for the pointers in 16
650 * bit mode. There are many other types listed in the documents, but these
651 * are apparently not used by the compiler, or represent pointer types
654 #define T_NOTYPE 0x0000 /* Notype */
655 #define T_ABS 0x0001 /* Abs */
656 #define T_VOID 0x0003 /* Void */
657 #define T_CHAR 0x0010 /* signed char */
658 #define T_SHORT 0x0011 /* short */
659 #define T_LONG 0x0012 /* long */
660 #define T_QUAD 0x0013 /* long long */
661 #define T_UCHAR 0x0020 /* unsigned char */
662 #define T_USHORT 0x0021 /* unsigned short */
663 #define T_ULONG 0x0022 /* unsigned long */
664 #define T_UQUAD 0x0023 /* unsigned long long */
665 #define T_REAL32 0x0040 /* float */
666 #define T_REAL64 0x0041 /* double */
667 #define T_RCHAR 0x0070 /* real char */
668 #define T_WCHAR 0x0071 /* wide char */
669 #define T_INT4 0x0074 /* int */
670 #define T_UINT4 0x0075 /* unsigned int */
672 #define T_32PVOID 0x0403 /* 32 bit near pointer to void */
673 #define T_32PCHAR 0x0410 /* 16:32 near pointer to signed char */
674 #define T_32PSHORT 0x0411 /* 16:32 near pointer to short */
675 #define T_32PLONG 0x0412 /* 16:32 near pointer to int */
676 #define T_32PQUAD 0x0413 /* 16:32 near pointer to long long */
677 #define T_32PUCHAR 0x0420 /* 16:32 near pointer to unsigned char */
678 #define T_32PUSHORT 0x0421 /* 16:32 near pointer to unsigned short */
679 #define T_32PULONG 0x0422 /* 16:32 near pointer to unsigned int */
680 #define T_32PUQUAD 0x0423 /* 16:32 near pointer to long long */
681 #define T_32PREAL32 0x0440 /* 16:32 near pointer to float */
682 #define T_32PREAL64 0x0441 /* 16:32 near pointer to float */
683 #define T_32PRCHAR 0x0470 /* 16:32 near pointer to real char */
684 #define T_32PWCHAR 0x0471 /* 16:32 near pointer to real char */
685 #define T_32PINT4 0x0474 /* 16:32 near pointer to int */
686 #define T_32PUINT4 0x0475 /* 16:32 near pointer to unsigned int */
689 #define LF_MODIFIER_V1 0x0001
690 #define LF_POINTER_V1 0x0002
691 #define LF_ARRAY_V1 0x0003
692 #define LF_CLASS_V1 0x0004
693 #define LF_STRUCTURE_V1 0x0005
694 #define LF_UNION_V1 0x0006
695 #define LF_ENUM_V1 0x0007
696 #define LF_PROCEDURE_V1 0x0008
697 #define LF_MFUNCTION_V1 0x0009
698 #define LF_VTSHAPE_V1 0x000a
699 #define LF_COBOL0_V1 0x000b
700 #define LF_COBOL1_V1 0x000c
701 #define LF_BARRAY_V1 0x000d
702 #define LF_LABEL_V1 0x000e
703 #define LF_NULL_V1 0x000f
704 #define LF_NOTTRAN_V1 0x0010
705 #define LF_DIMARRAY_V1 0x0011
706 #define LF_VFTPATH_V1 0x0012
707 #define LF_PRECOMP_V1 0x0013
708 #define LF_ENDPRECOMP_V1 0x0014
709 #define LF_OEM_V1 0x0015
710 #define LF_TYPESERVER_V1 0x0016
712 #define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
713 #define LF_POINTER_V2 0x1002
714 #define LF_ARRAY_V2 0x1003
715 #define LF_CLASS_V2 0x1004
716 #define LF_STRUCTURE_V2 0x1005
717 #define LF_UNION_V2 0x1006
718 #define LF_ENUM_V2 0x1007
719 #define LF_PROCEDURE_V2 0x1008
720 #define LF_MFUNCTION_V2 0x1009
721 #define LF_COBOL0_V2 0x100a
722 #define LF_BARRAY_V2 0x100b
723 #define LF_DIMARRAY_V2 0x100c
724 #define LF_VFTPATH_V2 0x100d
725 #define LF_PRECOMP_V2 0x100e
726 #define LF_OEM_V2 0x100f
728 #define LF_SKIP_V1 0x0200
729 #define LF_ARGLIST_V1 0x0201
730 #define LF_DEFARG_V1 0x0202
731 #define LF_LIST_V1 0x0203
732 #define LF_FIELDLIST_V1 0x0204
733 #define LF_DERIVED_V1 0x0205
734 #define LF_BITFIELD_V1 0x0206
735 #define LF_METHODLIST_V1 0x0207
736 #define LF_DIMCONU_V1 0x0208
737 #define LF_DIMCONLU_V1 0x0209
738 #define LF_DIMVARU_V1 0x020a
739 #define LF_DIMVARLU_V1 0x020b
740 #define LF_REFSYM_V1 0x020c
742 #define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
743 #define LF_ARGLIST_V2 0x1201
744 #define LF_DEFARG_V2 0x1202
745 #define LF_FIELDLIST_V2 0x1203
746 #define LF_DERIVED_V2 0x1204
747 #define LF_BITFIELD_V2 0x1205
748 #define LF_METHODLIST_V2 0x1206
749 #define LF_DIMCONU_V2 0x1207
750 #define LF_DIMCONLU_V2 0x1208
751 #define LF_DIMVARU_V2 0x1209
752 #define LF_DIMVARLU_V2 0x120a
755 #define LF_BCLASS_V1 0x0400
756 #define LF_VBCLASS_V1 0x0401
757 #define LF_IVBCLASS_V1 0x0402
758 #define LF_ENUMERATE_V1 0x0403
759 #define LF_FRIENDFCN_V1 0x0404
760 #define LF_INDEX_V1 0x0405
761 #define LF_MEMBER_V1 0x0406
762 #define LF_STMEMBER_V1 0x0407
763 #define LF_METHOD_V1 0x0408
764 #define LF_NESTTYPE_V1 0x0409
765 #define LF_VFUNCTAB_V1 0x040a
766 #define LF_FRIENDCLS_V1 0x040b
767 #define LF_ONEMETHOD_V1 0x040c
768 #define LF_VFUNCOFF_V1 0x040d
769 #define LF_NESTTYPEEX_V1 0x040e
770 #define LF_MEMBERMODIFY_V1 0x040f
772 #define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
773 #define LF_VBCLASS_V2 0x1401
774 #define LF_IVBCLASS_V2 0x1402
775 #define LF_FRIENDFCN_V2 0x1403
776 #define LF_INDEX_V2 0x1404
777 #define LF_MEMBER_V2 0x1405
778 #define LF_STMEMBER_V2 0x1406
779 #define LF_METHOD_V2 0x1407
780 #define LF_NESTTYPE_V2 0x1408
781 #define LF_VFUNCTAB_V2 0x1409
782 #define LF_FRIENDCLS_V2 0x140a
783 #define LF_ONEMETHOD_V2 0x140b
784 #define LF_VFUNCOFF_V2 0x140c
785 #define LF_NESTTYPEEX_V2 0x140d
787 #define LF_ENUMERATE_V3 0x1502
788 #define LF_ARRAY_V3 0x1503
789 #define LF_CLASS_V3 0x1504
790 #define LF_STRUCTURE_V3 0x1505
791 #define LF_UNION_V3 0x1506
792 #define LF_ENUM_V3 0x1507
793 #define LF_MEMBER_V3 0x150d
795 #define LF_NUMERIC 0x8000 /* numeric leaf types */
796 #define LF_CHAR 0x8000
797 #define LF_SHORT 0x8001
798 #define LF_USHORT 0x8002
799 #define LF_LONG 0x8003
800 #define LF_ULONG 0x8004
801 #define LF_REAL32 0x8005
802 #define LF_REAL64 0x8006
803 #define LF_REAL80 0x8007
804 #define LF_REAL128 0x8008
805 #define LF_QUADWORD 0x8009
806 #define LF_UQUADWORD 0x800a
807 #define LF_REAL48 0x800b
808 #define LF_COMPLEX32 0x800c
809 #define LF_COMPLEX64 0x800d
810 #define LF_COMPLEX80 0x800e
811 #define LF_COMPLEX128 0x800f
812 #define LF_VARSTRING 0x8010
814 /* ======================================== *
816 * ======================================== */
818 union codeview_symbol
831 unsigned short segment
;
832 unsigned short symtype
;
833 struct p_string p_name
;
840 unsigned int symtype
;
842 unsigned short segment
;
843 struct p_string p_name
;
850 unsigned int symtype
;
852 unsigned short segment
;
860 unsigned int pparent
;
864 unsigned short segment
;
865 unsigned short thunk_len
;
866 unsigned char thtype
;
867 struct p_string p_name
;
874 unsigned int pparent
;
878 unsigned short segment
;
879 unsigned short thunk_len
;
880 unsigned char thtype
;
888 unsigned int pparent
;
891 unsigned int proc_len
;
892 unsigned int debug_start
;
893 unsigned int debug_end
;
895 unsigned short segment
;
896 unsigned short proctype
;
898 struct p_string p_name
;
905 unsigned int pparent
;
908 unsigned int proc_len
;
909 unsigned int debug_start
;
910 unsigned int debug_end
;
911 unsigned int proctype
;
913 unsigned short segment
;
915 struct p_string p_name
;
922 unsigned int pparent
;
925 unsigned int proc_len
;
926 unsigned int debug_start
;
927 unsigned int debug_end
;
928 unsigned int proctype
;
930 unsigned short segment
;
937 short int len
; /* Total length of this entry */
938 short int id
; /* Always S_BPREL_V1 */
939 unsigned int offset
; /* Stack offset relative to BP */
940 unsigned short symtype
;
941 struct p_string p_name
;
946 short int len
; /* Total length of this entry */
947 short int id
; /* Always S_BPREL_V2 */
948 unsigned int offset
; /* Stack offset relative to EBP */
949 unsigned int symtype
;
950 struct p_string p_name
;
955 short int len
; /* Total length of this entry */
956 short int id
; /* Always S_BPREL_V3 */
957 int offset
; /* Stack offset relative to BP */
958 unsigned int symtype
;
964 short int len
; /* Total length of this entry */
965 short int id
; /* Always S_REGISTER */
968 struct p_string p_name
;
969 /* don't handle register tracking */
974 short int len
; /* Total length of this entry */
975 short int id
; /* Always S_REGISTER_V2 */
976 unsigned int type
; /* check whether type & reg are correct */
978 struct p_string p_name
;
979 /* don't handle register tracking */
990 unsigned short segment
;
991 struct p_string p_name
;
1000 unsigned int length
;
1001 unsigned int offset
;
1002 unsigned short segment
;
1010 unsigned int offset
;
1011 unsigned short segment
;
1012 unsigned char flags
;
1013 struct p_string p_name
;
1020 unsigned int offset
;
1021 unsigned short segment
;
1022 unsigned char flags
;
1030 unsigned short type
;
1031 unsigned short cvalue
; /* numeric leaf */
1033 struct p_string p_name
;
1042 unsigned short cvalue
; /* numeric leaf */
1044 struct p_string p_name
;
1053 unsigned short cvalue
;
1063 unsigned short type
;
1064 struct p_string p_name
;
1072 struct p_string p_name
;
1087 unsigned int unknown
;
1088 struct p_string p_name
;
1095 unsigned unknown1
[4];
1096 unsigned short unknown2
;
1097 struct p_string p_name
;
1104 unsigned int unknown
;
1109 #define S_COMPILAND_V1 0x0001
1110 #define S_REGISTER_V1 0x0002
1111 #define S_CONSTANT_V1 0x0003
1112 #define S_UDT_V1 0x0004
1113 #define S_SSEARCH_V1 0x0005
1114 #define S_END_V1 0x0006
1115 #define S_SKIP_V1 0x0007
1116 #define S_CVRESERVE_V1 0x0008
1117 #define S_OBJNAME_V1 0x0009
1118 #define S_ENDARG_V1 0x000a
1119 #define S_COBOLUDT_V1 0x000b
1120 #define S_MANYREG_V1 0x000c
1121 #define S_RETURN_V1 0x000d
1122 #define S_ENTRYTHIS_V1 0x000e
1124 #define S_BPREL_V1 0x0200
1125 #define S_LDATA_V1 0x0201
1126 #define S_GDATA_V1 0x0202
1127 #define S_PUB_V1 0x0203
1128 #define S_LPROC_V1 0x0204
1129 #define S_GPROC_V1 0x0205
1130 #define S_THUNK_V1 0x0206
1131 #define S_BLOCK_V1 0x0207
1132 #define S_WITH_V1 0x0208
1133 #define S_LABEL_V1 0x0209
1134 #define S_CEXMODEL_V1 0x020a
1135 #define S_VFTPATH_V1 0x020b
1136 #define S_REGREL_V1 0x020c
1137 #define S_LTHREAD_V1 0x020d
1138 #define S_GTHREAD_V1 0x020e
1140 #define S_PROCREF_V1 0x0400
1141 #define S_DATAREF_V1 0x0401
1142 #define S_ALIGN_V1 0x0402
1143 #define S_LPROCREF_V1 0x0403
1145 #define S_REGISTER_V2 0x1001 /* Variants with new 32-bit type indices */
1146 #define S_CONSTANT_V2 0x1002
1147 #define S_UDT_V2 0x1003
1148 #define S_COBOLUDT_V2 0x1004
1149 #define S_MANYREG_V2 0x1005
1150 #define S_BPREL_V2 0x1006
1151 #define S_LDATA_V2 0x1007
1152 #define S_GDATA_V2 0x1008
1153 #define S_PUB_V2 0x1009
1154 #define S_LPROC_V2 0x100a
1155 #define S_GPROC_V2 0x100b
1156 #define S_VFTTABLE_V2 0x100c
1157 #define S_REGREL_V2 0x100d
1158 #define S_LTHREAD_V2 0x100e
1159 #define S_GTHREAD_V2 0x100f
1161 #define S_XXXXXXXXX_32 0x1012 /* seems linked to a function, content unknown */
1163 #define S_COMPILAND_V2 0x1013
1165 #define S_COMPILAND_V3 0x1101
1166 #define S_THUNK_V3 0x1102
1167 #define S_BLOCK_V3 0x1103
1168 #define S_LABEL_V3 0x1105
1169 #define S_CONSTANT_V3 0x1107
1170 #define S_UDT_V3 0x1108
1171 #define S_BPREL_V3 0x110B
1172 #define S_LDATA_V3 0x110C
1173 #define S_GDATA_V3 0x110D
1174 #define S_PUB_DATA_V3 0x110E
1175 #define S_LPROC_V3 0x110F
1176 #define S_GPROC_V3 0x1110
1177 #define S_MSTOOL_V3 0x1116 /* not really understood */
1178 #define S_PUB_FUNC1_V3 0x1125 /* didn't get the difference between the two */
1179 #define S_PUB_FUNC2_V3 0x1127
1181 /* ======================================== *
1182 * Line number information
1183 * ======================================== */
1190 const unsigned int* ui
;
1199 struct codeview_linetab
1205 struct symt_compiland
* compiland
;
1206 const unsigned short* linetab
;
1207 const unsigned int* offtab
;
1211 /* ======================================== *
1212 * PDB file information
1213 * ======================================== */
1222 struct PDB_JG_HEADER
1229 struct PDB_FILE toc
;
1233 struct PDB_DS_HEADER
1247 struct PDB_FILE file
[1];
1259 DWORD TimeDateStamp
;
1268 DWORD TimeDateStamp
;
1275 typedef struct _PDB_TYPES_OLD
1283 } PDB_TYPES_OLD
, *PPDB_TYPES_OLD
;
1285 typedef struct _PDB_TYPES
1298 DWORD search_offset
;
1300 DWORD unknown_offset
;
1302 } PDB_TYPES
, *PPDB_TYPES
;
1304 typedef struct _PDB_SYMBOL_RANGE
1310 DWORD characteristics
;
1313 } PDB_SYMBOL_RANGE
, *PPDB_SYMBOL_RANGE
;
1315 typedef struct _PDB_SYMBOL_RANGE_EX
1321 DWORD characteristics
;
1326 } PDB_SYMBOL_RANGE_EX
, *PPDB_SYMBOL_RANGE_EX
;
1328 typedef struct _PDB_SYMBOL_FILE
1331 PDB_SYMBOL_RANGE range
;
1340 } PDB_SYMBOL_FILE
, *PPDB_SYMBOL_FILE
;
1342 typedef struct _PDB_SYMBOL_FILE_EX
1345 PDB_SYMBOL_RANGE_EX range
;
1355 } PDB_SYMBOL_FILE_EX
, *PPDB_SYMBOL_FILE_EX
;
1357 typedef struct _PDB_SYMBOL_SOURCE
1362 } PDB_SYMBOL_SOURCE
, *PPDB_SYMBOL_SOURCE
;
1364 typedef struct _PDB_SYMBOL_IMPORT
1368 DWORD TimeDateStamp
;
1371 } PDB_SYMBOL_IMPORT
, *PPDB_SYMBOL_IMPORT
;
1373 typedef struct _PDB_SYMBOLS_OLD
1382 DWORD srcmodule_size
;
1383 } PDB_SYMBOLS_OLD
, *PPDB_SYMBOLS_OLD
;
1385 typedef struct _PDB_SYMBOLS
1396 DWORD srcmodule_size
;
1397 DWORD pdbimport_size
;
1399 } PDB_SYMBOLS
, *PPDB_SYMBOLS
;
1401 #include "poppack.h"
1403 /* ----------------------------------------------
1404 * Information used for parsing
1405 * ---------------------------------------------- */
1413 struct msc_debug_info
1415 struct module
* module
;
1417 const IMAGE_SECTION_HEADER
* sectp
;
1419 const OMAP_DATA
* omapp
;
1424 extern BOOL
coff_process_info(const struct msc_debug_info
* msc_dbg
);