dbghelp: Fix some compilation warnings in 64-bit mode

Dmitry Timoshkov dmitry at codeweavers.com
Thu May 31 09:00:39 CDT 2007


Hello,

Changelog:
    dbghelp: Fix some compilation warnings in 64-bit mode.

---
 dlls/dbghelp/dbghelp.c         |   20 +++++++++---------
 dlls/dbghelp/dbghelp_private.h |    6 ++--
 dlls/dbghelp/dwarf.c           |   10 ++++----
 dlls/dbghelp/elf_module.c      |   41 ++++++++++++++++++++++++++++++++++++---
 dlls/dbghelp/minidump.c        |    8 +++---
 dlls/dbghelp/msc.c             |    2 +-
 dlls/dbghelp/pe_module.c       |    6 ++--
 dlls/dbghelp/stack.c           |    8 +++---
 dlls/dbghelp/symbol.c          |    5 ++-
 dlls/dbghelp/type.c            |   20 ++++++++++++++++--
 10 files changed, 87 insertions(+), 39 deletions(-)

diff --git a/dlls/dbghelp/dbghelp.c b/dlls/dbghelp/dbghelp.c
index d79e281..244191e 100644
--- a/dlls/dbghelp/dbghelp.c
+++ b/dlls/dbghelp/dbghelp.c
@@ -211,7 +211,7 @@ BOOL WINAPI SymGetSearchPath(HANDLE hProcess, LPSTR szSearchPath,
  * SymInitialize helper: loads in dbghelp all known (and loaded modules)
  * this assumes that hProcess is a handle on a valid process
  */
-static BOOL WINAPI process_invade_cb(char* name, DWORD base, DWORD size, void* user)
+static BOOL WINAPI process_invade_cb(char* name, DWORD64 base, ULONG size, void* user)
 {
     char        tmp[MAX_PATH];
     HANDLE      hProcess = (HANDLE)user;
@@ -220,7 +220,7 @@ static BOOL WINAPI process_invade_cb(char* name, DWORD base, DWORD size, void* u
                               tmp, sizeof(tmp)))
         lstrcpynA(tmp, name, sizeof(tmp));
 
-    SymLoadModule(hProcess, 0, tmp, name, base, size);
+    SymLoadModule64(hProcess, 0, tmp, name, base, size);
     return TRUE;
 }
 
@@ -320,7 +320,7 @@ BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeP
     if (check_live_target(pcs))
     {
         if (fInvadeProcess)
-            EnumerateLoadedModules(hProcess, process_invade_cb, (void*)hProcess);
+            EnumerateLoadedModules64(hProcess, process_invade_cb, (void*)hProcess);
         elf_synchronize_module_list(pcs);
     }
     else if (fInvadeProcess)
