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)
This commit is contained in:
Eric Pouech 2006-06-21 22:29:50 +02:00 committed by Alexandre Julliard
parent 5e5a8df970
commit 41ee9853f7
1 changed files with 10 additions and 5 deletions

View File

@ -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 /* Ignore certain types of entries which really aren't of that much
* interest. * 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_OBJECT &&
ELF32_ST_TYPE(symp->st_info) != STT_FUNC) || ELF32_ST_TYPE(symp->st_info) != STT_FUNC) ||
symp->st_shndx == SHN_UNDEF) 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, ELF32_ST_BIND(ste->symp->st_info) == STB_LOCAL,
addr, ste->symp->st_size, NULL); addr, ste->symp->st_size, NULL);
break; break;
case STT_NOTYPE:
/* at least winebuild specific symbols */
break;
default: default:
FIXME("Shouldn't happen\n"); FIXME("Shouldn't happen\n");
break; 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); hash_table_iter_init(symtab, &hti, NULL);
while ((ste = hash_table_iter_up(&hti))) while ((ste = hash_table_iter_up(&hti)))
{ {
symt_new_public(module, ste->compiland, ste->ht_elt.name, if (ELF32_ST_TYPE(ste->symp->st_info) != STT_NOTYPE)
module->elf_info->elf_addr + ste->symp->st_value, symt_new_public(module, ste->compiland, ste->ht_elt.name,
ste->symp->st_size, TRUE /* FIXME */, module->elf_info->elf_addr + ste->symp->st_value,
ELF32_ST_TYPE(ste->symp->st_info) == STT_FUNC); ste->symp->st_size, TRUE /* FIXME */,
ELF32_ST_TYPE(ste->symp->st_info) == STT_FUNC);
} }
return TRUE; return TRUE;
} }