[PATCH 12/16] [DbgHelp]: move the PE debug info to the newly define scheme

Eric Pouech eric.pouech at orange.fr
Mon Mar 15 15:13:41 CDT 2010




A+
---

 dlls/dbghelp/dbghelp_private.h |    3 ++-
 dlls/dbghelp/pe_module.c       |   44 ++++++++++++++++++++++------------------
 2 files changed, 26 insertions(+), 21 deletions(-)


diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index ec08993..6e4636f 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -320,6 +320,7 @@ struct module;
  */
 enum format_info
 {
+    DFI_PE,
     DFI_DWARF,
     DFI_LAST
 };
@@ -335,6 +336,7 @@ struct module_format
     union
     {
         struct dwarf2_module_info_s*    dwarf2_info;
+        struct pe_module_info*          pe_info;
     } u;
 };
 
@@ -349,7 +351,6 @@ struct module
 
     /* specific information for debug types */
     struct elf_module_info*	elf_info;
-    struct pe_module_info*	pe_info;
     void                        (*module_remove)(struct process* pcs, struct module* module);
     struct module_format*       format_info[DFI_LAST];
 
diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c
index e853edc..a34ae6d 100644
--- a/dlls/dbghelp/pe_module.c
+++ b/dlls/dbghelp/pe_module.c
@@ -257,10 +257,10 @@ static void pe_unmap_file(struct image_file_map* fmap)
     }
 }
 
