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
;
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
;
346 unsigned unknown1
; /* could be this_type ??? */
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
;
545 struct p_string p_name
;
553 struct p_string p_name
;
560 struct p_string p_name
;
568 struct p_string p_name
;
602 struct p_string p_name
;
610 unsigned int vtab_offset
;
611 struct p_string p_name
;
619 struct p_string p_name
;
627 unsigned int vtab_offset
;
628 struct p_string p_name
;
651 struct p_string p_name
;
659 struct p_string p_name
;
667 struct p_string p_name
;
674 * This covers the basic datatypes that VC++ seems to be using these days.
675 * 32 bit mode only. There are additional numbers for the pointers in 16
676 * bit mode. There are many other types listed in the documents, but these
677 * are apparently not used by the compiler, or represent pointer types
680 #define T_NOTYPE 0x0000 /* Notype */
681 #define T_ABS 0x0001 /* Abs */
682 #define T_VOID 0x0003 /* Void */
683 #define T_CHAR 0x0010 /* signed char */
684 #define T_SHORT 0x0011 /* short */
685 #define T_LONG 0x0012 /* long */
686 #define T_QUAD 0x0013 /* long long */
687 #define T_UCHAR 0x0020 /* unsigned char */
688 #define T_USHORT 0x0021 /* unsigned short */
689 #define T_ULONG 0x0022 /* unsigned long */
690 #define T_UQUAD 0x0023 /* unsigned long long */
691 #define T_REAL32 0x0040 /* float */
692 #define T_REAL64 0x0041 /* double */
693 #define T_RCHAR 0x0070 /* real char */
694 #define T_WCHAR 0x0071 /* wide char */
695 #define T_INT4 0x0074 /* int */
696 #define T_UINT4 0x0075 /* unsigned int */
698 #define T_32PVOID 0x0403 /* 32 bit near pointer to void */
699 #define T_32PCHAR 0x0410 /* 16:32 near pointer to signed char */
700 #define T_32PSHORT 0x0411 /* 16:32 near pointer to short */
701 #define T_32PLONG 0x0412 /* 16:32 near pointer to int */
702 #define T_32PQUAD 0x0413 /* 16:32 near pointer to long long */
703 #define T_32PUCHAR 0x0420 /* 16:32 near pointer to unsigned char */
704 #define T_32PUSHORT 0x0421 /* 16:32 near pointer to unsigned short */
705 #define T_32PULONG 0x0422 /* 16:32 near pointer to unsigned int */
706 #define T_32PUQUAD 0x0423 /* 16:32 near pointer to long long */
707 #define T_32PREAL32 0x0440 /* 16:32 near pointer to float */
708 #define T_32PREAL64 0x0441 /* 16:32 near pointer to float */
709 #define T_32PRCHAR 0x0470 /* 16:32 near pointer to real char */
710 #define T_32PWCHAR 0x0471 /* 16:32 near pointer to real char */
711 #define T_32PINT4 0x0474 /* 16:32 near pointer to int */
712 #define T_32PUINT4 0x0475 /* 16:32 near pointer to unsigned int */
715 #define LF_MODIFIER_V1 0x0001
716 #define LF_POINTER_V1 0x0002
717 #define LF_ARRAY_V1 0x0003
718 #define LF_CLASS_V1 0x0004
719 #define LF_STRUCTURE_V1 0x0005
720 #define LF_UNION_V1 0x0006
721 #define LF_ENUM_V1 0x0007
722 #define LF_PROCEDURE_V1 0x0008
723 #define LF_MFUNCTION_V1 0x0009
724 #define LF_VTSHAPE_V1 0x000a
725 #define LF_COBOL0_V1 0x000b
726 #define LF_COBOL1_V1 0x000c
727 #define LF_BARRAY_V1 0x000d
728 #define LF_LABEL_V1 0x000e
729 #define LF_NULL_V1 0x000f
730 #define LF_NOTTRAN_V1 0x0010
731 #define LF_DIMARRAY_V1 0x0011
732 #define LF_VFTPATH_V1 0x0012
733 #define LF_PRECOMP_V1 0x0013
734 #define LF_ENDPRECOMP_V1 0x0014
735 #define LF_OEM_V1 0x0015
736 #define LF_TYPESERVER_V1 0x0016
738 #define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
739 #define LF_POINTER_V2 0x1002
740 #define LF_ARRAY_V2 0x1003
741 #define LF_CLASS_V2 0x1004
742 #define LF_STRUCTURE_V2 0x1005
743 #define LF_UNION_V2 0x1006
744 #define LF_ENUM_V2 0x1007
745 #define LF_PROCEDURE_V2 0x1008
746 #define LF_MFUNCTION_V2 0x1009
747 #define LF_COBOL0_V2 0x100a
748 #define LF_BARRAY_V2 0x100b
749 #define LF_DIMARRAY_V2 0x100c
750 #define LF_VFTPATH_V2 0x100d
751 #define LF_PRECOMP_V2 0x100e
752 #define LF_OEM_V2 0x100f
754 #define LF_SKIP_V1 0x0200
755 #define LF_ARGLIST_V1 0x0201
756 #define LF_DEFARG_V1 0x0202
757 #define LF_LIST_V1 0x0203
758 #define LF_FIELDLIST_V1 0x0204
759 #define LF_DERIVED_V1 0x0205
760 #define LF_BITFIELD_V1 0x0206
761 #define LF_METHODLIST_V1 0x0207
762 #define LF_DIMCONU_V1 0x0208
763 #define LF_DIMCONLU_V1 0x0209
764 #define LF_DIMVARU_V1 0x020a
765 #define LF_DIMVARLU_V1 0x020b
766 #define LF_REFSYM_V1 0x020c
768 #define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
769 #define LF_ARGLIST_V2 0x1201
770 #define LF_DEFARG_V2 0x1202
771 #define LF_FIELDLIST_V2 0x1203
772 #define LF_DERIVED_V2 0x1204
773 #define LF_BITFIELD_V2 0x1205
774 #define LF_METHODLIST_V2 0x1206
775 #define LF_DIMCONU_V2 0x1207
776 #define LF_DIMCONLU_V2 0x1208
777 #define LF_DIMVARU_V2 0x1209
778 #define LF_DIMVARLU_V2 0x120a
781 #define LF_BCLASS_V1 0x0400
782 #define LF_VBCLASS_V1 0x0401
783 #define LF_IVBCLASS_V1 0x0402
784 #define LF_ENUMERATE_V1 0x0403
785 #define LF_FRIENDFCN_V1 0x0404
786 #define LF_INDEX_V1 0x0405
787 #define LF_MEMBER_V1 0x0406
788 #define LF_STMEMBER_V1 0x0407
789 #define LF_METHOD_V1 0x0408
790 #define LF_NESTTYPE_V1 0x0409
791 #define LF_VFUNCTAB_V1 0x040a
792 #define LF_FRIENDCLS_V1 0x040b
793 #define LF_ONEMETHOD_V1 0x040c
794 #define LF_VFUNCOFF_V1 0x040d
795 #define LF_NESTTYPEEX_V1 0x040e
796 #define LF_MEMBERMODIFY_V1 0x040f
798 #define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
799 #define LF_VBCLASS_V2 0x1401
800 #define LF_IVBCLASS_V2 0x1402
801 #define LF_FRIENDFCN_V2 0x1403
802 #define LF_INDEX_V2 0x1404
803 #define LF_MEMBER_V2 0x1405
804 #define LF_STMEMBER_V2 0x1406
805 #define LF_METHOD_V2 0x1407
806 #define LF_NESTTYPE_V2 0x1408
807 #define LF_VFUNCTAB_V2 0x1409
808 #define LF_FRIENDCLS_V2 0x140a
809 #define LF_ONEMETHOD_V2 0x140b
810 #define LF_VFUNCOFF_V2 0x140c
811 #define LF_NESTTYPEEX_V2 0x140d
813 #define LF_ENUMERATE_V3 0x1502
814 #define LF_ARRAY_V3 0x1503
815 #define LF_CLASS_V3 0x1504
816 #define LF_STRUCTURE_V3 0x1505
817 #define LF_UNION_V3 0x1506
818 #define LF_ENUM_V3 0x1507
819 #define LF_MEMBER_V3 0x150d
821 #define LF_NUMERIC 0x8000 /* numeric leaf types */
822 #define LF_CHAR 0x8000
823 #define LF_SHORT 0x8001
824 #define LF_USHORT 0x8002
825 #define LF_LONG 0x8003
826 #define LF_ULONG 0x8004
827 #define LF_REAL32 0x8005
828 #define LF_REAL64 0x8006
829 #define LF_REAL80 0x8007
830 #define LF_REAL128 0x8008
831 #define LF_QUADWORD 0x8009
832 #define LF_UQUADWORD 0x800a
833 #define LF_REAL48 0x800b
834 #define LF_COMPLEX32 0x800c
835 #define LF_COMPLEX64 0x800d
836 #define LF_COMPLEX80 0x800e
837 #define LF_COMPLEX128 0x800f
838 #define LF_VARSTRING 0x8010
840 /* ======================================== *
842 * ======================================== */
844 union codeview_symbol
857 unsigned short segment
;
858 unsigned short symtype
;
859 struct p_string p_name
;
866 unsigned int symtype
;
868 unsigned short segment
;
869 struct p_string p_name
;
876 unsigned int symtype
;
878 unsigned short segment
;
886 unsigned int pparent
;
890 unsigned short segment
;
891 unsigned short thunk_len
;
892 unsigned char thtype
;
893 struct p_string p_name
;
900 unsigned int pparent
;
904 unsigned short segment
;
905 unsigned short thunk_len
;
906 unsigned char thtype
;
914 unsigned int pparent
;
917 unsigned int proc_len
;
918 unsigned int debug_start
;
919 unsigned int debug_end
;
921 unsigned short segment
;
922 unsigned short proctype
;
924 struct p_string p_name
;
931 unsigned int pparent
;
934 unsigned int proc_len
;
935 unsigned int debug_start
;
936 unsigned int debug_end
;
937 unsigned int proctype
;
939 unsigned short segment
;
941 struct p_string p_name
;
948 unsigned int pparent
;
951 unsigned int proc_len
;
952 unsigned int debug_start
;
953 unsigned int debug_end
;
954 unsigned int proctype
;
956 unsigned short segment
;
963 short int len
; /* Total length of this entry */
964 short int id
; /* Always S_BPREL_V1 */
965 unsigned int offset
; /* Stack offset relative to BP */
966 unsigned short symtype
;
967 struct p_string p_name
;
972 short int len
; /* Total length of this entry */
973 short int id
; /* Always S_BPREL_V2 */
974 unsigned int offset
; /* Stack offset relative to EBP */
975 unsigned int symtype
;
976 struct p_string p_name
;
981 short int len
; /* Total length of this entry */
982 short int id
; /* Always S_BPREL_V3 */
983 int offset
; /* Stack offset relative to BP */
984 unsigned int symtype
;
990 short int len
; /* Total length of this entry */
991 short int id
; /* Always S_REGISTER */
994 struct p_string p_name
;
995 /* don't handle register tracking */
1000 short int len
; /* Total length of this entry */
1001 short int id
; /* Always S_REGISTER_V2 */
1002 unsigned int type
; /* check whether type & reg are correct */
1004 struct p_string p_name
;
1005 /* don't handle register tracking */
1012 unsigned int parent
;
1014 unsigned int length
;
1015 unsigned int offset
;
1016 unsigned short segment
;
1017 struct p_string p_name
;
1024 unsigned int parent
;
1026 unsigned int length
;
1027 unsigned int offset
;
1028 unsigned short segment
;
1036 unsigned int offset
;
1037 unsigned short segment
;
1038 unsigned char flags
;
1039 struct p_string p_name
;
1046 unsigned int offset
;
1047 unsigned short segment
;
1048 unsigned char flags
;
1056 unsigned short type
;
1057 unsigned short cvalue
; /* numeric leaf */
1059 struct p_string p_name
;
1068 unsigned short cvalue
; /* numeric leaf */
1070 struct p_string p_name
;
1079 unsigned short cvalue
;
1089 unsigned short type
;
1090 struct p_string p_name
;
1098 struct p_string p_name
;
1114 struct p_string p_name
;
1121 unsigned int unknown
;
1122 struct p_string p_name
;
1129 unsigned unknown1
[4];
1130 unsigned short unknown2
;
1131 struct p_string p_name
;
1138 unsigned int unknown
;
1146 unsigned int offset
;
1147 unsigned short segment
;
1151 #define S_COMPILE_V1 0x0001
1152 #define S_REGISTER_V1 0x0002
1153 #define S_CONSTANT_V1 0x0003
1154 #define S_UDT_V1 0x0004
1155 #define S_SSEARCH_V1 0x0005
1156 #define S_END_V1 0x0006
1157 #define S_SKIP_V1 0x0007
1158 #define S_CVRESERVE_V1 0x0008
1159 #define S_OBJNAME_V1 0x0009
1160 #define S_ENDARG_V1 0x000a
1161 #define S_COBOLUDT_V1 0x000b
1162 #define S_MANYREG_V1 0x000c
1163 #define S_RETURN_V1 0x000d
1164 #define S_ENTRYTHIS_V1 0x000e
1166 #define S_BPREL_V1 0x0200
1167 #define S_LDATA_V1 0x0201
1168 #define S_GDATA_V1 0x0202
1169 #define S_PUB_V1 0x0203
1170 #define S_LPROC_V1 0x0204
1171 #define S_GPROC_V1 0x0205
1172 #define S_THUNK_V1 0x0206
1173 #define S_BLOCK_V1 0x0207
1174 #define S_WITH_V1 0x0208
1175 #define S_LABEL_V1 0x0209
1176 #define S_CEXMODEL_V1 0x020a
1177 #define S_VFTPATH_V1 0x020b
1178 #define S_REGREL_V1 0x020c
1179 #define S_LTHREAD_V1 0x020d
1180 #define S_GTHREAD_V1 0x020e
1182 #define S_PROCREF_V1 0x0400
1183 #define S_DATAREF_V1 0x0401
1184 #define S_ALIGN_V1 0x0402
1185 #define S_LPROCREF_V1 0x0403
1187 #define S_REGISTER_V2 0x1001 /* Variants with new 32-bit type indices */
1188 #define S_CONSTANT_V2 0x1002
1189 #define S_UDT_V2 0x1003
1190 #define S_COBOLUDT_V2 0x1004
1191 #define S_MANYREG_V2 0x1005
1192 #define S_BPREL_V2 0x1006
1193 #define S_LDATA_V2 0x1007
1194 #define S_GDATA_V2 0x1008
1195 #define S_PUB_V2 0x1009
1196 #define S_LPROC_V2 0x100a
1197 #define S_GPROC_V2 0x100b
1198 #define S_VFTTABLE_V2 0x100c
1199 #define S_REGREL_V2 0x100d
1200 #define S_LTHREAD_V2 0x100e
1201 #define S_GTHREAD_V2 0x100f
1203 #define S_XXXXXXXXX_32 0x1012 /* seems linked to a function, content unknown */
1205 #define S_COMPILE_V2 0x1013
1207 #define S_COMPILE_V3 0x1101
1208 #define S_THUNK_V3 0x1102
1209 #define S_BLOCK_V3 0x1103
1210 #define S_LABEL_V3 0x1105
1211 #define S_CONSTANT_V3 0x1107
1212 #define S_UDT_V3 0x1108
1213 #define S_BPREL_V3 0x110B
1214 #define S_LDATA_V3 0x110C
1215 #define S_GDATA_V3 0x110D
1216 #define S_PUB_DATA_V3 0x110E
1217 #define S_LPROC_V3 0x110F
1218 #define S_GPROC_V3 0x1110
1219 #define S_MSTOOL_V3 0x1116 /* not really understood */
1220 #define S_PUB_FUNC1_V3 0x1125 /* didn't get the difference between the two */
1221 #define S_PUB_FUNC2_V3 0x1127
1223 /* ======================================== *
1224 * Line number information
1225 * ======================================== */
1230 const unsigned char* uc
;
1233 const unsigned int* ui
;
1242 struct codeview_linetab
1248 unsigned int source
;
1249 const unsigned short* linetab
;
1250 const unsigned int* offtab
;
1254 /* ======================================== *
1255 * PDB file information
1256 * ======================================== */
1265 struct PDB_JG_HEADER
1272 struct PDB_FILE toc
;
1276 struct PDB_DS_HEADER
1290 struct PDB_FILE file
[1];
1302 DWORD TimeDateStamp
;
1311 DWORD TimeDateStamp
;
1318 typedef struct _PDB_TYPES_OLD
1326 } PDB_TYPES_OLD
, *PPDB_TYPES_OLD
;
1328 typedef struct _PDB_TYPES
1341 DWORD search_offset
;
1343 DWORD unknown_offset
;
1345 } PDB_TYPES
, *PPDB_TYPES
;
1347 typedef struct _PDB_SYMBOL_RANGE
1353 DWORD characteristics
;
1356 } PDB_SYMBOL_RANGE
, *PPDB_SYMBOL_RANGE
;
1358 typedef struct _PDB_SYMBOL_RANGE_EX
1364 DWORD characteristics
;
1369 } PDB_SYMBOL_RANGE_EX
, *PPDB_SYMBOL_RANGE_EX
;
1371 typedef struct _PDB_SYMBOL_FILE
1374 PDB_SYMBOL_RANGE range
;
1383 } PDB_SYMBOL_FILE
, *PPDB_SYMBOL_FILE
;
1385 typedef struct _PDB_SYMBOL_FILE_EX
1388 PDB_SYMBOL_RANGE_EX range
;
1398 } PDB_SYMBOL_FILE_EX
, *PPDB_SYMBOL_FILE_EX
;
1400 typedef struct _PDB_SYMBOL_SOURCE
1405 } PDB_SYMBOL_SOURCE
, *PPDB_SYMBOL_SOURCE
;
1407 typedef struct _PDB_SYMBOL_IMPORT
1411 DWORD TimeDateStamp
;
1414 } PDB_SYMBOL_IMPORT
, *PPDB_SYMBOL_IMPORT
;
1416 typedef struct _PDB_SYMBOLS_OLD
1425 DWORD srcmodule_size
;
1426 } PDB_SYMBOLS_OLD
, *PPDB_SYMBOLS_OLD
;
1428 typedef struct _PDB_SYMBOLS
1439 DWORD srcmodule_size
;
1440 DWORD pdbimport_size
;
1442 } PDB_SYMBOLS
, *PPDB_SYMBOLS
;
1444 #include "poppack.h"
1446 /* ----------------------------------------------
1447 * Information used for parsing
1448 * ---------------------------------------------- */
1456 struct msc_debug_info
1458 struct module
* module
;
1460 const IMAGE_SECTION_HEADER
* sectp
;
1462 const OMAP_DATA
* omapp
;
1467 extern BOOL
coff_process_info(const struct msc_debug_info
* msc_dbg
);
1469 /* ===================================================
1470 * The old CodeView stuff (for NB09 and NB11)
1471 * =================================================== */
1473 #define sstModule 0x120
1474 #define sstTypes 0x121
1475 #define sstPublic 0x122
1476 #define sstPublicSym 0x123
1477 #define sstSymbols 0x124
1478 #define sstAlignSym 0x125
1479 #define sstSrcLnSeg 0x126
1480 #define sstSrcModule 0x127
1481 #define sstLibraries 0x128
1482 #define sstGlobalSym 0x129
1483 #define sstGlobalPub 0x12a
1484 #define sstGlobalTypes 0x12b
1485 #define sstMPC 0x12c
1486 #define sstSegMap 0x12d
1487 #define sstSegName 0x12e
1488 #define sstPreComp 0x12f
1489 #define sstFileIndex 0x133
1490 #define sstStaticSym 0x134
1492 typedef struct _CODEVIEW_HEADER_NBxx
1496 } CODEVIEW_HEADER_NBxx
,* PCODEVIEW_HEADER_NBxx
;
1498 typedef struct _CODEVIEW_HEADER_RSDS
1504 } CODEVIEW_HEADER_RSDS
,* PCODEVIEW_HEADER_RSDS
;
1506 typedef struct _CODEVIEW_PDB_DATA
1511 } CODEVIEW_PDB_DATA
, *PCODEVIEW_PDB_DATA
;
1513 typedef struct _CV_DIRECTORY_HEADER
1520 } CV_DIRECTORY_HEADER
, *PCV_DIRECTORY_HEADER
;
1522 typedef struct _CV_DIRECTORY_ENTRY
1528 } CV_DIRECTORY_ENTRY
, *PCV_DIRECTORY_ENTRY
;
1530 typedef struct _CV_ENTRY_MODULE_SEGINFO
1536 } CV_ENTRY_MODULE_SEGINFO
;
1538 typedef struct _CV_ENTRY_MODULE
1545 CV_ENTRY_MODULE_SEGINFO SegInfo[cSeg];
1550 typedef struct _CV_ENTRY_GLOBAL_TYPES
1555 DWORD offset[cTypes];
1558 } CV_ENTRY_GLOBAL_TYPES
;