@@ -452,8 +452,8 @@ BOOL WINAPI SymSetContext(HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame,
  */
 static BOOL CALLBACK reg_cb64to32(HANDLE hProcess, ULONG action, ULONG64 data, ULONG64 user)
 {
-    PSYMBOL_REGISTERED_CALLBACK         cb32 = (PSYMBOL_REGISTERED_CALLBACK)(DWORD)(user >> 32);
-    DWORD                               user32 = (DWORD)user;
+    PSYMBOL_REGISTERED_CALLBACK         cb32 = (PSYMBOL_REGISTERED_CALLBACK)(DWORD_PTR)(user >> 32);
+    DWORD                               user32 = (DWORD_PTR)user;
     void*                               data32;
     IMAGEHLP_DEFERRED_SYMBOL_LOAD64*    idsl64;
     IMAGEHLP_DEFERRED_SYMBOL_LOAD       idsl;
@@ -464,13 +464,13 @@ static BOOL CALLBACK reg_cb64to32(HANDLE hProcess, ULONG action, ULONG64 data, U
     case CBA_DEFERRED_SYMBOL_LOAD_CANCEL:
     case CBA_SET_OPTIONS:
     case CBA_SYMBOLS_UNLOADED:
-        data32 = (void*)(DWORD)data;
+        data32 = (void*)(DWORD_PTR)data;
         break;
     case CBA_DEFERRED_SYMBOL_LOAD_COMPLETE:
     case CBA_DEFERRED_SYMBOL_LOAD_FAILURE:
     case CBA_DEFERRED_SYMBOL_LOAD_PARTIAL:
     case CBA_DEFERRED_SYMBOL_LOAD_START:
-        idsl64 = (IMAGEHLP_DEFERRED_SYMBOL_LOAD64*)(DWORD)data;
+        idsl64 = (IMAGEHLP_DEFERRED_SYMBOL_LOAD64*)(DWORD_PTR)data;
         if (!validate_addr64(idsl64->BaseOfImage))
             return FALSE;
         idsl.SizeOfStruct = sizeof(idsl);
@@ -488,7 +488,7 @@ static BOOL CALLBACK reg_cb64to32(HANDLE hProcess, ULONG action, ULONG64 data, U
         FIXME("No mapping for action %u\n", action);
         return FALSE;
     }
-    return cb32(hProcess, action, (PVOID)data32, (PVOID)user32);
+    return cb32(hProcess, action, data32, ULongToPtr(user32));
 }
 
 /******************************************************************
@@ -515,7 +515,7 @@ BOOL pcs_callback(const struct process* pcs, ULONG action, void* data)
         case CBA_DEFERRED_SYMBOL_LOAD_FAILURE:
         case CBA_DEFERRED_SYMBOL_LOAD_PARTIAL:
         case CBA_DEFERRED_SYMBOL_LOAD_START:
-            idslW = (IMAGEHLP_DEFERRED_SYMBOL_LOADW64*)(DWORD)data;
+            idslW = (IMAGEHLP_DEFERRED_SYMBOL_LOADW64*)(DWORD_PTR)data;
             idsl.SizeOfStruct = sizeof(idsl);
             idsl.BaseOfImage = idslW->BaseOfImage;
             idsl.CheckSum = idslW->CheckSum;
@@ -562,7 +562,7 @@ BOOL WINAPI SymRegisterCallback(HANDLE hProcess,
                                 PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
                                 PVOID UserContext)
 {
-    DWORD64 tmp = ((ULONGLONG)(DWORD)CallbackFunction << 32) | (DWORD)UserContext;
+    DWORD64 tmp = ((ULONGLONG)PtrToUlong(CallbackFunction) << 32) | PtrToUlong(UserContext);
     TRACE("(%p, %p, %p)\n", 
           hProcess, CallbackFunction, UserContext);
     return sym_register_cb(hProcess, reg_cb64to32, tmp, FALSE);
diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index 99b8b54..f45292c 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -473,13 +473,13 @@ extern BOOL         pe_load_debug_directory(const struct process* pcs,
 extern BOOL         pdb_fetch_file_info(struct pdb_lookup* pdb_lookup);
 
 /* pe_module.c */
-extern BOOL         pe_load_nt_header(HANDLE hProc, DWORD base, IMAGE_NT_HEADERS* nth);
+extern BOOL         pe_load_nt_header(HANDLE hProc, DWORD_PTR base, IMAGE_NT_HEADERS* nth);
 extern struct module*
                     pe_load_native_module(struct process* pcs, const WCHAR* name,
-                                          HANDLE hFile, DWORD base, DWORD size);
+                                          HANDLE hFile, DWORD_PTR base, DWORD size);
 extern struct module*
                     pe_load_builtin_module(struct process* pcs, const WCHAR* name,
-                                           DWORD base, DWORD size);
+                                           DWORD_PTR base, DWORD size);
 extern BOOL         pe_load_debug_info(const struct process* pcs,
                                        struct module* module);
 /* source.c */
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index 2c1ab0c..0bd9a41 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -755,12 +755,12 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc,
             }
             if (hproc)
             {
-                DWORD   addr = stack[stk--];
-                DWORD   deref;
+                DWORD_PTR addr = stack[stk--];
+                DWORD_PTR deref;
 
                 if (!ReadProcessMemory(hproc, (void*)addr, &deref, sizeof(deref), NULL))
                 {
-                    WARN("Couldn't read memory at %x\n", addr);
+                    WARN("Couldn't read memory at %lx\n", addr);
                     return loc_err_cant_read;
                 }
                 stack[++stk] = deref;
@@ -1946,8 +1946,8 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections,
     dwarf2_debug_info_t* di;
     BOOL ret = FALSE;
 
-    TRACE("Compilation Unit Header found at 0x%x:\n",
-          comp_unit_cursor - sections[section_debug].address);
+    TRACE("Compilation Unit Header found at 0x%lx:\n",
+          (ULONG_PTR)(comp_unit_cursor - sections[section_debug].address));
     TRACE("- length:        %lu\n", comp_unit->length);
     TRACE("- version:       %u\n",  comp_unit->version);
     TRACE("- abbrev_offset: %lu\n", comp_unit->abbrev_offset);
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index 30b7a3c..8dd8887 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -103,12 +103,20 @@ struct elf_info
  */
 struct elf_file_map
 {
+#ifdef _WIN64
+    Elf64_Ehdr                  elfhdr;
+#else
     Elf32_Ehdr                  elfhdr;
+#endif
     size_t                      elf_size;
     size_t                      elf_start;
     struct
     {
+#ifdef _WIN64
+        Elf64_Shdr                      shdr;
+#else
         Elf32_Shdr                      shdr;
+#endif
         const char*                     mapped;
     }*                          sect;
     int                         fd;
@@ -125,7 +133,11 @@ struct elf_section_map
 struct symtab_elt
 {
     struct hash_table_elt       ht_elt;
+#ifdef _WIN64
+    const Elf64_Sym*            symp;
+#else
     const Elf32_Sym*            symp;
+#endif
     struct symt_compiland*      compiland;
     unsigned                    used;
 };
@@ -143,7 +155,7 @@ struct elf_thunk_area
  *
  * Maps a single section into memory from an ELF file
  */
-static const char* elf_map_section(struct elf_section_map* esm)
+static const void* elf_map_section(struct elf_section_map* esm)
 {
     unsigned pgsz = getpagesize();
     unsigned ofst, size;
@@ -254,7 +266,11 @@ static BOOL elf_map_file(const WCHAR* filenameW, struct elf_file_map* fmap)
     static const BYTE   elf_signature[4] = { ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3 };
     struct stat	        statbuf;
     int                 i;
+#ifdef _WIN64
+    Elf64_Phdr          phdr;
+#else
     Elf32_Phdr          phdr;
+#endif
     unsigned            tmp, page_mask = getpagesize() - 1;
     char*               filename;
     unsigned            len;
@@ -372,13 +388,17 @@ static void elf_hash_symtab(struct module* module, struct pool* pool,
     const char*                 symname;
     struct symt_compiland*      compiland = NULL;
     const char*                 ptr;
+#ifdef _WIN64
+    const Elf64_Sym*            symp;
+#else
     const Elf32_Sym*            symp;
+#endif
     struct symtab_elt*          ste;
     struct elf_section_map      esm, esm_str;
 
     if (!elf_find_section(fmap, ".symtab", SHT_SYMTAB, &esm) &&
         !elf_find_section(fmap, ".dynsym", SHT_DYNSYM, &esm)) return;
-    if ((symp = (const Elf32_Sym*)elf_map_section(&esm)) == ELF_NO_MAP) return;
+    if ((symp = elf_map_section(&esm)) == ELF_NO_MAP) return;
     esm_str.fmap = fmap;
     esm_str.sidx = fmap->sect[esm.sidx].shdr.sh_link;
     if ((strp = elf_map_section(&esm_str)) == ELF_NO_MAP) return;
@@ -471,7 +491,12 @@ static void elf_hash_symtab(struct module* module, struct pool* pool,
  *
  * lookup a symbol by name in our internal hash table for the symtab
  */
-static const Elf32_Sym* elf_lookup_symtab(const struct module* module,        
+#ifdef _WIN64
+static const Elf64_Sym*
+#else
+static const Elf32_Sym*
+#endif
+                        elf_lookup_symtab(const struct module* module,
                                           const struct hash_table* ht_symtab,
                                           const char* name, struct symt* compiland)
 {
@@ -547,7 +572,11 @@ static void elf_finish_stabs_info(struct module* module, struct hash_table* symt
     struct hash_table_iter      hti;
     void*                       ptr;
     struct symt_ht*             sym;
+#ifdef _WIN64
+    const Elf64_Sym*            symp;
+#else
     const Elf32_Sym*            symp;
+#endif
 
     hash_table_iter_init(&module->ht_symbols, &hti, NULL);
     while ((ptr = hash_table_iter_up(&hti)))
@@ -1015,7 +1044,7 @@ static BOOL elf_load_debug_info_from_map(struct module* module,
         {
             const BYTE* dbg_link;
 
-            dbg_link = (const BYTE*)elf_map_section(&debuglink_sect);
+            dbg_link = elf_map_section(&debuglink_sect);
             if (dbg_link != ELF_NO_MAP)
             {
                 lret = elf_debuglink_parse(fmap, module, dbg_link);
@@ -1206,7 +1235,11 @@ static BOOL elf_load_file(struct process* pcs, const WCHAR* filename,
 
         if (elf_find_section(&fmap, ".dynamic", SHT_DYNAMIC, &esm))
         {
+#ifdef _WIN64
+            Elf64_Dyn       dyn;
+#else
             Elf32_Dyn       dyn;
+#endif
             char*           ptr = (char*)fmap.sect[esm.sidx].shdr.sh_addr;
             unsigned long   len;
 
diff --git a/dlls/dbghelp/minidump.c b/dlls/dbghelp/minidump.c
index 9a317b9..20b03e9 100644
--- a/dlls/dbghelp/minidump.c
+++ b/dlls/dbghelp/minidump.c
@@ -34,7 +34,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp);
 
 struct dump_memory
 {
-    ULONG                               base;
+    ULONG_PTR                           base;
     ULONG                               size;
     ULONG                               rva;
 };
@@ -42,7 +42,7 @@ struct dump_memory
 struct dump_module
 {
     unsigned                            is_elf;
-    ULONG                               base;
+    ULONG_PTR                           base;
     ULONG                               size;
     DWORD                               timestamp;
     DWORD                               checksum;
@@ -218,7 +218,7 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx,
  * Add a module to a dump context
  */
 static BOOL add_module(struct dump_context* dc, const WCHAR* name,
-                       DWORD base, DWORD size, DWORD timestamp, DWORD checksum,
+                       DWORD64 base, DWORD size, DWORD timestamp, DWORD checksum,
                        BOOL is_elf)
 {
     if (!dc->module)
@@ -650,7 +650,7 @@ static void dump_memory_info(struct dump_context* dc)
         {
             len = min(dc->mem[i].size - pos, sizeof(tmp));
             if (ReadProcessMemory(dc->hProcess, 
-                                  (void*)(ULONG)(dc->mem[i].base + pos), 
+                                  (void*)(dc->mem[i].base + pos),
                                   tmp, len, NULL))
                 WriteFile(dc->hFile, tmp, len, &written, NULL);
         }
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index 0bd353e..b635e27 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -2234,7 +2234,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
             }
             file_name = (const char*)file + size;
             file_name += strlen(file_name) + 1;
-            file = (BYTE*)((DWORD)(file_name + strlen(file_name) + 1 + 3) & ~3);
+            file = (BYTE*)((DWORD_PTR)(file_name + strlen(file_name) + 1 + 3) & ~3);
         }
     }
     else
diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c
index a42ade1..dc3ddd9 100644
--- a/dlls/dbghelp/pe_module.c
+++ b/dlls/dbghelp/pe_module.c
@@ -322,7 +322,7 @@ BOOL pe_load_debug_info(const struct process* pcs, struct module* module)
  *
  */
 struct module* pe_load_native_module(struct process* pcs, const WCHAR* name,
-                                     HANDLE hFile, DWORD base, DWORD size)
+                                     HANDLE hFile, DWORD_PTR base, DWORD size)
 {
     struct module*      module = NULL;
     BOOL                opened = FALSE;
@@ -380,7 +380,7 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name,
  *		pe_load_nt_header
  *
  */
-BOOL pe_load_nt_header(HANDLE hProc, DWORD base, IMAGE_NT_HEADERS* nth)
+BOOL pe_load_nt_header(HANDLE hProc, DWORD_PTR base, IMAGE_NT_HEADERS* nth)
 {
     IMAGE_DOS_HEADER    dos;
 
@@ -396,7 +396,7 @@ BOOL pe_load_nt_header(HANDLE hProc, DWORD base, IMAGE_NT_HEADERS* nth)
  *
  */
 struct module* pe_load_builtin_module(struct process* pcs, const WCHAR* name,
-                                      DWORD base, DWORD size)
+                                      DWORD_PTR base, DWORD size)
 {
     struct module*      module = NULL;
 
diff --git a/dlls/dbghelp/stack.c b/dlls/dbghelp/stack.c
index 3cb71e6..ce20dde 100644
--- a/dlls/dbghelp/stack.c
+++ b/dlls/dbghelp/stack.c
@@ -60,7 +60,7 @@ static BOOL CALLBACK read_mem(HANDLE hProcess, DWORD addr, void* buffer,
                               DWORD size, LPDWORD nread)
 {
     SIZE_T      r;
-    if (!ReadProcessMemory(hProcess, (void*)addr, buffer, size, &r)) return FALSE;
+    if (!ReadProcessMemory(hProcess, ULongToPtr(addr), buffer, size, &r)) return FALSE;
     if (nread) *nread = r;
     return TRUE;
 }
@@ -121,7 +121,7 @@ static inline void addr_64to32(const ADDRESS64* addr64, ADDRESS* addr32)
     addr32->Mode = addr64->Mode;
 }
 
-static inline BOOL sw_read_mem(struct stack_walk_callback* cb, DWORD addr, void* ptr, DWORD sz)
+static inline BOOL sw_read_mem(struct stack_walk_callback* cb, DWORD_PTR addr, void* ptr, DWORD sz)
 {
     if (cb->is32)
         return cb->u.s32.f_read_mem(cb->hProcess, addr, ptr, sz, NULL);
@@ -232,7 +232,7 @@ static BOOL stack_walk(struct stack_walk_callback* cb, LPSTACKFRAME frame)
                     WARN("Bad stack frame 0x%08x\n", p);
                     goto done_err;
                 }
-                curr_switch = (DWORD)frame16.frame32;
+                curr_switch = (DWORD_PTR)frame16.frame32;
 
                 if (!sw_read_mem(cb, curr_switch, &ch, sizeof(ch)))
                     curr_switch = 0xFFFFFFFF;
@@ -298,7 +298,7 @@ static BOOL stack_walk(struct stack_walk_callback* cb, LPSTACKFRAME frame)
                     WARN("Bad stack frame 0x%08x\n", p);
                     goto done_err;
                 }
-                curr_switch = (DWORD)frame16.frame32;
+                curr_switch = (DWORD_PTR)frame16.frame32;
                 curr_mode = stm_32bit;
                 if (!sw_read_mem(cb, curr_switch, &ch, sizeof(ch)))
                     curr_switch = 0;
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index a5bb6f0..4f720f5 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -488,10 +488,11 @@ static void symt_fill_sym_info(const struct module_pair* pair,
 
     if (!symt_get_info(sym, TI_GET_TYPE, &sym_info->TypeIndex))
         sym_info->TypeIndex = 0;
-    sym_info->info = (DWORD)sym;
+    sym_info->info = (DWORD_PTR)sym;
     sym_info->Reserved[0] = sym_info->Reserved[1] = 0;
     if (!symt_get_info(sym, TI_GET_LENGTH, &size) &&
         (!sym_info->TypeIndex ||
+         /* FIXME: How 32-bit sym_info->TypeIndex becomes an address? */
          !symt_get_info((struct symt*)sym_info->TypeIndex, TI_GET_LENGTH, &size)))
         size = 0;
     sym_info->Size = (DWORD)size;
@@ -554,7 +555,7 @@ static void symt_fill_sym_info(const struct module_pair* pair,
                 case VT_UI4: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.ulVal; break;
                 case VT_UI2: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.uiVal; break;
                 case VT_UI1: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.bVal; break;
-                case VT_I1 | VT_BYREF: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.byref; break;
+                case VT_I1 | VT_BYREF: sym_info->Value = (ULONG64)data->u.value.n1.n2.n3.byref; break;
                 default:
                     FIXME("Unsupported variant type (%u)\n", data->u.value.n1.n2.vt);
                     sym_info->Value = 0;
diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c
index e741602..ed27f0e 100644
--- a/dlls/dbghelp/type.c
+++ b/dlls/dbghelp/type.c
@@ -396,7 +396,7 @@ BOOL WINAPI SymEnumTypes(HANDLE hProcess, ULONG64 BaseOfDll,
     for (i=0; i<vector_length(&pair.effective->vtypes); i++)
     {
         type = *(struct symt**)vector_at(&pair.effective->vtypes, i);
-        sym_info->TypeIndex = (DWORD)type;
+        sym_info->TypeIndex = (DWORD)type; /* FIXME: pointer truncation */
         sym_info->info = 0; /* FIXME */
         symt_get_info(type, TI_GET_LENGTH, &size);
         sym_info->Size = size;
@@ -491,7 +491,7 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req,
             for (i = 0; i < tifp->Count; i++)
             {
                 if (!(pt = vector_at(v, tifp->Start + i))) return FALSE;
-                tifp->ChildId[i] = (DWORD)*pt;
+                tifp->ChildId[i] = (DWORD)*pt; /* FIXME: pointer truncation */
             }
         }
         break;
@@ -661,18 +661,23 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req,
         switch (type->tag)
         {
         case SymTagBlock:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_block*)type)->container;
             break;
         case SymTagData:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_data*)type)->container;
             break;
         case SymTagFunction:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_function*)type)->container;
             break;
         case SymTagThunk:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_thunk*)type)->container;
             break;
         case SymTagFunctionArgType:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_function_arg_type*)type)->container;
             break;
         default:
@@ -741,26 +746,33 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req,
         {
             /* hierarchical => hierarchical */
         case SymTagArrayType:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_array*)type)->base_type;
             break;
         case SymTagPointerType:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_pointer*)type)->pointsto;
             break;
         case SymTagFunctionType:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_function_signature*)type)->rettype;
             break;
         case SymTagTypedef:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_typedef*)type)->type;
             break;
             /* lexical => hierarchical */
         case SymTagData:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_data*)type)->type; 
             break;
         case SymTagFunction:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_function*)type)->type;
             break;
             /* FIXME: should also work for enums */
         case SymTagFunctionArgType:
+            /* FIXME: pointer truncation */
             X(DWORD) = (DWORD)((const struct symt_function_arg_type*)type)->arg_type;
             break;
         default:
@@ -794,6 +806,7 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req,
         break;
     case TI_GET_ARRAYINDEXTYPEID:
         if (type->tag != SymTagArrayType) return FALSE;
+        /* FIXME: pointer truncation */
         X(DWORD) = (DWORD)((const struct symt_array*)type)->index_type;
         break;
 
@@ -837,6 +850,7 @@ BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD64 ModBase,
         return FALSE;
     }
 
+    /* FIXME: pointer conversion */
     return symt_get_info((struct symt*)TypeId, GetType, pInfo);
 }
 
@@ -856,7 +870,7 @@ BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, ULONG64 BaseOfDll,
     if (!module) return FALSE;
     type = symt_find_type_by_name(module, SymTagNull, Name);
     if (!type) return FALSE;
-    Symbol->TypeIndex = (DWORD)type;
+    Symbol->TypeIndex = (DWORD)type; /* FIXME: pointer truncation */
 
     return TRUE;
 }
-- 
1.5.1.6






More information about the wine-patches mailing list