dbghelp: Factorize symbol insertion into module by address table.

This commit is contained in:
Eric Pouech 2009-06-25 22:27:31 +02:00 committed by Alexandre Julliard
parent 607a07f42a
commit dde39fddc5
1 changed files with 12 additions and 12 deletions

View File

@ -67,6 +67,12 @@ int symt_cmp_addr(const void* p1, const void* p2)
return cmp_addr(a1, a2);
}
static void symt_add_module_ht(struct module* module, struct symt_ht* ht)
{
hash_table_add(&module->ht_symbols, &ht->hash_elt);
module->sortlist_valid = FALSE;
}
#ifdef HAVE_REGEX_H
/* transforms a dbghelp's regular expression into a POSIX one
@ -247,13 +253,12 @@ struct symt_public* symt_new_public(struct module* module,
{
sym->symt.tag = SymTagPublicSymbol;
sym->hash_elt.name = pool_strdup(&module->pool, name);
hash_table_add(&module->ht_symbols, &sym->hash_elt);
module->sortlist_valid = FALSE;
sym->container = compiland ? &compiland->symt : NULL;
sym->address = address;
sym->size = size;
sym->in_code = in_code;
sym->is_function = is_func;
symt_add_module_ht(module, (struct symt_ht*)sym);
if (compiland)
{
p = vector_add(&compiland->vchildren, &module->pool);
@ -279,8 +284,6 @@ struct symt_data* symt_new_global_variable(struct module* module,
{
sym->symt.tag = SymTagData;
sym->hash_elt.name = pool_strdup(&module->pool, name);
hash_table_add(&module->ht_symbols, &sym->hash_elt);
module->sortlist_valid = FALSE;
sym->kind = is_static ? DataIsFileStatic : DataIsGlobal;
sym->container = compiland ? &compiland->symt : NULL;
sym->type = type;
@ -292,6 +295,7 @@ struct symt_data* symt_new_global_variable(struct module* module,
debugstr_w(module->module.ModuleName), name,
wine_dbgstr_longlong(tsz), size);
}
symt_add_module_ht(module, (struct symt_ht*)sym);
if (compiland)
{
p = vector_add(&compiland->vchildren, &module->pool);
@ -318,14 +322,13 @@ struct symt_function* symt_new_function(struct module* module,
{
sym->symt.tag = SymTagFunction;
sym->hash_elt.name = pool_strdup(&module->pool, name);
hash_table_add(&module->ht_symbols, &sym->hash_elt);
module->sortlist_valid = FALSE;
sym->container = &compiland->symt;
sym->address = addr;
sym->type = sig_type;
sym->size = size;
vector_init(&sym->vlines, sizeof(struct line_info), 64);
vector_init(&sym->vchildren, sizeof(struct symt*), 8);
symt_add_module_ht(module, (struct symt_ht*)sym);
if (compiland)
{
p = vector_add(&compiland->vchildren, &module->pool);
@ -519,12 +522,11 @@ struct symt_thunk* symt_new_thunk(struct module* module,
{
sym->symt.tag = SymTagThunk;
sym->hash_elt.name = pool_strdup(&module->pool, name);
hash_table_add(&module->ht_symbols, &sym->hash_elt);
module->sortlist_valid = FALSE;
sym->container = &compiland->symt;
sym->address = addr;
sym->size = size;
sym->ordinal = ord;
symt_add_module_ht(module, (struct symt_ht*)sym);
if (compiland)
{
struct symt** p;
@ -549,12 +551,11 @@ struct symt_data* symt_new_constant(struct module* module,
{
sym->symt.tag = SymTagData;
sym->hash_elt.name = pool_strdup(&module->pool, name);
hash_table_add(&module->ht_symbols, &sym->hash_elt);
module->sortlist_valid = FALSE;
sym->kind = DataIsConstant;
sym->container = compiland ? &compiland->symt : NULL;
sym->type = type;
sym->u.value = *v;
symt_add_module_ht(module, (struct symt_ht*)sym);
if (compiland)
{
struct symt** p;
@ -578,11 +579,10 @@ struct symt_hierarchy_point* symt_new_label(struct module* module,
{
sym->symt.tag = SymTagLabel;
sym->hash_elt.name = pool_strdup(&module->pool, name);
hash_table_add(&module->ht_symbols, &sym->hash_elt);
module->sortlist_valid = FALSE;
sym->loc.kind = loc_absolute;
sym->loc.offset = address;
sym->parent = compiland ? &compiland->symt : NULL;
symt_add_module_ht(module, (struct symt_ht*)sym);
if (compiland)
{
struct symt** p;