Eric Pouech : dbghelp: Factorize symbol insertion into module by address table.

Alexandre Julliard julliard at winehq.org
Fri Jun 26 09:47:08 CDT 2009


Module: wine
Branch: master
Commit: dde39fddc537c846853ae2f9f85cb14581fec3e2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=dde39fddc537c846853ae2f9f85cb14581fec3e2

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Thu Jun 25 22:27:31 2009 +0200

dbghelp: Factorize symbol insertion into module by address table.

---

 dlls/dbghelp/symbol.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 3e70e85..25f9ec9 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -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;




More information about the wine-cvs mailing list