@@ -814,6 +814,7 @@ static void codeview_dump_one_type(unsigned curr_type, const union codeview_type
814
814
815
815
switch (type -> generic .id )
816
816
{
817
+ /* types from TPI (aka #2) stream */
817
818
case LF_POINTER_V1 :
818
819
printf ("\t%x => Pointer V1 to type:%x\n" ,
819
820
curr_type , type -> pointer_v1 .datatype );
@@ -1099,6 +1100,49 @@ static void codeview_dump_one_type(unsigned curr_type, const union codeview_type
1099
1100
printf ("\n" );
1100
1101
break ;
1101
1102
1103
+ /* types from IPI (aka #4) stream */
1104
+ case LF_FUNC_ID :
1105
+ printf ("\t%x => FuncId %s scopeId:%04x type:%04x\n" ,
1106
+ curr_type , type -> func_id_v3 .name ,
1107
+ type -> func_id_v3 .scopeId , type -> func_id_v3 .type );
1108
+ break ;
1109
+ case LF_MFUNC_ID :
1110
+ printf ("\t%x => MFuncId %s parent:%04x type:%04x\n" ,
1111
+ curr_type , type -> mfunc_id_v3 .name ,
1112
+ type -> mfunc_id_v3 .parentType , type -> mfunc_id_v3 .type );
1113
+ break ;
1114
+ case LF_BUILDINFO :
1115
+ printf ("\t%x => BuildInfo count:%d\n" , curr_type , type -> buildinfo_v3 .count );
1116
+ if (type -> buildinfo_v3 .count >= 1 ) printf ("\t\tcurrent dir: %04x\n" , type -> buildinfo_v3 .arg [0 ]);
1117
+ if (type -> buildinfo_v3 .count >= 2 ) printf ("\t\tbuild tool: %04x\n" , type -> buildinfo_v3 .arg [1 ]);
1118
+ if (type -> buildinfo_v3 .count >= 3 ) printf ("\t\tsource file: %04x\n" , type -> buildinfo_v3 .arg [2 ]);
1119
+ if (type -> buildinfo_v3 .count >= 4 ) printf ("\t\tPDB file: %04x\n" , type -> buildinfo_v3 .arg [3 ]);
1120
+ if (type -> buildinfo_v3 .count >= 5 ) printf ("\t\tArguments: %04x\n" , type -> buildinfo_v3 .arg [4 ]);
1121
+ break ;
1122
+ case LF_SUBSTR_LIST :
1123
+ printf ("\t%x => SubstrList V3(#%u):" , curr_type , reftype -> arglist_v2 .num );
1124
+ for (j = 0 ; j < reftype -> arglist_v2 .num ; j ++ )
1125
+ {
1126
+ printf ("\t %x" , reftype -> arglist_v2 .args [j ]);
1127
+ }
1128
+ printf ("\t\n" );
1129
+ break ;
1130
+ case LF_STRING_ID :
1131
+ printf ("\t%x => StringId %s strid:%04x\n" ,
1132
+ curr_type , type -> string_id_v3 .name , type -> string_id_v3 .strid );
1133
+ break ;
1134
+ case LF_UDT_SRC_LINE :
1135
+ printf ("\t%x => Udt-SrcLine type:%04x src:%04x line:%d\n" ,
1136
+ curr_type , type -> udt_src_line_v3 .type ,
1137
+ type -> udt_src_line_v3 .src , type -> udt_src_line_v3 .line );
1138
+ break ;
1139
+ case LF_UDT_MOD_SRC_LINE :
1140
+ printf ("\t%x => Udt-ModSrcLine type:%04x src:%04x line:%d mod:%d\n" ,
1141
+ curr_type , type -> udt_mod_src_line_v3 .type ,
1142
+ type -> udt_mod_src_line_v3 .src , type -> udt_mod_src_line_v3 .line ,
1143
+ type -> udt_mod_src_line_v3 .imod );
1144
+ break ;
1145
+
1102
1146
default :
1103
1147
printf (">>> Unsupported type-id %x for %x\n" , type -> generic .id , curr_type );
1104
1148
dump_data ((const void * )type , type -> generic .len + 2 , "" );
0 commit comments