35#define NONAMELESSUNION
50#include "wine/mscvpdb.h"
84#define CV_MAX_MODULES 32
99 const char* hexof =
"0123456789abcdef";
102 for (
i = 0;
i <
len;
i += 16)
108 msg[10 + 3 *
j + 0] = hexof[
x[
i +
j] >> 4];
109 msg[10 + 3 *
j + 1] = hexof[
x[
i +
j] & 15];
110 msg[10 + 3 *
j + 2] =
' ';
111 msg[10 + 3 * 16 + 1 +
j] = (
x[
i +
j] >= 0x20 &&
x[
i +
j] < 0x7f) ?
114 msg[10 + 3 * 16] =
' ';
115 msg[10 + 3 * 16 + 1 + 16] =
'\0';
124#define MAX_BUILTIN_TYPES 0x06FF
125#define FIRST_DEFINABLE_TYPE 0x1000
136#define CV_MAX_MODULES 32
261 unsigned short int type = *leaf++;
267 v->n1.n2.n3.uintVal =
type;
276 v->n1.n2.n3.cVal = *(
const char*)leaf;
282 v->n1.n2.n3.iVal = *(
const short*)leaf;
288 v->n1.n2.n3.uiVal = *leaf;
294 v->n1.n2.n3.lVal = *(
const int*)leaf;
300 v->n1.n2.n3.uiVal = *(
const unsigned int*)leaf;
306 v->n1.n2.n3.llVal = *(
const long long int*)leaf;
312 v->n1.n2.n3.ullVal = *(
const long long unsigned int*)leaf;
318 v->n1.n2.n3.fltVal = *(
const float*)leaf;
322 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
330 v->n1.n2.n3.fltVal = *(
const double*)leaf;
334 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
340 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
346 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
352 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
358 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
364 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
370 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
376 FIXME(
"Unknown numeric leaf type %04x\n",
type);
387 unsigned short int type = *leaf++;
400 *
value = *(
const char*)leaf;
405 *
value = *(
const short*)leaf;
415 *
value = *(
const int*)leaf;
420 *
value = *(
const unsigned int*)leaf;
425 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
431 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
437 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
443 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
449 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
455 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
461 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
467 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
473 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
479 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
485 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
491 FIXME(
"Unknown numeric leaf type %04x\n",
type);
505 static char symname[256];
508 symname[p_name->
namelen] =
'\0';
510 return (!*symname ||
strcmp(symname,
"__unnamed") == 0) ?
NULL : symname;
529 unsigned mod_index = typeno >> 24;
530 unsigned mod_typeno = typeno & 0x00FFFFFF;
536 FIXME(
"Module of index %d isn't loaded yet (%x)\n", mod_index, typeno);
543 if (!
quiet && !
symt && typeno)
FIXME(
"Returning NULL symt for type-id %x\n", typeno);
565 FIXME(
"What the heck\n");
568 FIXME(
"Adding %x to non allowed module\n", typeno);
571 if ((typeno >> 24) != 0)
572 FIXME(
"No module index while inserting type-id assumption is wrong %x\n",
596 FIXME(
"Overwriting at %x\n", typeno);
637 if (!typeno)
return NULL;
643 FIXME(
"Cannot locate type %x\n", typeno);
647 if (!
symt)
FIXME(
"Couldn't load forward type %x\n", typeno);
652 struct symt* existing,
653 unsigned int pointee_type)
655 struct symt* pointee;
668 unsigned int elemtype,
669 unsigned int indextype,
670 unsigned int arr_len)
683 const unsigned char*
last = (
const BYTE*)ref_type + ref_type->
generic.len + 2;
696 switch (
type->generic.id)
701 const struct p_string* p_name = (
const struct p_string*)((
const unsigned char*)&
type->enumerate_v1.value + vlen);
710 const char*
name = (
const char*)&
type->enumerate_v3.value + vlen;
718 FIXME(
"Unsupported type %04x in ENUM field list\n",
type->generic.id);
729 struct symt* subtype;
763 unsigned fieldlistno)
765 const unsigned char*
ptr;
766 const unsigned char*
last;
773 if (!fieldlistno)
return TRUE;
788 switch (
type->generic.id)
795 ptr += 2 + 2 + 2 + leaf_len;
803 ptr += 2 + 2 + 4 + leaf_len;
809 const unsigned short int* p_vboff;
812 p_vboff = (
const unsigned short int*)((
const char*)&
type->vbclass_v1.vbpoff + leaf_len);
817 ptr += 2 + 2 + 2 + 2 + leaf_len + vplen;
824 const unsigned short int* p_vboff;
827 p_vboff = (
const unsigned short int*)((
const char*)&
type->vbclass_v2.vbpoff + leaf_len);
832 ptr += 2 + 2 + 4 + 4 + leaf_len + vplen;
841 type->member_v1.type);
843 ptr += 2 + 2 + 2 + leaf_len + (1 + p_name->
namelen);
848 p_name = (
const struct p_string*)((
const unsigned char*)&
type->member_v2.offset + leaf_len);
851 type->member_v2.type);
853 ptr += 2 + 2 + 4 + leaf_len + (1 + p_name->
namelen);
858 c_name = (
const char*)&
type->member_v3.offset + leaf_len;
862 ptr += 2 + 2 + 4 + leaf_len + (
strlen(c_name) + 1);
867 ptr += 2 + 2 + 2 + (1 +
type->stmember_v1.p_name.namelen);
872 ptr += 2 + 4 + 2 + (1 +
type->stmember_v2.p_name.namelen);
882 ptr += 2 + 2 + 2 + (1 +
type->method_v1.p_name.namelen);
887 ptr += 2 + 2 + 4 + (1 +
type->method_v2.p_name.namelen);
897 ptr += 2 + 2 + (1 +
type->nesttype_v1.p_name.namelen);
902 ptr += 2 + 2 + 4 + (1 +
type->nesttype_v2.p_name.namelen);
922 switch ((
type->onemethod_v1.attribute >> 2) & 7)
925 ptr += 2 + 2 + 2 + 4 + (1 +
type->onemethod_virt_v1.p_name.namelen);
929 ptr += 2 + 2 + 2 + (1 +
type->onemethod_v1.p_name.namelen);
936 switch ((
type->onemethod_v2.attribute >> 2) & 7)
939 ptr += 2 + 2 + 4 + 4 + (1 +
type->onemethod_virt_v2.p_name.namelen);
943 ptr += 2 + 2 + 4 + (1 +
type->onemethod_v2.p_name.namelen);
950 switch ((
type->onemethod_v3.attribute >> 2) & 7)
953 ptr += 2 + 2 + 4 + 4 + (
strlen(
type->onemethod_virt_v3.name) + 1);
975 FIXME(
"Unsupported type %04x in STRUCT field list\n",
type->generic.id);
984 struct symt* existing,
986 unsigned fieldlistno,
1011 struct symt* existing,
1012 const char*
name,
int structlen,
1034 existing = &
type->symt;
1057 struct symt* existing,
1065 if (!sym)
return NULL;
1098 FIXME(
"Unexpected leaf %x for signature's pmt\n", reftype->
generic.id);
1108 int value, leaf_len;
1111 struct symt* existing;
1115 switch (
type->generic.id)
1121 WARN(
"Modifier on %x: %s%s%s%s\n",
1122 type->modifier_v1.type,
1123 type->modifier_v1.attribute & 0x01 ?
"const " :
"",
1124 type->modifier_v1.attribute & 0x02 ?
"volatile " :
"",
1125 type->modifier_v1.attribute & 0x04 ?
"unaligned " :
"",
1126 type->modifier_v1.attribute & ~0x07 ?
"unknown " :
"");
1131 WARN(
"Modifier on %x: %s%s%s%s\n",
1132 type->modifier_v2.type,
1133 type->modifier_v2.attribute & 0x01 ?
"const " :
"",
1134 type->modifier_v2.attribute & 0x02 ?
"volatile " :
"",
1135 type->modifier_v2.attribute & 0x04 ?
"unaligned " :
"",
1136 type->modifier_v2.attribute & ~0x07 ?
"unknown " :
"");
1152 p_name = (
const struct p_string*)((
const unsigned char*)&
type->array_v1.arrlen + leaf_len);
1154 type->array_v1.elemtype,
1163 p_name = (
const struct p_string*)((
const unsigned char*)&
type->array_v2.arrlen + leaf_len);
1166 type->array_v2.elemtype,
1175 c_name = (
const char*)&
type->array_v3.arrlen + leaf_len;
1178 type->array_v3.elemtype,
1186 p_name = (
const struct p_string*)((
const unsigned char*)&
type->struct_v1.structlen + leaf_len);
1189 type->struct_v1.property);
1193 if (!(
type->struct_v1.property & 0x80))
1195 type->struct_v1.fieldlist);
1202 p_name = (
const struct p_string*)((
const unsigned char*)&
type->struct_v2.structlen + leaf_len);
1205 type->struct_v2.property);
1209 if (!(
type->struct_v2.property & 0x80))
1211 type->struct_v2.fieldlist);
1218 c_name = (
const char*)&
type->struct_v3.structlen + leaf_len;
1221 type->struct_v3.property);
1225 if (!(
type->struct_v3.property & 0x80))
1227 type->struct_v3.fieldlist);
1233 p_name = (
const struct p_string*)((
const unsigned char*)&
type->union_v1.un_len + leaf_len);
1240 type->union_v1.fieldlist);
1246 p_name = (
const struct p_string*)((
const unsigned char*)&
type->union_v2.un_len + leaf_len);
1253 type->union_v2.fieldlist);
1259 c_name = (
const char*)&
type->union_v3.un_len + leaf_len;
1266 type->union_v3.fieldlist);
1273 type->enumeration_v1.fieldlist,
1274 type->enumeration_v1.type);
1280 type->enumeration_v2.fieldlist,
1281 type->enumeration_v2.type);
1286 type->enumeration_v3.fieldlist,
1287 type->enumeration_v3.type);
1297 type->procedure_v1.rvtype,
1298 type->procedure_v1.arglist);
1308 type->procedure_v2.rvtype,
1309 type->procedure_v2.arglist);
1323 type->mfunction_v1.rvtype,
1324 type->mfunction_v1.arglist);
1337 type->mfunction_v2.rvtype,
1338 type->mfunction_v2.arglist);
1344 if (!(
symt = existing))
1347 snprintf(
buf,
sizeof(
buf),
"__internal_vt_shape_%x\n", curr_type);
1352 FIXME(
"Unsupported type-id leaf %x\n",
type->generic.id);
1379 if (!(
type->generic.id & 0x8600) || (
type->generic.id & 0x0100))
1390 unsigned seg,
unsigned offset);
1399 const unsigned int* filetab;
1400 const unsigned int* lt_ptr;
1401 const unsigned short* linenos;
1408 nfile = *(
const short*)linetab;
1409 filetab = (
const unsigned int*)(linetab + 2 *
sizeof(
short));
1411 for (
i = 0;
i < nfile;
i++)
1413 ptr = linetab + filetab[
i];
1414 nseg = *(
const short*)
ptr;
1415 lt_ptr = (
const unsigned int*)(
ptr + 2 *
sizeof(
short));
1426 for (
j = 0;
j < nseg;
j++)
1431 if (!func_addr0)
continue;
1445 WARN(
"--not a func at %04x:%08x %lx tag=%d\n",
1459 const char* strimage,
DWORD strsize)
1472 while ((
const BYTE*)(lt2 + 1) < linetab +
size)
1483 TRACE(
"No LT2_FILES_BLOCK found\n");
1488 while ((
const BYTE*)(lt2 + 1) < linetab +
size)
1499 TRACE(
"block from %04x:%08x #%x (%x lines)\n",
1508 WARN(
"--not a func at %04x:%08x %lx tag=%d\n",
1515 lines_blk->
l[
i].lineno ^ 0x80000000,
1516 lines_blk->
l[
i].offset);
1537 int nomap = msc_dbg->
nomap;
1541 if (!nomap || !omapp)
return offset;
1544 for (
i = 0;
i < nomap - 1;
i++)
1552 unsigned seg,
unsigned offset)
1554 int nsect = msc_dbg->
nsect;
1557 if (!seg || seg > nsect)
return 0;
1558 return msc_dbg->
module->module.BaseOfImage +
1565 unsigned segment,
unsigned offset,
1689 if (curr_func)
FIXME(
"nested function\n");
1703 if (curr_func)
FIXME(
"nested function\n");
1717 if (curr_func)
FIXME(
"nested function\n");
1829 TRACE(
"S-Compiland-V1 %x %s\n",
1841 ptr2 = ptr1 +
strlen(ptr1) + 1;
1843 ptr1 = ptr2 +
strlen(ptr2) + 1;
1855 ptr2 = ptr1 +
strlen(ptr1) + 1;
1857 ptr1 = ptr2 +
strlen(ptr2) + 1;
1904 TRACE(
"S-Constant-V1 %u %s %x\n",
1921 TRACE(
"S-Constant-V2 %u %s %x\n",
1938 TRACE(
"S-Constant-V3 %u %s %x\n",
1952 FIXME(
"S-Udt %s: couldn't find type 0x%x\n",
1963 FIXME(
"S-Udt %s: couldn't find type 0x%x\n",
1973 FIXME(
"S-Udt %s: couldn't find type 0x%x\n",
2000 TRACE(
"Start search: seg=0x%x at offset 0x%08x\n",
2005 TRACE(
"S-Align V1\n");
2008 TRACE(
"heap site: offset=0x%08x at sect_idx 0x%04x, inst_len 0x%08x, index 0x%08x\n",
2185 (
const char*)
pdb + block_list[
i] *
pdb->block_size,
pdb->block_size);
2203 (
const char*)
pdb + block_list[
i] *
pdb->block_size,
pdb->block_size);
2211 const WORD* block_list;
2217 for (
i = 0;
i < file_nr;
i++)
2218 block_list += (toc->
file[
i].size +
pdb->block_size - 1) /
pdb->block_size;
2226 const DWORD* block_list;
2233 for (
i = 0;
i < file_nr;
i++)
2242 switch (pdb_file->
kind)
2246 pdb_file->
u.
jg.toc, file_nr);
2249 pdb_file->
u.
ds.toc, file_nr);
2256 switch (pdb_file->
kind)
2258 case PDB_JG:
return pdb_file->
u.
jg.toc->file[file_nr].size;
2259 case PDB_DS:
return pdb_file->
u.
ds.toc->file_size[file_nr];
2271 switch (pdb_file->
kind)
2299 cpstr = (
char*)(pdb_file->
stream_dict + numok + 1);
2304 pdw += *ok_bits++ + 1;
2307 FIXME(
"unexpected value\n");
2313 if (ok_bits[
i / 32] & (1 << (
i % 32)))
2315 if (
j >= numok)
break;
2349 WARN(
"string table not found\n");
2357 for (
i = 0;
i < modfmt->
u.
pdb_info->used_subfiles;
i++)
2426 if (symbols->
version < 19970000)
2429 memset(sfile, 0,
sizeof(*sfile));
2464 WARN(
"\tCouldn't find %s\n",
lookup->filename);
2493 switch (
types.version)
2502 ERR(
"-Unknown type info version %d\n",
types.version);
2527static const char PDB_JG_IDENT[] =
"Microsoft C/C++ program database 2.00\r\n\032JG\0";
2540 const char*
image,
unsigned* matched)
2560 switch (
root->Version)
2568 ERR(
"-Unknown root block version %d\n",
root->Version);
2577 pdb_file->
u.
jg.timestamp =
root->TimeDateStamp;
2580 else WARN(
"Found %s, but wrong signature: %08x %08x\n",
2583 else WARN(
"Found %s, but wrong age: %08x %08x\n",
2585 TRACE(
"found JG for %s: age=%x timestamp=%x\n",
2596 pdb_file->
u.
ds.toc =
2598 (
const DWORD*)((
const char*)
pdb +
pdb->toc_page *
pdb->block_size),
2606 switch (
root->Version)
2611 ERR(
"-Unknown root block version %d\n",
root->Version);
2614 pdb_file->
u.
ds.guid =
root->guid;
2617 else WARN(
"Found %s, but wrong GUID: %s %s\n",
2621 else WARN(
"Found %s, but wrong age: %08x %08x\n",
2623 TRACE(
"found DS for %s: age=%x guid=%s\n",
2634 switch (pdb_file->
kind)
2636 case PDB_JG: num_files = pdb_file->
u.
jg.toc->num_files;
break;
2637 case PDB_DS: num_files = pdb_file->
u.
ds.toc->num_files;
break;
2640 for (
i = 1;
i < num_files;
i++)
2643 FIXME(
"********************** [%u]: size=%08x\n",
2656 unsigned module_index);
2661 const void* symbols_image,
2665 unsigned module_index)
2687 if (module_index != -1)
FIXME(
"Twice the entry\n");
2688 else module_index =
i;
2701 imp_pdb_lookup.
age = imp->
Age;
2702 TRACE(
"got for %s: age=%u ts=%x\n",
2711 if (module_index == -1)
2725 unsigned module_index)
2730 char* files_image =
NULL;
2731 DWORD files_size = 0;
2762 int header_size = 0;
2774 ERR(
"-Unknown symbol info version %d %08x\n",
2796 if (files_image) files_size = *(
const DWORD*)(files_image + 8);
2811 file = symbols_image + header_size;
2836 files_image + 12, files_size);
2872 if (!modfmt)
return FALSE;
2891 msc_dbg->
module->module.PdbSig = pdb_info->
pdb_files[0].u.jg.timestamp;
2896 msc_dbg->
module->module.LoadedPdbName,
2900 msc_dbg->
module->module.GlobalSymbols =
TRUE;
2902 msc_dbg->
module->module.SourceIndexed =
TRUE;
2948#define PEV_MAX_LEN 32
2965#define PEV_ERROR(pev, msg) snprintf((pev)->error, sizeof((pev)->error), "%s", (msg))
2966#define PEV_ERROR1(pev, msg, pmt) snprintf((pev)->error, sizeof((pev)->error), (msg), (pmt))
2969static void pev_dump_stack(
struct pevaluator* pev)
3000 return PEV_ERROR1(pev,
"get_zvalue: no value found (%s)",
str);
3003 if (
n ==
str || *
n !=
'\0')
3017 if (!at)
return PEV_ERROR(pev,
"push: out of memory");
3027 if (!at)
return PEV_ERROR(pev,
"pop: stack empty");
3058 if (!zv)
return PEV_ERROR(pev,
"set_value: out of memory");
3077 case '+':
c =
v1 +
v2;
break;
3078 case '-':
c =
v1 -
v2;
break;
3079 case '*':
c =
v1 *
v2;
break;
3080 case '/':
c =
v1 /
v2;
break;
3081 case '%':
c =
v1 %
v2;
break;
3082 default:
return PEV_ERROR1(pev,
"binop: unknown op (%c)",
op);
3097 return PEV_ERROR1(pev,
"deref: cannot read mem at %lx\n",
v1);
3110 if (p2[0] !=
'$')
return PEV_ERROR1(pev,
"assign: %s isn't a variable", p2);
3125 pev->
error[0] =
'\0';
3126 for (; cpair->
name; cpair++)
3138 if (cpair)
for (; cpair->
name; cpair++)
3159 if (*
ptr ==
' ' || (over = *
ptr ==
'\0'))
3206 unsigned i,
size, strsize;
3215 pdb_info =
pair.effective->format_info[
DFI_PDB]->u.pdb_info;
3220 if (!strbase)
return FALSE;
3221 strsize = *(
const DWORD*)(strbase + 8);
3224 if (fpoext && (
size %
sizeof(*fpoext)) == 0)
3226 size /=
sizeof(*fpoext);
3231 TRACE(
"\t%08x %08x %8x %8x %4x %4x %4x %08x %s\n",
3232 fpoext[
i].
start, fpoext[
i].func_size, fpoext[
i].locals_size,
3233 fpoext[
i].params_size, fpoext[
i].maxstack_size, fpoext[
i].prolog_size,
3234 fpoext[
i].savedregs_size, fpoext[
i].
flags,
3235 fpoext[
i].str_offset < strsize ?
3236 wine_dbgstr_a(strbase + 12 + fpoext[
i].str_offset) :
"<out of bounds>");
3237 if (fpoext[
i].str_offset < strsize)
3256#define MAKESIG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
3257#define CODEVIEW_NB09_SIG MAKESIG('N','B','0','9')
3258#define CODEVIEW_NB10_SIG MAKESIG('N','B','1','0')
3259#define CODEVIEW_NB11_SIG MAKESIG('N','B','1','1')
3260#define CODEVIEW_RSDS_SIG MAKESIG('R','S','D','S')
3285 for (
i = 0;
i <
hdr->cDir;
i++)
3313 prev = (
i == 0) ?
NULL :
3342 msc_dbg->
module->module.GlobalSymbols =
TRUE;
3344 msc_dbg->
module->module.SourceIndexed =
TRUE;
3365 TRACE(
"Got RSDS type of PDB file: guid=%s age=%08x name=%s\n",
3375 ERR(
"Unknown CODEVIEW signature %08x in module %s\n",
3383 sizeof(msc_dbg->
module->module.CVData));
3411 for (
i = 0;
i < nDbg;
i++)
3422 for (
i = 0;
i < nDbg;
i++)
3432 for (
i = 0;
i < nDbg;
i++)
3445 for (
i = 0;
i < nDbg;
i++)
3447 FIXME(
"This guy has FPO information\n");
3473 ERR(
"Got a page fault while loading symbols\n");
std::map< E_MODULE, HMODULE > mod
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
char * strcpy(char *DstString, const char *SrcString)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
DECLSPEC_HIDDEN BOOL coff_process_info(const struct msc_debug_info *msc_dbg)
struct symt_hierarchy_point * symt_add_function_point(struct module *module, struct symt_function *func, enum SymTagEnum point, const struct location *loc, const char *name) DECLSPEC_HIDDEN
struct symt_thunk * symt_new_thunk(struct module *module, struct symt_compiland *parent, const char *name, THUNK_ORDINAL ord, ULONG_PTR addr, ULONG_PTR size) DECLSPEC_HIDDEN
struct symt_function * symt_new_function(struct module *module, struct symt_compiland *parent, const char *name, ULONG_PTR addr, ULONG_PTR size, struct symt *type) DECLSPEC_HIDDEN
BOOL symt_get_info(struct module *module, const struct symt *type, IMAGEHLP_SYMBOL_TYPE_INFO req, void *pInfo) DECLSPEC_HIDDEN
void hash_table_init(struct pool *pool, struct hash_table *ht, unsigned num_buckets) DECLSPEC_HIDDEN
void vector_init(struct vector *v, unsigned elt_sz, unsigned bucket_sz) DECLSPEC_HIDDEN
struct symt_data * symt_new_constant(struct module *module, struct symt_compiland *parent, const char *name, struct symt *type, const VARIANT *v) DECLSPEC_HIDDEN
struct symt_data * symt_add_func_local(struct module *module, struct symt_function *func, enum DataKind dt, const struct location *loc, struct symt_block *block, struct symt *type, const char *name) DECLSPEC_HIDDEN
void * vector_add(struct vector *v, struct pool *pool) DECLSPEC_HIDDEN
void * pool_alloc(struct pool *a, size_t len) DECLSPEC_HIDDEN
struct symt_pointer * symt_new_pointer(struct module *module, struct symt *ref_type, ULONG_PTR size) DECLSPEC_HIDDEN
BOOL symt_add_enum_element(struct module *module, struct symt_enum *enum_type, const char *name, int value) DECLSPEC_HIDDEN
void pool_init(struct pool *a, size_t arena_size) DECLSPEC_HIDDEN
struct symt_udt * symt_new_udt(struct module *module, const char *typename, unsigned size, enum UdtKind kind) DECLSPEC_HIDDEN
void pool_destroy(struct pool *a) DECLSPEC_HIDDEN
unsigned vector_length(const struct vector *v) DECLSPEC_HIDDEN
unsigned source_new(struct module *module, const char *basedir, const char *source) DECLSPEC_HIDDEN
struct symt_typedef * symt_new_typedef(struct module *module, struct symt *ref, const char *name) DECLSPEC_HIDDEN
BOOL path_find_symbol_file(const struct process *pcs, const struct module *module, PCSTR full_path, enum module_type type, const GUID *guid, DWORD dw1, DWORD dw2, WCHAR *buffer, BOOL *is_unmatched) DECLSPEC_HIDDEN
struct symt_public * symt_new_public(struct module *module, struct symt_compiland *parent, const char *typename, BOOL is_function, ULONG_PTR address, unsigned size) DECLSPEC_HIDDEN
void hash_table_iter_init(const struct hash_table *ht, struct hash_table_iter *hti, const char *name) DECLSPEC_HIDDEN
struct symt_function_signature * symt_new_function_signature(struct module *module, struct symt *ret_type, enum CV_call_e call_conv) DECLSPEC_HIDDEN
struct symt_block * symt_close_func_block(struct module *module, const struct symt_function *func, struct symt_block *block, unsigned pc) DECLSPEC_HIDDEN
struct symt_data * symt_new_global_variable(struct module *module, struct symt_compiland *parent, const char *name, unsigned is_static, struct location loc, ULONG_PTR size, struct symt *type) DECLSPEC_HIDDEN
struct symt_enum * symt_new_enum(struct module *module, const char *typename, struct symt *basetype) DECLSPEC_HIDDEN
BOOL symt_set_udt_size(struct module *module, struct symt_udt *type, unsigned size) DECLSPEC_HIDDEN
struct symt_block * symt_open_func_block(struct module *module, struct symt_function *func, struct symt_block *block, unsigned pc, unsigned len) DECLSPEC_HIDDEN
struct symt_array * symt_new_array(struct module *module, int min, int max, struct symt *base, struct symt *index) DECLSPEC_HIDDEN
BOOL sw_read_mem(struct cpu_stack_walk *csw, DWORD64 addr, void *ptr, DWORD sz) DECLSPEC_HIDDEN
void * hash_table_iter_up(struct hash_table_iter *hti) DECLSPEC_HIDDEN
struct symt_compiland * symt_new_compiland(struct module *module, ULONG_PTR address, unsigned src_idx) DECLSPEC_HIDDEN
struct module * module_find_by_addr(const struct process *pcs, DWORD64 addr, enum module_type type) DECLSPEC_HIDDEN
void * vector_at(const struct vector *v, unsigned pos) DECLSPEC_HIDDEN
BOOL symt_add_function_signature_parameter(struct module *module, struct symt_function_signature *sig, struct symt *param) DECLSPEC_HIDDEN
BOOL symt_add_udt_element(struct module *module, struct symt_udt *udt_type, const char *name, struct symt *elt_type, unsigned offset, unsigned size) DECLSPEC_HIDDEN
struct symt_basic * symt_new_basic(struct module *module, enum BasicType, const char *typename, unsigned size) DECLSPEC_HIDDEN
void symt_add_func_line(struct module *module, struct symt_function *func, unsigned source_idx, int line_num, ULONG_PTR offset) DECLSPEC_HIDDEN
BOOL module_get_debug(struct module_pair *) DECLSPEC_HIDDEN
char * pool_strdup(struct pool *a, const char *str) DECLSPEC_HIDDEN
void hash_table_add(struct hash_table *ht, struct hash_table_elt *elt) DECLSPEC_HIDDEN
BOOL symt_normalize_function(struct module *module, const struct symt_function *func) DECLSPEC_HIDDEN
struct symt_hierarchy_point * symt_new_label(struct module *module, struct symt_compiland *compiland, const char *name, ULONG_PTR address) DECLSPEC_HIDDEN
struct symt_ht * symt_find_nearest(struct module *module, DWORD_PTR addr) DECLSPEC_HIDDEN