[PATCH] [DbgHelp]: elf for wine and spec definitions

Eric Pouech eric.pouech at wanadoo.fr
Wed Jun 21 15:29:50 CDT 2006


- 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 is used to identify Wine's inter-DLL trampoline code, hence
single stepping in Winedbg on inter'DLL calls was broken.
(Side note: this regression is more than one year old... I still
wonder how it got unnoticed)

A+
---

 dlls/dbghelp/elf_module.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index 508c89c..c1f8296 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -280,7 +280,8 @@ static void elf_hash_symtab(struct modul
         /* 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 mo
                                              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
     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;
 }



More information about the wine-patches mailing list