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 /* ======================================== *
117 * ======================================== */
123 unsigned short int len
;
124 unsigned short int id
;
127 /* types found in TPI stream (#2) */
130 unsigned short int len
;
131 unsigned short int id
;
138 unsigned short int len
;
139 unsigned short int id
;
146 unsigned short int len
;
147 unsigned short int id
;
150 struct p_string p_name
;
155 unsigned short int len
;
156 unsigned short int id
;
158 unsigned int attribute
;
159 struct p_string p_name
;
164 unsigned short int len
;
165 unsigned short int id
;
168 unsigned short int arrlen
; /* numeric leaf */
170 struct p_string p_name
;
176 unsigned short int len
;
177 unsigned short int id
;
180 unsigned short int arrlen
; /* numeric leaf */
182 struct p_string p_name
;
188 unsigned short int len
;
189 unsigned short int id
;
192 unsigned short int arrlen
; /* numeric leaf */
200 unsigned short int len
;
201 unsigned short int id
;
203 cv_typ16_t fieldlist
;
207 unsigned short int structlen
; /* numeric leaf */
209 struct p_string p_name
;
215 unsigned short int len
;
216 unsigned short int id
;
222 unsigned short int structlen
; /* numeric leaf */
224 struct p_string p_name
;
230 unsigned short int len
;
231 unsigned short int id
;
237 unsigned short int structlen
; /* numeric leaf */
245 unsigned short int len
;
246 unsigned short int id
;
248 cv_typ16_t fieldlist
;
250 unsigned short int un_len
; /* numeric leaf */
252 struct p_string p_name
;
258 unsigned short int len
;
259 unsigned short int id
;
263 unsigned short int un_len
; /* numeric leaf */
265 struct p_string p_name
;
271 unsigned short int len
;
272 unsigned short int id
;
276 unsigned short int un_len
; /* numeric leaf */
284 unsigned short int len
;
285 unsigned short int id
;
288 cv_typ16_t fieldlist
;
290 struct p_string p_name
;
295 unsigned short int len
;
296 unsigned short int id
;
301 struct p_string p_name
;
306 unsigned short int len
;
307 unsigned short int id
;
317 unsigned short int len
;
318 unsigned short int id
;
320 unsigned char callconv
;
321 unsigned char funcattr
;
322 unsigned short int params
;
328 unsigned short int len
;
329 unsigned short int id
;
331 unsigned char callconv
;
332 unsigned char funcattr
;
333 unsigned short int params
;
339 unsigned short int len
;
340 unsigned short int id
;
342 cv_typ16_t class_type
;
343 cv_typ16_t this_type
;
344 unsigned char callconv
;
345 unsigned char funcattr
;
346 unsigned short int params
;
348 unsigned int this_adjust
;
353 unsigned short int len
;
354 unsigned short int id
;
358 unsigned char callconv
;
359 unsigned char funcattr
;
360 unsigned short params
;
362 unsigned int this_adjust
;
365 /* types found in IPI stream (#4) */
368 unsigned short int len
;
369 unsigned short int id
; /* LF_FUNC_ID */
377 unsigned short int len
;
378 unsigned short int id
; /* LF_MFUNC_ID */
386 unsigned short int len
;
387 unsigned short int id
; /* LF_STRING_ID */
394 unsigned short int len
;
395 unsigned short int id
; /* LF_UDT_SRC_LINE */
403 unsigned short int len
;
404 unsigned short int id
; /* LF_UDT_MOD_SRC_LINE */
409 } udt_mod_src_line_v3
;
413 unsigned short int len
;
414 unsigned short int id
; /* LF_BUILDINFO */
415 unsigned short count
;
421 union codeview_reftype
425 unsigned short int len
;
426 unsigned short int id
;
431 unsigned short int len
;
432 unsigned short int id
;
433 unsigned char list
[1];
438 unsigned short int len
;
439 unsigned short int id
;
441 unsigned char bitoff
;
447 unsigned short int len
;
448 unsigned short int id
;
451 unsigned char bitoff
;
456 unsigned short int len
;
457 unsigned short int id
;
464 unsigned short int len
;
465 unsigned short int id
;
472 unsigned short int len
;
473 unsigned short int id
;
475 cv_typ16_t drvdcls
[1];
480 unsigned short int len
;
481 unsigned short int id
;
488 unsigned short int len
;
489 unsigned short int id
;
491 cv_typ_t baseVftable
;
492 unsigned offsetInObjectLayout
;
494 char names
[1]; /* array of len 0-terminated strings (size of cbstr in char:s) */
498 union codeview_fieldtype
502 unsigned short int id
;
507 unsigned short int id
;
510 unsigned short int offset
; /* numeric leaf */
515 unsigned short int id
;
518 unsigned short int offset
; /* numeric leaf */
523 unsigned short int id
;
527 unsigned short int vbpoff
; /* numeric leaf */
529 unsigned short int vboff
; /* numeric leaf */
535 unsigned short int id
;
539 unsigned short int vbpoff
; /* numeric leaf */
541 unsigned short int vboff
; /* numeric leaf */
547 unsigned short int id
;
549 unsigned short int value
; /* numeric leaf */
551 struct p_string p_name
;
557 unsigned short int id
;
559 unsigned short int value
; /* numeric leaf */
567 unsigned short int id
;
569 struct p_string p_name
;
574 unsigned short int id
;
577 struct p_string p_name
;
582 unsigned short int id
;
590 unsigned short int id
;
593 unsigned short int offset
; /* numeric leaf */
595 struct p_string p_name
;
601 unsigned short int id
;
604 unsigned short int offset
; /* numeric leaf */
606 struct p_string p_name
;
612 unsigned short int id
;
615 unsigned short int offset
; /* numeric leaf */
624 unsigned short int id
;
627 struct p_string p_name
;
632 unsigned short int id
;
635 struct p_string p_name
;
640 unsigned short int id
;
648 unsigned short int id
;
651 struct p_string p_name
;
656 unsigned short int id
;
659 struct p_string p_name
;
664 unsigned short int id
;
672 unsigned short int id
;
674 struct p_string p_name
;
679 unsigned short int id
;
682 struct p_string p_name
;
687 unsigned short int id
;
695 unsigned short int id
;
701 unsigned short int id
;
708 unsigned short int id
;
714 unsigned short int id
;
721 unsigned short int id
;
724 struct p_string p_name
;
729 unsigned short int id
;
732 struct p_string p_name
;
737 unsigned short int id
;
745 unsigned short int id
;
748 unsigned int vtab_offset
;
749 struct p_string p_name
;
754 unsigned short int id
;
757 unsigned int vtab_offset
;
758 struct p_string p_name
;
763 unsigned short int id
;
766 unsigned int vtab_offset
;
772 unsigned short int id
;
779 unsigned short int id
;
787 unsigned short int id
;
790 struct p_string p_name
;
795 unsigned short int id
;
798 struct p_string p_name
;
803 unsigned short int id
;
806 struct p_string p_name
;
811 unsigned short int id
;
817 unsigned short int id
;
825 * This covers the basic datatypes that VC++ seems to be using these days.
826 * 32 bit mode only. There are additional numbers for the pointers in 16
827 * bit mode. There are many other types listed in the documents, but these
828 * are apparently not used by the compiler, or represent pointer types
831 * Official MS documentation says that type (< 0x4000, so 12 bits) is made of:
832 * +----------+------+------+----------+------+
833 * | 11 | 10-8 | 7-4 | 3 | 2-0 |
834 * +----------+------+------+----------+------+
835 * | reserved | mode | type | reserved | size |
836 * +----------+------+------+----------+------+
837 * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've
838 * added this basic type... as if bit 3 had been integrated into the size field
841 /* the type number of a built-in type is a 16-bit value specified in the following format:
842 bit # | 11 | 10-8 | 7-4 | 3 | 2-0 |
843 field | reserved | mode | type | reserved | size |
846 <type> is one of the following types:
848 0x01 Signed integral value
849 0x02 Unsigned integral value
862 0x0f Reserved for debugger expression evaluator
864 <size> is an enumerated value for each of the types.
870 0x04 Basic 8-byte currency value
871 0x05 Near Basic string
872 0x06 Far Basic string
873 0x07 Untranslated type from previous Microsoft symbol formats
874 Type = signed/unsigned integral and Boolean values
883 Type = real and complex
898 0x02 2-byte signed integer
899 0x03 2-byte unsigned integer
900 0x04 4-byte signed integer
901 0x05 4-byte unsigned integer
902 0x06 8-byte signed integer
903 0x07 8-byte unsigned integer
905 <mode> is the pointer mode:
906 0x00 Direct; not a pointer
910 0x04 32-bit near pointer
911 0x05 32-bit far pointer
912 0x06 64-bit near pointer
917 #define T_NOTYPE 0x0000 /* Notype */
918 #define T_ABS 0x0001 /* Abs */
919 #define T_SEGMENT 0x0002 /* segment type */
920 #define T_VOID 0x0003 /* Void */
921 #define T_CURRENCY 0x0004 /* basic 8-byte currency value */
922 #define T_NBASICSTR 0x0005 /* near basic string */
923 #define T_FBASICSTR 0x0006 /* far basic string */
924 #define T_NOTTRANS 0x0007 /* untranslated type record from MS symbol format */
925 #define T_HRESULT 0x0008 /* HRESULT - or error code ??? */
926 #define T_CHAR 0x0010 /* signed char */
927 #define T_SHORT 0x0011 /* short */
928 #define T_LONG 0x0012 /* long */
929 #define T_QUAD 0x0013 /* long long */
930 #define T_UCHAR 0x0020 /* unsigned char */
931 #define T_USHORT 0x0021 /* unsigned short */
932 #define T_ULONG 0x0022 /* unsigned long */
933 #define T_UQUAD 0x0023 /* unsigned long long */
934 #define T_BOOL08 0x0030 /* 8-bit boolean */
935 #define T_BOOL16 0x0031 /* 16-bit boolean */
936 #define T_BOOL32 0x0032 /* 32-bit boolean */
937 #define T_BOOL64 0x0033 /* 64-bit boolean */
938 #define T_REAL32 0x0040 /* float */
939 #define T_REAL64 0x0041 /* double */
940 #define T_REAL80 0x0042 /* 80-bit real */
941 #define T_REAL128 0x0043 /* 128-bit real */
942 #define T_REAL48 0x0044 /* 48-bit real */
943 #define T_CPLX32 0x0050 /* 32-bit complex number */
944 #define T_CPLX64 0x0051 /* 64-bit complex number */
945 #define T_CPLX80 0x0052 /* 80-bit complex number */
946 #define T_CPLX128 0x0053 /* 128-bit complex number */
947 #define T_BIT 0x0060 /* bit */
948 #define T_PASCHAR 0x0061 /* pascal CHAR */
949 #define T_RCHAR 0x0070 /* real char */
950 #define T_WCHAR 0x0071 /* wide char */
951 #define T_INT2 0x0072 /* real 16-bit signed int */
952 #define T_UINT2 0x0073 /* real 16-bit unsigned int */
953 #define T_INT4 0x0074 /* int */
954 #define T_UINT4 0x0075 /* unsigned int */
955 #define T_INT8 0x0076 /* 64-bit signed int */
956 #define T_UINT8 0x0077 /* 64-bit unsigned int */
957 #define T_CHAR16 0x007a /* 16-bit unicode char */
958 #define T_CHAR32 0x007b /* 32-bit unicode char */
959 #define T_CHAR8 0x007c /* 8-bit unicode char (C++ 20) */
961 /* near pointers to basic types */
962 #define T_PVOID 0x0103 /* near pointer to void */
963 #define T_PCHAR 0x0110 /* Near pointer to 8-bit signed */
964 #define T_PSHORT 0x0111 /* Near pointer to 16-bit signed */
965 #define T_PLONG 0x0112 /* Near pointer to 32-bit signed */
966 #define T_PQUAD 0x0113 /* Near pointer to 64-bit signed */
967 #define T_PUCHAR 0x0120 /* Near pointer to 8-bit unsigned */
968 #define T_PUSHORT 0x0121 /* Near pointer to 16-bit unsigned */
969 #define T_PULONG 0x0122 /* Near pointer to 32-bit unsigned */
970 #define T_PUQUAD 0x0123 /* Near pointer to 64-bit unsigned */
971 #define T_PBOOL08 0x0130 /* Near pointer to 8-bit Boolean */
972 #define T_PBOOL16 0x0131 /* Near pointer to 16-bit Boolean */
973 #define T_PBOOL32 0x0132 /* Near pointer to 32-bit Boolean */
974 #define T_PBOOL64 0x0133 /* Near pointer to 64-bit Boolean */
975 #define T_PREAL32 0x0140 /* Near pointer to 32-bit real */
976 #define T_PREAL64 0x0141 /* Near pointer to 64-bit real */
977 #define T_PREAL80 0x0142 /* Near pointer to 80-bit real */
978 #define T_PREAL128 0x0143 /* Near pointer to 128-bit real */
979 #define T_PREAL48 0x0144 /* Near pointer to 48-bit real */
980 #define T_PCPLX32 0x0150 /* Near pointer to 32-bit complex */
981 #define T_PCPLX64 0x0151 /* Near pointer to 64-bit complex */
982 #define T_PCPLX80 0x0152 /* Near pointer to 80-bit complex */
983 #define T_PCPLX128 0x0153 /* Near pointer to 128-bit complex */
984 #define T_PRCHAR 0x0170 /* Near pointer to a real char */
985 #define T_PWCHAR 0x0171 /* Near pointer to a wide char */
986 #define T_PINT2 0x0172 /* Near pointer to 16-bit signed int */
987 #define T_PUINT2 0x0173 /* Near pointer to 16-bit unsigned int */
988 #define T_PINT4 0x0174 /* Near pointer to 32-bit signed int */
989 #define T_PUINT4 0x0175 /* Near pointer to 32-bit unsigned int */
990 #define T_PINT8 0x0176 /* Near pointer to 64-bit signed int */
991 #define T_PUINT8 0x0177 /* Near pointer to 64-bit unsigned int */
992 #define T_PCHAR16 0x017a /* Near pointer to 16-bit unicode char */
993 #define T_PCHAR32 0x017b /* Near pointer to 32-bit unicode char */
994 #define T_PCHAR8 0x017c /* Near pointer to 8-bit unicode char */
996 /* far pointers to basic types */
997 #define T_PFVOID 0x0203 /* Far pointer to void */
998 #define T_PFCHAR 0x0210 /* Far pointer to 8-bit signed */
999 #define T_PFSHORT 0x0211 /* Far pointer to 16-bit signed */
1000 #define T_PFLONG 0x0212 /* Far pointer to 32-bit signed */
1001 #define T_PFQUAD 0x0213 /* Far pointer to 64-bit signed */
1002 #define T_PFUCHAR 0x0220 /* Far pointer to 8-bit unsigned */
1003 #define T_PFUSHORT 0x0221 /* Far pointer to 16-bit unsigned */
1004 #define T_PFULONG 0x0222 /* Far pointer to 32-bit unsigned */
1005 #define T_PFUQUAD 0x0223 /* Far pointer to 64-bit unsigned */
1006 #define T_PFBOOL08 0x0230 /* Far pointer to 8-bit Boolean */
1007 #define T_PFBOOL16 0x0231 /* Far pointer to 16-bit Boolean */
1008 #define T_PFBOOL32 0x0232 /* Far pointer to 32-bit Boolean */
1009 #define T_PFBOOL64 0x0233 /* Far pointer to 64-bit Boolean */
1010 #define T_PFREAL32 0x0240 /* Far pointer to 32-bit real */
1011 #define T_PFREAL64 0x0241 /* Far pointer to 64-bit real */
1012 #define T_PFREAL80 0x0242 /* Far pointer to 80-bit real */
1013 #define T_PFREAL128 0x0243 /* Far pointer to 128-bit real */
1014 #define T_PFREAL48 0x0244 /* Far pointer to 48-bit real */
1015 #define T_PFCPLX32 0x0250 /* Far pointer to 32-bit complex */
1016 #define T_PFCPLX64 0x0251 /* Far pointer to 64-bit complex */
1017 #define T_PFCPLX80 0x0252 /* Far pointer to 80-bit complex */
1018 #define T_PFCPLX128 0x0253 /* Far pointer to 128-bit complex */
1019 #define T_PFRCHAR 0x0270 /* Far pointer to a real char */
1020 #define T_PFWCHAR 0x0271 /* Far pointer to a wide char */
1021 #define T_PFINT2 0x0272 /* Far pointer to 16-bit signed int */
1022 #define T_PFUINT2 0x0273 /* Far pointer to 16-bit unsigned int */
1023 #define T_PFINT4 0x0274 /* Far pointer to 32-bit signed int */
1024 #define T_PFUINT4 0x0275 /* Far pointer to 32-bit unsigned int */
1025 #define T_PFINT8 0x0276 /* Far pointer to 64-bit signed int */
1026 #define T_PFUINT8 0x0277 /* Far pointer to 64-bit unsigned int */
1027 #define T_PFCHAR16 0x027a /* Far pointer to 16-bit unicode char */
1028 #define T_PFCHAR32 0x027b /* Far pointer to 32-bit unicode char */
1029 #define T_PFCHAR8 0x027c /* Far pointer to 8-bit unicode char */
1031 /* huge pointers to basic types */
1032 #define T_PHVOID 0x0303 /* Huge pointer to void */
1033 #define T_PHCHAR 0x0310 /* Huge pointer to 8-bit signed */
1034 #define T_PHSHORT 0x0311 /* Huge pointer to 16-bit signed */
1035 #define T_PHLONG 0x0312 /* Huge pointer to 32-bit signed */
1036 #define T_PHQUAD 0x0313 /* Huge pointer to 64-bit signed */
1037 #define T_PHUCHAR 0x0320 /* Huge pointer to 8-bit unsigned */
1038 #define T_PHUSHORT 0x0321 /* Huge pointer to 16-bit unsigned */
1039 #define T_PHULONG 0x0322 /* Huge pointer to 32-bit unsigned */
1040 #define T_PHUQUAD 0x0323 /* Huge pointer to 64-bit unsigned */
1041 #define T_PHBOOL08 0x0330 /* Huge pointer to 8-bit Boolean */
1042 #define T_PHBOOL16 0x0331 /* Huge pointer to 16-bit Boolean */
1043 #define T_PHBOOL32 0x0332 /* Huge pointer to 32-bit Boolean */
1044 #define T_PHBOOL64 0x0333 /* Huge pointer to 64-bit Boolean */
1045 #define T_PHREAL32 0x0340 /* Huge pointer to 32-bit real */
1046 #define T_PHREAL64 0x0341 /* Huge pointer to 64-bit real */
1047 #define T_PHREAL80 0x0342 /* Huge pointer to 80-bit real */
1048 #define T_PHREAL128 0x0343 /* Huge pointer to 128-bit real */
1049 #define T_PHREAL48 0x0344 /* Huge pointer to 48-bit real */
1050 #define T_PHCPLX32 0x0350 /* Huge pointer to 32-bit complex */
1051 #define T_PHCPLX64 0x0351 /* Huge pointer to 64-bit complex */
1052 #define T_PHCPLX80 0x0352 /* Huge pointer to 80-bit complex */
1053 #define T_PHCPLX128 0x0353 /* Huge pointer to 128-bit real */
1054 #define T_PHRCHAR 0x0370 /* Huge pointer to a real char */
1055 #define T_PHWCHAR 0x0371 /* Huge pointer to a wide char */
1056 #define T_PHINT2 0x0372 /* Huge pointer to 16-bit signed int */
1057 #define T_PHUINT2 0x0373 /* Huge pointer to 16-bit unsigned int */
1058 #define T_PHINT4 0x0374 /* Huge pointer to 32-bit signed int */
1059 #define T_PHUINT4 0x0375 /* Huge pointer to 32-bit unsigned int */
1060 #define T_PHINT8 0x0376 /* Huge pointer to 64-bit signed int */
1061 #define T_PHUINT8 0x0377 /* Huge pointer to 64-bit unsigned int */
1062 #define T_PHCHAR16 0x037a /* Huge pointer to 16-bit unicode char */
1063 #define T_PHCHAR32 0x037b /* Huge pointer to 32-bit unicode char */
1064 #define T_PHCHAR8 0x037c /* Huge pointer to 8-bit unicode char */
1066 /* 32-bit near pointers to basic types */
1067 #define T_32PVOID 0x0403 /* 32-bit near pointer to void */
1068 #define T_32PHRESULT 0x0408 /* 16:32 near pointer to HRESULT - or error code ??? */
1069 #define T_32PCHAR 0x0410 /* 16:32 near pointer to 8-bit signed */
1070 #define T_32PSHORT 0x0411 /* 16:32 near pointer to 16-bit signed */
1071 #define T_32PLONG 0x0412 /* 16:32 near pointer to 32-bit signed */
1072 #define T_32PQUAD 0x0413 /* 16:32 near pointer to 64-bit signed */
1073 #define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8-bit unsigned */
1074 #define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16-bit unsigned */
1075 #define T_32PULONG 0x0422 /* 16:32 near pointer to 32-bit unsigned */
1076 #define T_32PUQUAD 0x0423 /* 16:32 near pointer to 64-bit unsigned */
1077 #define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8-bit Boolean */
1078 #define T_32PBOOL16 0x0431 /* 16:32 near pointer to 16-bit Boolean */
1079 #define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32-bit Boolean */
1080 #define T_32PBOOL64 0x0433 /* 16:32 near pointer to 64-bit Boolean */
1081 #define T_32PREAL32 0x0440 /* 16:32 near pointer to 32-bit real */
1082 #define T_32PREAL64 0x0441 /* 16:32 near pointer to 64-bit real */
1083 #define T_32PREAL80 0x0442 /* 16:32 near pointer to 80-bit real */
1084 #define T_32PREAL128 0x0443 /* 16:32 near pointer to 128-bit real */
1085 #define T_32PREAL48 0x0444 /* 16:32 near pointer to 48-bit real */
1086 #define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32-bit complex */
1087 #define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64-bit complex */
1088 #define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80-bit complex */
1089 #define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128-bit complex */
1090 #define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */
1091 #define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */
1092 #define T_32PINT2 0x0472 /* 16:32 near pointer to 16-bit signed int */
1093 #define T_32PUINT2 0x0473 /* 16:32 near pointer to 16-bit unsigned int */
1094 #define T_32PINT4 0x0474 /* 16:32 near pointer to 32-bit signed int */
1095 #define T_32PUINT4 0x0475 /* 16:32 near pointer to 32-bit unsigned int */
1096 #define T_32PINT8 0x0476 /* 16:32 near pointer to 64-bit signed int */
1097 #define T_32PUINT8 0x0477 /* 16:32 near pointer to 64-bit unsigned int */
1098 #define T_32PCHAR16 0x047a /* 16:32 near pointer to 16-bit unicode char */
1099 #define T_32PCHAR32 0x047b /* 16:32 near pointer to 32-bit unicode char */
1100 #define T_32PCHAR8 0x047c /* 16:32 near pointer to 8-bit unicode char */
1102 /* 32-bit far pointers to basic types */
1103 #define T_32PFVOID 0x0503 /* 32-bit far pointer to void */
1104 #define T_32PFHRESULT 0x0508 /* 16:32 far pointer to HRESULT - or error code ??? */
1105 #define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */
1106 #define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */
1107 #define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */
1108 #define T_32PFQUAD 0x0513 /* 16:32 far pointer to 64-bit signed */
1109 #define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8-bit unsigned */
1110 #define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16-bit unsigned */
1111 #define T_32PFULONG 0x0522 /* 16:32 far pointer to 32-bit unsigned */
1112 #define T_32PFUQUAD 0x0523 /* 16:32 far pointer to 64-bit unsigned */
1113 #define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8-bit Boolean */
1114 #define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16-bit Boolean */
1115 #define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32-bit Boolean */
1116 #define T_32PFBOOL64 0x0533 /* 16:32 far pointer to 64-bit Boolean */
1117 #define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32-bit real */
1118 #define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64-bit real */
1119 #define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80-bit real */
1120 #define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128-bit real */
1121 #define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48-bit real */
1122 #define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32-bit complex */
1123 #define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64-bit complex */
1124 #define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80-bit complex */
1125 #define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128-bit complex */
1126 #define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */
1127 #define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */
1128 #define T_32PFINT2 0x0572 /* 16:32 far pointer to 16-bit signed int */
1129 #define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16-bit unsigned int */
1130 #define T_32PFINT4 0x0574 /* 16:32 far pointer to 32-bit signed int */
1131 #define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32-bit unsigned int */
1132 #define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */
1133 #define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */
1134 #define T_32PFCHAR16 0x057a /* 16:32 far pointer to 16-bit unicode char */
1135 #define T_32PFCHAR32 0x057b /* 16:32 far pointer to 32-bit unicode char */
1136 #define T_32PFCHAR8 0x057c /* 16:32 far pointer to 8-bit unicode char */
1138 /* 64-bit near pointers to basic types */
1139 #define T_64PVOID 0x0603 /* 64-bit near pointer to void */
1140 #define T_64PHRESULT 0x0608 /* 64 near pointer to HRESULT - or error code ??? */
1141 #define T_64PCHAR 0x0610 /* 64 near pointer to 8-bit signed */
1142 #define T_64PSHORT 0x0611 /* 64 near pointer to 16-bit signed */
1143 #define T_64PLONG 0x0612 /* 64 near pointer to 32-bit signed */
1144 #define T_64PQUAD 0x0613 /* 64 near pointer to 64-bit signed */
1145 #define T_64PUCHAR 0x0620 /* 64 near pointer to 8-bit unsigned */
1146 #define T_64PUSHORT 0x0621 /* 64 near pointer to 16-bit unsigned */
1147 #define T_64PULONG 0x0622 /* 64 near pointer to 32-bit unsigned */
1148 #define T_64PUQUAD 0x0623 /* 64 near pointer to 64-bit unsigned */
1149 #define T_64PBOOL08 0x0630 /* 64 near pointer to 8-bit Boolean */
1150 #define T_64PBOOL16 0x0631 /* 64 near pointer to 16-bit Boolean */
1151 #define T_64PBOOL32 0x0632 /* 64 near pointer to 32-bit Boolean */
1152 #define T_64PBOOL64 0x0633 /* 64 near pointer to 64-bit Boolean */
1153 #define T_64PREAL32 0x0640 /* 64 near pointer to 32-bit real */
1154 #define T_64PREAL64 0x0641 /* 64 near pointer to 64-bit real */
1155 #define T_64PREAL80 0x0642 /* 64 near pointer to 80-bit real */
1156 #define T_64PREAL128 0x0643 /* 64 near pointer to 128-bit real */
1157 #define T_64PREAL48 0x0644 /* 64 near pointer to 48-bit real */
1158 #define T_64PCPLX32 0x0650 /* 64 near pointer to 32-bit complex */
1159 #define T_64PCPLX64 0x0651 /* 64 near pointer to 64-bit complex */
1160 #define T_64PCPLX80 0x0652 /* 64 near pointer to 80-bit complex */
1161 #define T_64PCPLX128 0x0653 /* 64 near pointer to 128-bit complex */
1162 #define T_64PRCHAR 0x0670 /* 64 near pointer to a real char */
1163 #define T_64PWCHAR 0x0671 /* 64 near pointer to a wide char */
1164 #define T_64PINT2 0x0672 /* 64 near pointer to 16-bit signed int */
1165 #define T_64PUINT2 0x0673 /* 64 near pointer to 16-bit unsigned int */
1166 #define T_64PINT4 0x0674 /* 64 near pointer to 32-bit signed int */
1167 #define T_64PUINT4 0x0675 /* 64 near pointer to 32-bit unsigned int */
1168 #define T_64PINT8 0x0676 /* 64 near pointer to 64-bit signed int */
1169 #define T_64PUINT8 0x0677 /* 64 near pointer to 64-bit unsigned int */
1170 #define T_64PCHAR16 0x067a /* 64 near pointer to 16-bit unicode char */
1171 #define T_64PCHAR32 0x067b /* 64 near pointer to 32-bit unicode char */
1172 #define T_64PCHAR8 0x067c /* 64 near pointer to 8-bit unicode char */
1174 /* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */
1175 #define T_MAXPREDEFINEDTYPE 0x0580 /* maximum type index for all built-in types */
1176 #define T_MAXBASICTYPE 0x0080 /* maximum type index all non-pointer built-in types */
1177 #define T_BASICTYPE_MASK 0x00ff /* mask of bits that can potentially identify a non-pointer basic type */
1178 #define T_BASICTYPE_SHIFT 8 /* shift count to push out the basic type bits from a type number */
1179 #define T_MODE_MASK 0x0700 /* type mode mask (ptr/non-ptr) */
1180 #define T_SIZE_MASK 0x0007 /* type size mask (depends on 'type' value) */
1181 #define T_TYPE_MASK 0x00f0 /* type type mask (data treatment mode) */
1183 /* bit patterns for the <mode> portion of a built-in type number */
1184 #define T_NEARPTR_BITS 0x0100
1185 #define T_FARPTR_BITS 0x0200
1186 #define T_HUGEPTR_BITS 0x0300
1187 #define T_NEAR32PTR_BITS 0x0400
1188 #define T_FAR32PTR_BITS 0x0500
1189 #define T_NEAR64PTR_BITS 0x0600
1191 #define LF_MODIFIER_V1 0x0001
1192 #define LF_POINTER_V1 0x0002
1193 #define LF_ARRAY_V1 0x0003
1194 #define LF_CLASS_V1 0x0004
1195 #define LF_STRUCTURE_V1 0x0005
1196 #define LF_UNION_V1 0x0006
1197 #define LF_ENUM_V1 0x0007
1198 #define LF_PROCEDURE_V1 0x0008
1199 #define LF_MFUNCTION_V1 0x0009
1200 #define LF_VTSHAPE_V1 0x000a
1201 #define LF_COBOL0_V1 0x000b
1202 #define LF_COBOL1_V1 0x000c
1203 #define LF_BARRAY_V1 0x000d
1204 #define LF_LABEL_V1 0x000e
1205 #define LF_NULL_V1 0x000f
1206 #define LF_NOTTRAN_V1 0x0010
1207 #define LF_DIMARRAY_V1 0x0011
1208 #define LF_VFTPATH_V1 0x0012
1209 #define LF_PRECOMP_V1 0x0013
1210 #define LF_ENDPRECOMP_V1 0x0014
1211 #define LF_OEM_V1 0x0015
1212 #define LF_TYPESERVER_V1 0x0016
1214 #define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
1215 #define LF_POINTER_V2 0x1002
1216 #define LF_ARRAY_V2 0x1003
1217 #define LF_CLASS_V2 0x1004
1218 #define LF_STRUCTURE_V2 0x1005
1219 #define LF_UNION_V2 0x1006
1220 #define LF_ENUM_V2 0x1007
1221 #define LF_PROCEDURE_V2 0x1008
1222 #define LF_MFUNCTION_V2 0x1009
1223 #define LF_COBOL0_V2 0x100a
1224 #define LF_BARRAY_V2 0x100b
1225 #define LF_DIMARRAY_V2 0x100c
1226 #define LF_VFTPATH_V2 0x100d
1227 #define LF_PRECOMP_V2 0x100e
1228 #define LF_OEM_V2 0x100f
1230 #define LF_SKIP_V1 0x0200
1231 #define LF_ARGLIST_V1 0x0201
1232 #define LF_DEFARG_V1 0x0202
1233 #define LF_LIST_V1 0x0203
1234 #define LF_FIELDLIST_V1 0x0204
1235 #define LF_DERIVED_V1 0x0205
1236 #define LF_BITFIELD_V1 0x0206
1237 #define LF_METHODLIST_V1 0x0207
1238 #define LF_DIMCONU_V1 0x0208
1239 #define LF_DIMCONLU_V1 0x0209
1240 #define LF_DIMVARU_V1 0x020a
1241 #define LF_DIMVARLU_V1 0x020b
1242 #define LF_REFSYM_V1 0x020c
1244 #define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
1245 #define LF_ARGLIST_V2 0x1201
1246 #define LF_DEFARG_V2 0x1202
1247 #define LF_FIELDLIST_V2 0x1203
1248 #define LF_DERIVED_V2 0x1204
1249 #define LF_BITFIELD_V2 0x1205
1250 #define LF_METHODLIST_V2 0x1206
1251 #define LF_DIMCONU_V2 0x1207
1252 #define LF_DIMCONLU_V2 0x1208
1253 #define LF_DIMVARU_V2 0x1209
1254 #define LF_DIMVARLU_V2 0x120a
1257 #define LF_BCLASS_V1 0x0400
1258 #define LF_VBCLASS_V1 0x0401
1259 #define LF_IVBCLASS_V1 0x0402
1260 #define LF_ENUMERATE_V1 0x0403
1261 #define LF_FRIENDFCN_V1 0x0404
1262 #define LF_INDEX_V1 0x0405
1263 #define LF_MEMBER_V1 0x0406
1264 #define LF_STMEMBER_V1 0x0407
1265 #define LF_METHOD_V1 0x0408
1266 #define LF_NESTTYPE_V1 0x0409
1267 #define LF_VFUNCTAB_V1 0x040a
1268 #define LF_FRIENDCLS_V1 0x040b
1269 #define LF_ONEMETHOD_V1 0x040c
1270 #define LF_VFUNCOFF_V1 0x040d
1271 #define LF_NESTTYPEEX_V1 0x040e
1272 #define LF_MEMBERMODIFY_V1 0x040f
1274 #define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
1275 #define LF_VBCLASS_V2 0x1401
1276 #define LF_IVBCLASS_V2 0x1402
1277 #define LF_FRIENDFCN_V2 0x1403
1278 #define LF_INDEX_V2 0x1404
1279 #define LF_MEMBER_V2 0x1405
1280 #define LF_STMEMBER_V2 0x1406
1281 #define LF_METHOD_V2 0x1407
1282 #define LF_NESTTYPE_V2 0x1408
1283 #define LF_VFUNCTAB_V2 0x1409
1284 #define LF_FRIENDCLS_V2 0x140a
1285 #define LF_ONEMETHOD_V2 0x140b
1286 #define LF_VFUNCOFF_V2 0x140c
1287 #define LF_NESTTYPEEX_V2 0x140d
1289 #define LF_ENUMERATE_V3 0x1502
1290 #define LF_ARRAY_V3 0x1503
1291 #define LF_CLASS_V3 0x1504
1292 #define LF_STRUCTURE_V3 0x1505
1293 #define LF_UNION_V3 0x1506
1294 #define LF_ENUM_V3 0x1507
1295 #define LF_FRIENDFCN_V3 0x150c
1296 #define LF_MEMBER_V3 0x150d
1297 #define LF_STMEMBER_V3 0x150e
1298 #define LF_METHOD_V3 0x150f
1299 #define LF_NESTTYPE_V3 0x1510
1300 #define LF_ONEMETHOD_V3 0x1511
1301 #define LF_VFTABLE_V3 0x151d
1303 /* leaves found in second type type (aka IPI)
1304 * for simplicity, stored in the same union as other TPI leaves
1306 #define LF_FUNC_ID 0x1601
1307 #define LF_MFUNC_ID 0x1602
1308 #define LF_BUILDINFO 0x1603
1309 #define LF_SUBSTR_LIST 0x1604
1310 #define LF_STRING_ID 0x1605
1311 #define LF_UDT_SRC_LINE 0x1606
1312 #define LF_UDT_MOD_SRC_LINE 0x1607
1314 #define LF_NUMERIC 0x8000 /* numeric leaf types */
1315 #define LF_CHAR 0x8000
1316 #define LF_SHORT 0x8001
1317 #define LF_USHORT 0x8002
1318 #define LF_LONG 0x8003
1319 #define LF_ULONG 0x8004
1320 #define LF_REAL32 0x8005
1321 #define LF_REAL64 0x8006
1322 #define LF_REAL80 0x8007
1323 #define LF_REAL128 0x8008
1324 #define LF_QUADWORD 0x8009
1325 #define LF_UQUADWORD 0x800a
1326 #define LF_REAL48 0x800b
1327 #define LF_COMPLEX32 0x800c
1328 #define LF_COMPLEX64 0x800d
1329 #define LF_COMPLEX80 0x800e
1330 #define LF_COMPLEX128 0x800f
1331 #define LF_VARSTRING 0x8010
1333 /* symtype e.g. for public_vx.symtype */
1334 #define SYMTYPE_NONE 0x0000
1335 #define SYMTYPE_CODE 0x0001
1336 #define SYMTYPE_FUNCTION 0x0002
1337 #define SYMTYPE_MANAGED 0x0004
1338 #define SYMTYPE_MSIL 0x0008
1340 /* ======================================== *
1341 * Symbol information
1342 * ======================================== */
1344 struct cv_addr_range
1346 unsigned int offStart
;
1347 unsigned short isectStart
;
1348 unsigned short cbRange
;
1353 unsigned short gapStartOffset
;
1354 unsigned short cbRange
;
1357 union codeview_symbol
1361 unsigned short int len
;
1362 unsigned short int id
;
1367 unsigned short int len
;
1368 unsigned short int id
;
1369 unsigned int offset
;
1370 unsigned short segment
;
1372 struct p_string p_name
;
1377 unsigned short int len
;
1378 unsigned short int id
;
1380 unsigned int offset
;
1381 unsigned short segment
;
1382 struct p_string p_name
;
1387 unsigned short int len
;
1388 unsigned short int id
;
1390 unsigned int offset
;
1391 unsigned short segment
;
1397 unsigned short int len
;
1398 unsigned short int id
;
1399 unsigned int pparent
;
1402 unsigned int offset
;
1403 unsigned short segment
;
1404 unsigned short thunk_len
;
1405 unsigned char thtype
;
1406 struct p_string p_name
;
1411 unsigned short int len
;
1412 unsigned short int id
;
1413 unsigned int pparent
;
1416 unsigned int offset
;
1417 unsigned short segment
;
1418 unsigned short thunk_len
;
1419 unsigned char thtype
;
1425 unsigned short int len
;
1426 unsigned short int id
;
1427 unsigned int pparent
;
1430 unsigned int proc_len
;
1431 unsigned int debug_start
;
1432 unsigned int debug_end
;
1433 unsigned int offset
;
1434 unsigned short segment
;
1435 cv_typ16_t proctype
;
1436 unsigned char flags
;
1437 struct p_string p_name
;
1442 unsigned short int len
;
1443 unsigned short int id
;
1444 unsigned int pparent
;
1447 unsigned int proc_len
;
1448 unsigned int debug_start
;
1449 unsigned int debug_end
;
1451 unsigned int offset
;
1452 unsigned short segment
;
1453 unsigned char flags
;
1454 struct p_string p_name
;
1459 unsigned short int len
;
1460 unsigned short int id
;
1461 unsigned int pparent
;
1464 unsigned int proc_len
;
1465 unsigned int debug_start
;
1466 unsigned int debug_end
;
1468 unsigned int offset
;
1469 unsigned short segment
;
1470 unsigned char flags
;
1476 unsigned short int len
;
1477 unsigned short int id
;
1478 unsigned int offset
;
1479 unsigned short segment
;
1480 unsigned short pubsymflags
;
1481 struct p_string p_name
;
1486 unsigned short int len
;
1487 unsigned short int id
;
1488 unsigned int pubsymflags
;
1489 unsigned int offset
;
1490 unsigned short segment
;
1491 struct p_string p_name
;
1496 unsigned short int len
;
1497 unsigned short int id
;
1498 unsigned int pubsymflags
;
1499 unsigned int offset
;
1500 unsigned short segment
;
1506 unsigned short int len
;
1507 unsigned short int id
; /* Always S_BPREL32_16t */
1508 unsigned int offset
; /* Stack offset relative to BP */
1510 struct p_string p_name
;
1515 unsigned short int len
;
1516 unsigned short int id
; /* Always S_BPREL32_ST */
1517 unsigned int offset
; /* Stack offset relative to EBP */
1519 struct p_string p_name
;
1524 unsigned short int len
;
1525 unsigned short int id
; /* Always S_BPREL32 */
1526 int offset
; /* Stack offset relative to BP */
1533 unsigned short int len
;
1534 unsigned short int id
; /* Always S_BPREL32 */
1535 int offset
; /* Stack offset relative to BP */
1543 unsigned short int len
;
1544 unsigned short int id
; /* Always S_REGISTER */
1547 struct p_string p_name
;
1548 /* don't handle register tracking */
1553 unsigned short int len
;
1554 unsigned short int id
; /* Always S_REGISTER_ST */
1555 cv_typ_t type
; /* check whether type & reg are correct */
1557 struct p_string p_name
;
1558 /* don't handle register tracking */
1563 unsigned short int len
;
1564 unsigned short int id
; /* Always S_REGISTER */
1565 cv_typ_t type
; /* check whether type & reg are correct */
1568 /* don't handle register tracking */
1573 unsigned short int len
;
1574 unsigned short int id
;
1575 unsigned int parent
;
1577 unsigned int length
;
1578 unsigned int offset
;
1579 unsigned short segment
;
1580 struct p_string p_name
;
1585 unsigned short int len
;
1586 unsigned short int id
;
1587 unsigned int parent
;
1589 unsigned int length
;
1590 unsigned int offset
;
1591 unsigned short segment
;
1597 unsigned short int len
;
1598 unsigned short int id
;
1599 unsigned short trampType
; /* 0: incremental, 1: branchisland */
1600 unsigned short cbThunk
;
1601 unsigned int offThunk
;
1602 unsigned int offTarget
;
1603 unsigned short sectThunk
;
1604 unsigned short sectTarget
;
1609 unsigned short int len
;
1610 unsigned short int id
;
1611 unsigned int offset
;
1612 unsigned short segment
;
1613 unsigned char flags
;
1614 struct p_string p_name
;
1619 unsigned short int len
;
1620 unsigned short int id
;
1621 unsigned int offset
;
1622 unsigned short segment
;
1623 unsigned char flags
;
1629 unsigned short int len
;
1630 unsigned short int id
;
1632 unsigned short cvalue
; /* numeric leaf */
1634 struct p_string p_name
;
1640 unsigned short int len
;
1641 unsigned short int id
;
1643 unsigned short cvalue
; /* numeric leaf */
1645 struct p_string p_name
;
1651 unsigned short int len
;
1652 unsigned short int id
;
1654 unsigned short cvalue
;
1662 unsigned short int len
;
1663 unsigned short int id
;
1665 struct p_string p_name
;
1670 unsigned short int len
;
1671 unsigned short int id
;
1673 struct p_string p_name
;
1678 unsigned short int len
;
1679 unsigned short int id
;
1686 unsigned short int len
;
1687 unsigned short int id
;
1689 struct p_string p_name
;
1694 unsigned short int len
;
1695 unsigned short int id
;
1702 unsigned short int len
;
1703 unsigned short int id
;
1704 unsigned char machine
;
1707 unsigned char language
: 8;
1708 unsigned char _dome
: 8; /* other missing fields */
1709 unsigned char pad
: 8;
1711 struct p_string p_name
;
1716 unsigned short int len
;
1717 unsigned short int id
;
1719 unsigned int iLanguage
: 8;
1720 unsigned int _dome
: 9; /* other missing fields */
1721 unsigned int pad
: 15;
1723 unsigned short machine
;
1724 unsigned short fe_major
;
1725 unsigned short fe_minor
;
1726 unsigned short fe_build
;
1727 unsigned short be_major
;
1728 unsigned short be_minor
;
1729 unsigned short be_build
;
1730 struct p_string p_name
;
1735 unsigned short int len
;
1736 unsigned short int id
;
1738 unsigned int iLanguage
: 8;
1739 unsigned int _dome
: 9; /* other missing fields */
1740 unsigned int pad
: 15;
1742 unsigned short machine
;
1743 unsigned short fe_major
;
1744 unsigned short fe_minor
;
1745 unsigned short fe_build
;
1746 unsigned short be_major
;
1747 unsigned short be_minor
;
1748 unsigned short be_build
;
1754 unsigned short int len
;
1755 unsigned short int id
;
1757 unsigned int iLanguage
: 8;
1758 unsigned int _dome
: 12; /* other missing fields */
1759 unsigned int pad
: 12;
1761 unsigned short machine
;
1762 unsigned short fe_major
;
1763 unsigned short fe_minor
;
1764 unsigned short fe_build
;
1765 unsigned short fe_qfe
;
1766 unsigned short be_major
;
1767 unsigned short be_minor
;
1768 unsigned short be_build
;
1769 unsigned short be_qfe
;
1775 unsigned short int len
;
1776 unsigned short int id
;
1777 unsigned int offset
;
1778 unsigned short segment
;
1780 struct p_string p_name
;
1785 unsigned short int len
;
1786 unsigned short int id
;
1788 unsigned int offset
;
1789 unsigned short segment
;
1790 struct p_string p_name
;
1795 unsigned short int len
;
1796 unsigned short int id
;
1798 unsigned int offset
;
1799 unsigned short segment
;
1805 unsigned short int len
;
1806 unsigned short int id
;
1807 unsigned int sumName
;
1809 unsigned short imod
;
1815 unsigned short int len
;
1816 unsigned short int id
;
1817 unsigned int offset
;
1818 unsigned short segment
;
1823 unsigned short int len
;
1824 unsigned short int id
;
1825 unsigned int offset
;
1826 unsigned int unknown
;
1827 } security_cookie_v3
;
1831 unsigned short int len
;
1832 unsigned short int id
;
1833 unsigned int sz_frame
; /* size of frame */
1834 unsigned int unknown2
;
1835 unsigned int unknown3
;
1836 unsigned int sz_saved_regs
; /* size of saved registers from callee */
1837 unsigned int eh_offset
; /* offset for exception handler */
1838 unsigned short eh_sect
; /* section for exception handler */
1844 unsigned short int len
;
1845 unsigned short int id
;
1846 unsigned int offset
;
1847 unsigned short sect_idx
;
1848 unsigned short inst_len
;
1850 } heap_alloc_site_v3
;
1854 unsigned short int len
;
1855 unsigned short int id
;
1857 unsigned short varflags
;
1863 unsigned short int len
;
1864 unsigned short int id
;
1865 unsigned int program
;
1866 struct cv_addr_range range
;
1867 struct cv_addr_gap gaps
[0];
1872 unsigned short int len
;
1873 unsigned short int id
;
1874 unsigned int program
;
1875 unsigned int offParent
;
1876 struct cv_addr_range range
;
1877 struct cv_addr_gap gaps
[0];
1878 } defrange_subfield_v3
;
1882 unsigned short int len
;
1883 unsigned short int id
;
1885 unsigned short attr
;
1886 struct cv_addr_range range
;
1887 struct cv_addr_gap gaps
[0];
1888 } defrange_register_v3
;
1892 unsigned short int len
;
1893 unsigned short int id
;
1894 int offFramePointer
;
1895 struct cv_addr_range range
;
1896 struct cv_addr_gap gaps
[0];
1897 } defrange_frameptrrel_v3
;
1901 unsigned short int len
;
1902 unsigned short int id
;
1903 int offFramePointer
;
1904 } defrange_frameptr_relfullscope_v3
;
1908 unsigned short int len
;
1909 unsigned short int id
;
1911 unsigned short attr
;
1912 unsigned int offParent
: 12;
1913 unsigned int padding
: 20;
1914 struct cv_addr_range range
;
1915 struct cv_addr_gap gaps
[0];
1916 } defrange_subfield_register_v3
;
1920 unsigned short int len
;
1921 unsigned short int id
;
1922 unsigned short baseReg
;
1923 unsigned short spilledUdtMember
: 1;
1924 unsigned short padding
: 3;
1925 unsigned short offsetParent
: 12;
1927 struct cv_addr_range range
;
1928 struct cv_addr_gap gaps
[0];
1929 } defrange_registerrel_v3
;
1933 unsigned short int len
;
1934 unsigned short int id
;
1940 unsigned short int len
;
1941 unsigned short int id
;
1942 unsigned int pParent
;
1944 cv_itemid_t inlinee
;
1945 unsigned char binaryAnnotations
[0];
1950 unsigned short int len
;
1951 unsigned short int typ
;
1953 unsigned short sect
;
1954 unsigned short _pad0
;
1960 unsigned short int len
;
1961 unsigned short int id
;
1962 unsigned int pParent
;
1964 cv_itemid_t inlinee
;
1965 unsigned int invocations
;
1966 unsigned char binaryAnnotations
[0];
1971 unsigned short int len
;
1972 unsigned short int id
;
1974 cv_typ_t funcs
[0]; /* array of cuntions, count entries */
1976 unsigned int invocations
[0]; /* array of count entries, paires with funcs */
1982 unsigned short int len
;
1983 unsigned short int id
;
1985 unsigned int modOffset
;
1986 unsigned short varflags
;
1992 unsigned short int len
;
1993 unsigned short int id
;
1994 struct p_string pname
;
1999 unsigned short int len
;
2000 unsigned short int id
;
2006 unsigned short int len
;
2007 unsigned short int id
;
2008 unsigned int pParent
;
2010 unsigned int length
;
2011 unsigned int scf
; /* CV_SEPCODEFLAGS */
2013 unsigned int offParent
;
2014 unsigned short int sect
;
2015 unsigned short int sectParent
;
2020 unsigned short int len
;
2021 unsigned short int id
;
2023 unsigned short int seg
;
2024 unsigned short int csz
; /* number of bytes in following array */
2025 char rgsz
[1]; /* array of null terminated strings (bounded by csz) */
2030 unsigned short int len
;
2031 unsigned short int id
;
2032 unsigned int invocations
;
2035 unsigned staInstLive
;
2039 enum BinaryAnnotationOpcode
2043 BA_OP_ChangeCodeOffsetBase
,
2044 BA_OP_ChangeCodeOffset
,
2045 BA_OP_ChangeCodeLength
,
2047 BA_OP_ChangeLineOffset
,
2048 BA_OP_ChangeLineEndDelta
,
2049 BA_OP_ChangeRangeKind
,
2050 BA_OP_ChangeColumnStart
,
2051 BA_OP_ChangeColumnEndDelta
,
2052 BA_OP_ChangeCodeOffsetAndLineOffset
,
2053 BA_OP_ChangeCodeLengthAndCodeOffset
,
2054 BA_OP_ChangeColumnEnd
,
2057 #define S_COMPILE 0x0001
2058 #define S_REGISTER_16t 0x0002
2059 #define S_CONSTANT_16t 0x0003
2060 #define S_UDT_16t 0x0004
2061 #define S_SSEARCH 0x0005
2062 #define S_END 0x0006
2063 #define S_SKIP 0x0007
2064 #define S_CVRESERVE 0x0008
2065 #define S_OBJNAME_ST 0x0009
2066 #define S_ENDARG 0x000a
2067 #define S_COBOLUDT_16t 0x000b
2068 #define S_MANYREG_16t 0x000c
2069 #define S_RETURN 0x000d
2070 #define S_ENTRYTHIS 0x000e
2072 #define S_BPREL32_16t 0x0200
2073 #define S_LDATA32_16t 0x0201
2074 #define S_GDATA32_16t 0x0202
2075 #define S_PUB32_16t 0x0203
2076 #define S_LPROC32_16t 0x0204
2077 #define S_GPROC32_16t 0x0205
2078 #define S_THUNK32_ST 0x0206
2079 #define S_BLOCK32_ST 0x0207
2080 #define S_WITH32_ST 0x0208
2081 #define S_LABEL32_ST 0x0209
2082 #define S_CEXMODEL32 0x020a
2083 #define S_VFTABLE32_16t 0x020b
2084 #define S_REGREL32_16t 0x020c
2085 #define S_LTHREAD32_16t 0x020d
2086 #define S_GTHREAD32_16t 0x020e
2088 #define S_PROCREF_ST 0x0400
2089 #define S_DATAREF_ST 0x0401
2090 #define S_ALIGN 0x0402
2091 #define S_LPROCREF_ST 0x0403
2093 #define S_REGISTER_ST 0x1001 /* Variants with new 32-bit type indices */
2094 #define S_CONSTANT_ST 0x1002
2095 #define S_UDT_ST 0x1003
2096 #define S_COBOLUDT_ST 0x1004
2097 #define S_MANYREG_ST 0x1005
2098 #define S_BPREL32_ST 0x1006
2099 #define S_LDATA32_ST 0x1007
2100 #define S_GDATA32_ST 0x1008
2101 #define S_PUB32_ST 0x1009
2102 #define S_LPROC32_ST 0x100a
2103 #define S_GPROC32_ST 0x100b
2104 #define S_VFTABLE32 0x100c
2105 #define S_REGREL32_ST 0x100d
2106 #define S_LTHREAD32_ST 0x100e
2107 #define S_GTHREAD32_ST 0x100f
2108 #define S_FRAMEPROC 0x1012
2109 #define S_COMPILE2_ST 0x1013
2110 #define S_ANNOTATION 0x1019
2111 #define S_UNAMESPACE_ST 0x1029
2113 #define S_OBJNAME 0x1101
2114 #define S_THUNK32 0x1102
2115 #define S_BLOCK32 0x1103
2116 #define S_WITH32 0x1104
2117 #define S_LABEL32 0x1105
2118 #define S_REGISTER 0x1106
2119 #define S_CONSTANT 0x1107
2120 #define S_UDT 0x1108
2121 #define S_COBOLUDT 0x1109
2122 #define S_MANYREG 0x110A
2123 #define S_BPREL32 0x110B
2124 #define S_LDATA32 0x110C
2125 #define S_GDATA32 0x110D
2126 #define S_PUB32 0x110E
2127 #define S_LPROC32 0x110F
2128 #define S_GPROC32 0x1110
2129 #define S_REGREL32 0x1111
2130 #define S_LTHREAD32 0x1112
2131 #define S_GTHREAD32 0x1113
2132 #define S_LPROCMIPS 0x1114
2133 #define S_GPROCMIPS 0x1115
2134 #define S_COMPILE2 0x1116 /* compiler command line options and build information */
2135 #define S_MANYREG2 0x1117
2136 #define S_LPROCIA64 0x1118
2137 #define S_GPROCIA64 0x1119
2138 #define S_LOCALSLOT 0x111A
2139 #define S_PARAMSLOT 0x111B
2140 #define S_LMANDATA 0x111C
2141 #define S_GMANDATA 0x111D
2142 #define S_MANFRAMEREL 0x111E
2143 #define S_MANREGISTER 0x111F
2144 #define S_MANSLOT 0x1120
2145 #define S_MANMANYREG 0x1121
2146 #define S_MANREGREL 0x1122
2147 #define S_MANMANYREG2 0x1123
2148 #define S_UNAMESPACE 0x1124
2149 #define S_PROCREF 0x1125 /* didn't get the difference between the two */
2150 #define S_DATAREF 0x1126
2151 #define S_LPROCREF 0x1127
2152 #define S_ANNOTATIONREF 0x1128
2153 #define S_TOKENREF 0x1129
2154 #define S_GMANPROC 0x112A
2155 #define S_LMANPROC 0x112B
2156 #define S_TRAMPOLINE 0x112C
2157 #define S_MANCONSTANT 0x112D
2158 #define S_ATTR_FRAMEREL 0x112E
2159 #define S_ATTR_REGISTER 0x112F
2160 #define S_ATTR_REGREL 0x1130
2161 #define S_ATTR_MANYREG 0x1131
2162 #define S_SEPCODE 0x1132
2163 #define S_LOCAL_2005 0x1133
2164 #define S_DEFRANGE_2005 0x1134
2165 #define S_DEFRANGE2_2005 0x1135
2166 #define S_SECTION 0x1136
2167 #define S_COFFGROUP 0x1137
2168 #define S_EXPORT 0x1138
2169 #define S_CALLSITEINFO 0x1139
2170 #define S_FRAMECOOKIE 0x113A
2171 #define S_DISCARDED 0x113B
2172 #define S_COMPILE3 0x113C
2173 #define S_ENVBLOCK 0x113D
2175 #define S_LOCAL 0x113E
2176 #define S_DEFRANGE 0x113F
2177 #define S_DEFRANGE_SUBFIELD 0x1140
2178 #define S_DEFRANGE_REGISTER 0x1141
2179 #define S_DEFRANGE_FRAMEPOINTER_REL 0x1142
2180 #define S_DEFRANGE_SUBFIELD_REGISTER 0x1143
2181 #define S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE 0x1144
2182 #define S_DEFRANGE_REGISTER_REL 0x1145
2183 #define S_LPROC32_ID 0x1146
2184 #define S_GPROC32_ID 0x1147
2185 #define S_LPROCMIPS_ID 0x1148
2186 #define S_GPROCMIPS_ID 0x1149
2187 #define S_LPROCIA64_ID 0x114A
2188 #define S_GPROCIA64_ID 0x114B
2189 #define S_BUILDINFO 0x114C
2190 #define S_INLINESITE 0x114D
2191 #define S_INLINESITE_END 0x114E
2192 #define S_PROC_ID_END 0x114F
2193 #define S_DEFRANGE_HLSL 0x1150
2194 #define S_GDATA_HLSL 0x1151
2195 #define S_LDATA_HLSL 0x1152
2197 #define S_FILESTATIC 0x1153
2198 #define S_ARMSWITCHTABLE 0x1159
2199 #define S_CALLEES 0x115A
2200 #define S_CALLERS 0x115B
2201 #define S_POGODATA 0x115C
2202 #define S_INLINESITE2 0x115D
2203 #define S_HEAPALLOCSITE 0x115E
2204 #define S_MOD_TYPEREF 0x115F
2205 #define S_REF_MINIPDB 0x1160
2206 #define S_PDBMAP 0x1161
2207 #define S_GDATA_HLSL32 0x1162
2208 #define S_LDATA_HLSL32 0x1163
2209 #define S_GDATA_HLSL32_EX 0x1164
2210 #define S_LDATA_HLSL32_EX 0x1165
2212 /* not documented yet on MS CV github repo, but that's how LLVM calls it */
2213 #define S_INLINEES 0x1168
2215 /* ======================================== *
2216 * Line number information
2217 * ======================================== */
2219 enum DEBUG_S_SUBSECTION_TYPE
2221 DEBUG_S_IGNORE
= 0x80000000, /* bit flag: when set, ignore whole subsection content */
2223 DEBUG_S_SYMBOLS
= 0xf1,
2225 DEBUG_S_STRINGTABLE
,
2228 DEBUG_S_INLINEELINES
,
2229 DEBUG_S_CROSSSCOPEIMPORTS
,
2230 DEBUG_S_CROSSSCOPEEXPORTS
,
2233 DEBUG_S_FUNC_MDTOKEN_MAP
,
2234 DEBUG_S_TYPE_MDTOKEN_MAP
,
2235 DEBUG_S_MERGED_ASSEMBLYINPUT
,
2237 DEBUG_S_COFF_SYMBOL_RVA
,
2240 struct CV_DebugSSubsectionHeader_t
2242 enum DEBUG_S_SUBSECTION_TYPE type
;
2246 struct CV_DebugSLinesHeader_t
2249 unsigned short segCon
;
2250 unsigned short flags
;
2254 struct CV_DebugSLinesFileBlockHeader_t
2259 /* followed by two variable length arrays
2260 * CV_Line_t lines[nLines];
2261 * ^ columns present when CV_DebugSLinesHeader_t.flags has CV_LINES_HAVE_COLUMNS set
2262 * CV_Column_t columns[nLines];
2266 #define CV_LINES_HAVE_COLUMNS 0x0001
2271 unsigned linenumStart
:24;
2272 unsigned deltaLineEnd
:7;
2273 unsigned fStatement
:1;
2278 unsigned short offColumnStart
;
2279 unsigned short offColumnEnd
;
2282 struct CV_Checksum_t
/* this one is not defined in microsoft pdb information */
2284 unsigned strOffset
; /* offset in string table for filename */
2285 unsigned char size
; /* size of checksum */
2286 unsigned char method
; /* method used to compute check sum */
2287 unsigned char checksum
[0]; /* (size) bytes */
2288 /* result is padded on 4-byte boundary */
2291 #define CV_INLINEE_SOURCE_LINE_SIGNATURE 0x0
2292 #define CV_INLINEE_SOURCE_LINE_SIGNATURE_EX 0x1
2294 typedef struct CV_InlineeSourceLine_t
2296 cv_itemid_t inlinee
; /* function id */
2297 unsigned fileId
; /* offset in DEBUG_S_FILECHKSMS */
2298 unsigned sourceLineNum
; /* first line number */
2299 } InlineeSourceLine
;
2301 typedef struct CV_InlineeSourceLineEx_t
2303 cv_itemid_t inlinee
; /* function id */
2304 unsigned fileId
; /* offset in DEBUG_S_FILECHKSMS */
2305 unsigned sourceLineNum
; /* first line number */
2306 unsigned int countOfExtraFiles
;
2307 unsigned extraFileId
[0];
2308 } InlineeSourceLineEx
;
2311 /* those are Wine only helpers */
2312 /* align ptr on sz boundary; sz must be a power of 2 */
2313 #define CV_ALIGN(ptr, sz) ((const void*)(((DWORD_PTR)(ptr) + ((sz) - 1)) & ~((sz) - 1)))
2314 /* move after (ptr) record */
2315 #define CV_RECORD_AFTER(ptr) ((const void*)((ptr) + 1))
2316 /* move after (ptr) record and a gap of sz bytes */
2317 #define CV_RECORD_GAP(ptr, sz) ((const void*)((const char*)((ptr) + 1) + (sz)))
2318 /* test whether ptr record is within limit boundary */
2319 #define CV_IS_INSIDE(ptr, limit) (CV_RECORD_AFTER(ptr) <= (const void*)(limit))
2320 #endif /* __WINESRC__ */
2322 struct codeview_linetab_block
2325 unsigned short num_lines
;
2326 unsigned int offsets
[1]; /* in fact num_lines */
2327 /* unsigned short linenos[]; */
2336 /* ======================================== *
2337 * PDB file information
2338 * ======================================== */
2344 unsigned int unknown
;
2347 struct PDB_JG_HEADER
2350 unsigned int signature
;
2351 unsigned int block_size
;
2352 unsigned short free_list
;
2353 unsigned short total_alloc
;
2354 struct PDB_FILE toc
;
2355 unsigned short toc_block
[1];
2358 struct PDB_DS_HEADER
2361 unsigned int block_size
;
2362 unsigned int unknown1
;
2363 unsigned int num_pages
;
2364 unsigned int toc_size
;
2365 unsigned int unknown2
;
2366 unsigned int toc_page
;
2371 unsigned int num_files
;
2372 struct PDB_FILE file
[1];
2377 unsigned int num_files
;
2378 unsigned int file_size
[1];
2383 unsigned int Version
;
2384 unsigned int TimeDateStamp
;
2386 unsigned int cbNames
;
2392 unsigned int Version
;
2393 unsigned int TimeDateStamp
;
2396 unsigned int cbNames
;
2400 typedef struct _PDB_TYPES_OLD
2402 unsigned int version
;
2403 unsigned short first_index
;
2404 unsigned short last_index
;
2405 unsigned int type_size
;
2406 unsigned short file
;
2408 } PDB_TYPES_OLD
, *PPDB_TYPES_OLD
;
2410 typedef struct _PDB_TYPES
2412 unsigned int version
;
2413 unsigned int type_offset
;
2414 unsigned int first_index
;
2415 unsigned int last_index
;
2416 unsigned int type_size
;
2417 unsigned short file
;
2419 unsigned int hash_size
;
2420 unsigned int hash_base
;
2421 unsigned int hash_offset
;
2422 unsigned int hash_len
;
2423 unsigned int search_offset
;
2424 unsigned int search_len
;
2425 unsigned int unknown_offset
;
2426 unsigned int unknown_len
;
2427 } PDB_TYPES
, *PPDB_TYPES
;
2429 typedef struct _PDB_SYMBOL_RANGE
2431 unsigned short segment
;
2432 unsigned short pad1
;
2433 unsigned int offset
;
2435 unsigned int characteristics
;
2436 unsigned short index
;
2437 unsigned short pad2
;
2438 } PDB_SYMBOL_RANGE
, *PPDB_SYMBOL_RANGE
;
2440 typedef struct _PDB_SYMBOL_RANGE_EX
2442 unsigned short segment
;
2443 unsigned short pad1
;
2444 unsigned int offset
;
2446 unsigned int characteristics
;
2447 unsigned short index
;
2448 unsigned short pad2
;
2449 unsigned int timestamp
;
2450 unsigned int unknown
;
2451 } PDB_SYMBOL_RANGE_EX
, *PPDB_SYMBOL_RANGE_EX
;
2453 typedef struct _PDB_SYMBOL_FILE
2455 unsigned int unknown1
;
2456 PDB_SYMBOL_RANGE range
;
2457 unsigned short flag
;
2458 unsigned short file
;
2459 unsigned int symbol_size
;
2460 unsigned int lineno_size
;
2461 unsigned int lineno2_size
;
2462 unsigned int nSrcFiles
;
2463 unsigned int attribute
;
2465 } PDB_SYMBOL_FILE
, *PPDB_SYMBOL_FILE
;
2467 typedef struct _PDB_SYMBOL_FILE_EX
2469 unsigned int unknown1
;
2470 PDB_SYMBOL_RANGE_EX range
;
2471 unsigned short flag
;
2472 unsigned short file
;
2473 unsigned int symbol_size
;
2474 unsigned int lineno_size
;
2475 unsigned int lineno2_size
;
2476 unsigned int nSrcFiles
;
2477 unsigned int attribute
;
2478 unsigned int reserved
[2];
2480 } PDB_SYMBOL_FILE_EX
, *PPDB_SYMBOL_FILE_EX
;
2482 typedef struct _PDB_SYMBOL_SOURCE
2484 unsigned short nModules
;
2485 unsigned short nSrcFiles
;
2486 unsigned short table
[1];
2487 } PDB_SYMBOL_SOURCE
, *PPDB_SYMBOL_SOURCE
;
2489 typedef struct _PDB_SYMBOL_IMPORT
2491 unsigned int unknown1
;
2492 unsigned int unknown2
;
2493 unsigned int TimeDateStamp
;
2496 } PDB_SYMBOL_IMPORT
, *PPDB_SYMBOL_IMPORT
;
2498 typedef struct _PDB_SYMBOLS_OLD
2500 unsigned short global_file
;
2501 unsigned short public_file
;
2502 unsigned short gsym_file
;
2504 unsigned int module_size
;
2505 unsigned int offset_size
;
2506 unsigned int hash_size
;
2507 unsigned int srcmodule_size
;
2508 } PDB_SYMBOLS_OLD
, *PPDB_SYMBOLS_OLD
;
2510 typedef struct _PDB_SYMBOLS
2512 unsigned int signature
;
2513 unsigned int version
;
2515 unsigned short global_file
;
2516 unsigned short flags
;
2517 unsigned short public_file
;
2518 unsigned short bldVer
;
2519 unsigned short gsym_file
;
2520 unsigned short rbldVer
;
2521 unsigned int module_size
;
2522 unsigned int offset_size
;
2523 unsigned int hash_size
;
2524 unsigned int srcmodule_size
;
2525 unsigned int pdbimport_size
;
2526 unsigned int resvd0
;
2527 unsigned int stream_index_size
;
2528 unsigned int unknown2_size
;
2529 unsigned short resvd3
;
2530 unsigned short machine
;
2531 unsigned int resvd4
;
2532 } PDB_SYMBOLS
, *PPDB_SYMBOLS
;
2537 unsigned short unk0
;
2538 unsigned short unk1
;
2539 unsigned short unk2
;
2540 unsigned short unk3
;
2541 unsigned short segments
;
2542 } PDB_STREAM_INDEXES_OLD
;
2547 unsigned short unk0
;
2548 unsigned short unk1
;
2549 unsigned short unk2
;
2550 unsigned short unk3
;
2551 unsigned short segments
;
2552 unsigned short unk4
;
2553 unsigned short unk5
;
2554 unsigned short unk6
;
2555 unsigned short FPO_EXT
;
2556 unsigned short unk7
;
2557 } PDB_STREAM_INDEXES
;
2559 typedef struct _PDB_FPO_DATA
2562 unsigned int func_size
;
2563 unsigned int locals_size
;
2564 unsigned int params_size
;
2565 unsigned int maxstack_size
;
2566 unsigned int str_offset
;
2567 unsigned short prolog_size
;
2568 unsigned short savedregs_size
;
2569 #define PDB_FPO_DFL_SEH 0x00000001
2570 #define PDB_FPO_DFL_EH 0x00000002
2571 #define PDB_FPO_DFL_IN_BLOCK 0x00000004
2575 #include "poppack.h"
2577 /* ===================================================
2578 * The old CodeView stuff (for NB09 and NB11)
2579 * =================================================== */
2581 #define sstModule 0x120
2582 #define sstTypes 0x121
2583 #define sstPublic 0x122
2584 #define sstPublicSym 0x123
2585 #define sstSymbols 0x124
2586 #define sstAlignSym 0x125
2587 #define sstSrcLnSeg 0x126
2588 #define sstSrcModule 0x127
2589 #define sstLibraries 0x128
2590 #define sstGlobalSym 0x129
2591 #define sstGlobalPub 0x12a
2592 #define sstGlobalTypes 0x12b
2593 #define sstMPC 0x12c
2594 #define sstSegMap 0x12d
2595 #define sstSegName 0x12e
2596 #define sstPreComp 0x12f
2597 #define sstFileIndex 0x133
2598 #define sstStaticSym 0x134
2600 /* overall structure information */
2601 typedef struct OMFSignature
2607 typedef struct OMFSignatureRSDS
2615 typedef struct _CODEVIEW_PDB_DATA
2619 unsigned int timestamp
;
2622 } CODEVIEW_PDB_DATA
, *PCODEVIEW_PDB_DATA
;
2624 typedef struct OMFDirHeader
2626 unsigned short cbDirHeader
;
2627 unsigned short cbDirEntry
;
2629 unsigned int lfoNextDir
;
2633 typedef struct OMFDirEntry
2635 unsigned short SubSection
;
2636 unsigned short iMod
;
2641 /* sstModule subsection */
2643 typedef struct OMFSegDesc
2651 typedef struct OMFModule
2653 unsigned short ovlNumber
;
2654 unsigned short iLib
;
2655 unsigned short cSeg
;
2658 OMFSegDesc SegInfo[cSeg];
2663 typedef struct OMFGlobalTypes
2666 unsigned int cTypes
;
2668 unsigned int offset[cTypes];
2673 /* sstGlobalPub section */
2675 /* Header for symbol table */
2676 typedef struct OMFSymHash
2678 unsigned short symhash
;
2679 unsigned short addrhash
;
2680 unsigned int cbSymbol
;
2681 unsigned int cbHSym
;
2682 unsigned int cbHAddr
;
2685 /* sstSegMap section */
2687 typedef struct OMFSegMapDesc
2689 unsigned short flags
;
2691 unsigned short group
;
2692 unsigned short frame
;
2693 unsigned short iSegName
;
2694 unsigned short iClassName
;
2695 unsigned int offset
;
2699 typedef struct OMFSegMap
2701 unsigned short cSeg
;
2702 unsigned short cSegLog
;
2703 /* OMFSegMapDesc rgDesc[0];*/
2707 /* sstSrcModule section */
2709 typedef struct OMFSourceLine
2712 unsigned short cLnOff
;
2713 unsigned int offset
[1];
2714 unsigned short lineNbr
[1];
2717 typedef struct OMFSourceFile
2719 unsigned short cSeg
;
2720 unsigned short reserved
;
2721 unsigned int baseSrcLn
[1];
2722 unsigned short cFName
;
2726 typedef struct OMFSourceModule
2728 unsigned short cFile
;
2729 unsigned short cSeg
;
2730 unsigned int baseSrcFile
[1];