Zebediah Figura : dbghelp: Read the Elf_auxv_t struct corresponding to the target's architecture.

Alexandre Julliard julliard at winehq.org
Tue Jun 5 17:06:40 CDT 2018


Module: wine
Branch: master
Commit: 51ada19ac235df104e95476e9b3fa8204357bb9a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=51ada19ac235df104e95476e9b3fa8204357bb9a

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Mon Jun  4 16:51:32 2018 -0500

dbghelp: Read the Elf_auxv_t struct corresponding to the target's architecture.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dbghelp/elf_module.c    | 30 ++++++++++++++++++++++++------
 dlls/dbghelp/image_private.h |  2 --
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index 2b444f8..0cbeb98 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -1522,7 +1522,6 @@ static BOOL elf_search_auxv(const struct process* pcs, unsigned type, unsigned l
     void*       addr;
     void*       str;
     void*       str_max;
-    Elf_auxv_t  auxv;
 
     si->SizeOfStruct = sizeof(*si);
     si->MaxNameLen = MAX_SYM_NAME;
@@ -1548,14 +1547,33 @@ static BOOL elf_search_auxv(const struct process* pcs, unsigned type, unsigned l
     while (addr < str_max && ReadProcessMemory(pcs->handle, addr, &str, sizeof(str), NULL) && str == NULL)
         addr = (void*)((DWORD_PTR)addr + sizeof(str));
 
-    while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type != AT_NULL)
+    if (pcs->is_64bit)
     {
-        if (auxv.a_type == type)
+        Elf64_auxv_t auxv;
+
+        while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type != AT_NULL)
         {
-            *val = auxv.a_un.a_val;
-            return TRUE;
+            if (auxv.a_type == type)
+            {
+                *val = auxv.a_un.a_val;
+                return TRUE;
+            }
+            addr = (void*)((DWORD_PTR)addr + sizeof(auxv));
+        }
+    }
+    else
+    {
+        Elf32_auxv_t auxv;
+
+        while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type != AT_NULL)
+        {
+            if (auxv.a_type == type)
+            {
+                *val = auxv.a_un.a_val;
+                return TRUE;
+            }
+            addr = (void*)((DWORD_PTR)addr + sizeof(auxv));
         }
-        addr = (void*)((DWORD_PTR)addr + sizeof(auxv));
     }
 
     return FALSE;
diff --git a/dlls/dbghelp/image_private.h b/dlls/dbghelp/image_private.h
index a0df390..e95d0d1 100644
--- a/dlls/dbghelp/image_private.h
+++ b/dlls/dbghelp/image_private.h
@@ -60,10 +60,8 @@ typedef struct section              macho_section;
 
 #ifdef _WIN64
 #define         Elf_Sym         Elf64_Sym
-#define         Elf_auxv_t      Elf64_auxv_t
 #else
 #define         Elf_Sym         Elf32_Sym
-#define         Elf_auxv_t      Elf32_auxv_t
 #endif
 #else
 #ifndef SHT_NULL




More information about the wine-cvs mailing list