From 41ee9853f7954ccdc419ee2fedfd4ccdd5c54e81 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Wed, 21 Jun 2006 22:29:50 +0200 Subject: [PATCH] dbghelp: Elf for wine and spec definitions. - fixed regression when looking for winebuild's special symbols in ELF symtab - STT_NOTYPE is still accepted as a valid symbol type (on top of STT_FUNC and STT_OBJECT) --- dlls/dbghelp/elf_module.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c index 508c89c726c..c1f82961b11 100644 --- a/dlls/dbghelp/elf_module.c +++ b/dlls/dbghelp/elf_module.c @@ -280,7 +280,8 @@ static void elf_hash_symtab(struct module* module, struct pool* pool, /* Ignore certain types of entries which really aren't of that much * interest. */ - if ((ELF32_ST_TYPE(symp->st_info) != STT_FILE && + if ((ELF32_ST_TYPE(symp->st_info) != STT_NOTYPE && + ELF32_ST_TYPE(symp->st_info) != STT_FILE && ELF32_ST_TYPE(symp->st_info) != STT_OBJECT && ELF32_ST_TYPE(symp->st_info) != STT_FUNC) || symp->st_shndx == SHN_UNDEF) @@ -549,6 +550,9 @@ static int elf_new_wine_thunks(struct module* module, struct hash_table* ht_symt ELF32_ST_BIND(ste->symp->st_info) == STB_LOCAL, addr, ste->symp->st_size, NULL); break; + case STT_NOTYPE: + /* at least winebuild specific symbols */ + break; default: FIXME("Shouldn't happen\n"); break; @@ -608,10 +612,11 @@ static int elf_new_public_symbols(struct module* module, struct hash_table* symt hash_table_iter_init(symtab, &hti, NULL); while ((ste = hash_table_iter_up(&hti))) { - symt_new_public(module, ste->compiland, ste->ht_elt.name, - module->elf_info->elf_addr + ste->symp->st_value, - ste->symp->st_size, TRUE /* FIXME */, - ELF32_ST_TYPE(ste->symp->st_info) == STT_FUNC); + if (ELF32_ST_TYPE(ste->symp->st_info) != STT_NOTYPE) + symt_new_public(module, ste->compiland, ste->ht_elt.name, + module->elf_info->elf_addr + ste->symp->st_value, + ste->symp->st_size, TRUE /* FIXME */, + ELF32_ST_TYPE(ste->symp->st_info) == STT_FUNC); } return TRUE; } -- 2.11.4.GIT