-static void pe_module_remove(struct process* pcs, struct module* module)
+static void pe_module_remove(struct process* pcs, struct module_format* modfmt)
 {
-    pe_unmap_file(&module->pe_info->fmap);
-    HeapFree(GetProcessHeap(), 0, module->pe_info);
+    pe_unmap_file(&modfmt->u.pe_info->fmap);
+    HeapFree(GetProcessHeap(), 0, modfmt);
 }
 
 /******************************************************************
@@ -273,7 +273,7 @@ static void pe_module_remove(struct process* pcs, struct module* module)
  */
 static BOOL pe_locate_with_coff_symbol_table(struct module* module)
 {
-    struct image_file_map* fmap = &module->pe_info->fmap;
+    struct image_file_map* fmap = &module->format_info[DFI_PE]->u.pe_info->fmap;
     const IMAGE_SYMBOL* isym;
     int                 i, numsym, naux;
     char                tmp[9];
@@ -333,7 +333,7 @@ static BOOL pe_locate_with_coff_symbol_table(struct module* module)
  */
 static BOOL pe_load_coff_symbol_table(struct module* module)
 {
-    struct image_file_map* fmap = &module->pe_info->fmap;
+    struct image_file_map* fmap = &module->format_info[DFI_PE]->u.pe_info->fmap;
     const IMAGE_SYMBOL* isym;
     int                 i, numsym, naux;
     const char*         strtable;
@@ -413,7 +413,7 @@ static inline DWORD pe_get_sect_size(IMAGE_SECTION_HEADER* sect)
  */
 static BOOL pe_load_stabs(const struct process* pcs, struct module* module)
 {
-    struct image_file_map*      fmap = &module->pe_info->fmap;
+    struct image_file_map*      fmap = &module->format_info[DFI_PE]->u.pe_info->fmap;
     struct image_section_map    sect_stabs, sect_stabstr;
     BOOL                        ret = FALSE;
 
@@ -449,7 +449,7 @@ static BOOL pe_load_stabs(const struct process* pcs, struct module* module)
  */
 static BOOL pe_load_dwarf(struct module* module)
 {
-    struct image_file_map*      fmap = &module->pe_info->fmap;
+    struct image_file_map*      fmap = &module->format_info[DFI_PE]->u.pe_info->fmap;
     BOOL                        ret = FALSE;
 
     ret = dwarf2_parse(module,
@@ -515,7 +515,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module,
  */
 static BOOL pe_load_msc_debug_info(const struct process* pcs, struct module* module)
 {
-    struct image_file_map*      fmap = &module->pe_info->fmap;
+    struct image_file_map*      fmap = &module->format_info[DFI_PE]->u.pe_info->fmap;
     BOOL                        ret = FALSE;
     const IMAGE_DATA_DIRECTORY* dir;
     const IMAGE_DEBUG_DIRECTORY*dbg = NULL;
@@ -566,7 +566,7 @@ done:
  */
 static BOOL pe_load_export_debug_info(const struct process* pcs, struct module* module)
 {
-    struct image_file_map*              fmap = &module->pe_info->fmap;
+    struct image_file_map*              fmap = &module->format_info[DFI_PE]->u.pe_info->fmap;
     unsigned int 		        i;
     const IMAGE_EXPORT_DIRECTORY* 	exports;
     DWORD			        base = module->module.BaseOfImage;
@@ -679,7 +679,7 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name,
 {
     struct module*              module = NULL;
     BOOL                        opened = FALSE;
-    struct pe_module_info*      module_info;
+    struct module_format*       modfmt;
     WCHAR                       loaded_name[MAX_PATH];
 
     loaded_name[0] = '\0';
@@ -694,20 +694,24 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name,
     else if (name) strcpyW(loaded_name, name);
     else if (dbghelp_options & SYMOPT_DEFERRED_LOADS)
         FIXME("Trouble ahead (no module name passed in deferred mode)\n");
-    if (!(module_info = HeapAlloc(GetProcessHeap(), 0, sizeof(*module_info))))
+    if (!(modfmt = HeapAlloc(GetProcessHeap(), 0, sizeof(struct module_format) + sizeof(struct pe_module_info))))
         return NULL;
-    if (pe_map_file(hFile, &module_info->fmap, DMT_PE))
+    modfmt->u.pe_info = (struct pe_module_info*)(modfmt + 1);
+    if (pe_map_file(hFile, &modfmt->u.pe_info->fmap, DMT_PE))
     {
-        if (!base) base = module_info->fmap.u.pe.ntheader.OptionalHeader.ImageBase;
-        if (!size) size = module_info->fmap.u.pe.ntheader.OptionalHeader.SizeOfImage;
+        if (!base) base = modfmt->u.pe_info->fmap.u.pe.ntheader.OptionalHeader.ImageBase;
+        if (!size) size = modfmt->u.pe_info->fmap.u.pe.ntheader.OptionalHeader.SizeOfImage;
 
         module = module_new(pcs, loaded_name, DMT_PE, FALSE, base, size,
-                            module_info->fmap.u.pe.ntheader.FileHeader.TimeDateStamp,
-                            module_info->fmap.u.pe.ntheader.OptionalHeader.CheckSum);
+                            modfmt->u.pe_info->fmap.u.pe.ntheader.FileHeader.TimeDateStamp,
+                            modfmt->u.pe_info->fmap.u.pe.ntheader.OptionalHeader.CheckSum);
         if (module)
         {
-            module->pe_info = module_info;
-            module->module_remove = pe_module_remove;
+            modfmt->module = module;
+            modfmt->remove = pe_module_remove;
+            modfmt->loc_compute = NULL;
+
+            module->format_info[DFI_PE] = modfmt;
             if (dbghelp_options & SYMOPT_DEFERRED_LOADS)
                 module->module.SymType = SymDeferred;
             else
@@ -716,10 +720,10 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name,
         else
         {
             ERR("could not load the module '%s'\n", debugstr_w(loaded_name));
-            pe_unmap_file(&module_info->fmap);
+            pe_unmap_file(&modfmt->u.pe_info->fmap);
         }
     }
-    if (!module) HeapFree(GetProcessHeap(), 0, module_info);
+    if (!module) HeapFree(GetProcessHeap(), 0, modfmt);
 
     if (opened) CloseHandle(hFile);
 






More information about the wine-patches mailing list