Jacek Caban : dbghelp: Pass stab size to stabs_parse.
Alexandre Julliard
julliard at winehq.org
Mon Mar 30 16:24:25 CDT 2020
Module: wine
Branch: master
Commit: 9c2cedabc7c7b48c4f9042d444c45a3036cfd4be
URL: https://source.winehq.org/git/wine.git/?a=commit;h=9c2cedabc7c7b48c4f9042d444c45a3036cfd4be
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Mar 29 21:03:34 2020 +0200
dbghelp: Pass stab size to stabs_parse.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dbghelp/dbghelp_private.h | 2 +-
dlls/dbghelp/elf_module.c | 2 +-
dlls/dbghelp/macho_module.c | 2 +-
dlls/dbghelp/pe_module.c | 2 +-
dlls/dbghelp/stabs.c | 15 ++-------------
5 files changed, 6 insertions(+), 17 deletions(-)
diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index 6d6f6c7614..73b9cf9c8c 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -694,7 +694,7 @@ typedef void (*stabs_def_cb)(struct module* module, ULONG_PTR load_offset,
BOOL is_public, BOOL is_global, unsigned char other,
struct symt_compiland* compiland, void* user);
extern BOOL stabs_parse(struct module* module, ULONG_PTR load_offset,
- const char* stabs, int stablen,
+ const char* stabs, size_t nstab, size_t stabsize,
const char* strs, int strtablen,
stabs_def_cb callback, void* user) DECLSPEC_HIDDEN;
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index 01759cd18e..50f19bc79a 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -1007,7 +1007,7 @@ static BOOL elf_load_debug_info_from_map(struct module* module,
{
/* OK, now just parse all of the stabs. */
lret = stabs_parse(module, module->format_info[DFI_ELF]->u.elf_info->elf_addr,
- stab, image_get_map_size(&stab_sect),
+ stab, image_get_map_size(&stab_sect) / sizeof(struct stab_nlist), sizeof(struct stab_nlist),
stabstr, image_get_map_size(&stabstr_sect),
NULL, NULL);
if (lret)
diff --git a/dlls/dbghelp/macho_module.c b/dlls/dbghelp/macho_module.c
index ab88d27108..1e01d84c19 100644
--- a/dlls/dbghelp/macho_module.c
+++ b/dlls/dbghelp/macho_module.c
@@ -944,7 +944,7 @@ static int macho_parse_symtab(struct image_file_map* ifm,
if (!stabs_parse(mdi->module,
mdi->module->format_info[DFI_MACHO]->u.macho_info->load_addr - fmap->segs_start,
- stab, sc->nsyms * stabsize,
+ stab, sc->nsyms, stabsize,
stabstr, sc->strsize, macho_stabs_def_cb, mdi))
ret = -1;
diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c
index 9d4e82cc71..0560f3ef05 100644
--- a/dlls/dbghelp/pe_module.c
+++ b/dlls/dbghelp/pe_module.c
@@ -500,7 +500,7 @@ static BOOL pe_load_stabs(const struct process* pcs, struct module* module)
{
ret = stabs_parse(module,
module->module.BaseOfImage - fmap->u.pe.ntheader.OptionalHeader.ImageBase,
- stab, image_get_map_size(§_stabs),
+ stab, image_get_map_size(§_stabs) / sizeof(struct stab_nlist), sizeof(struct stab_nlist),
stabstr, image_get_map_size(§_stabstr),
NULL, NULL);
}
diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c
index b2da8f866b..9ac3089d02 100644
--- a/dlls/dbghelp/stabs.c
+++ b/dlls/dbghelp/stabs.c
@@ -1247,7 +1247,7 @@ static inline void stabbuf_append(char **buf, unsigned *buf_size, const char *st
}
BOOL stabs_parse(struct module* module, ULONG_PTR load_offset,
- const char* pv_stab_ptr, int stablen,
+ const char* pv_stab_ptr, size_t nstab, size_t stabsize,
const char* strs, int strtablen,
stabs_def_cb callback, void* user)
{
@@ -1256,7 +1256,6 @@ BOOL stabs_parse(struct module* module, ULONG_PTR load_offset,
struct symt_compiland* compiland = NULL;
char* srcpath = NULL;
int i;
- int nstab;
const char* ptr;
char* stabbuff;
unsigned int stabbufflen;
@@ -1272,14 +1271,8 @@ BOOL stabs_parse(struct module* module, ULONG_PTR load_offset,
BOOL ret = TRUE;
struct location loc;
unsigned char type;
- size_t stabsize = sizeof(struct stab_nlist);
uint64_t n_value;
-#ifdef __APPLE__
- if (module->process->is_64bit)
- stabsize = sizeof(struct macho64_nlist);
-#endif
- nstab = stablen / stabsize;
strs_end = strs + strtablen;
memset(stabs_basic, 0, sizeof(stabs_basic));
@@ -1298,11 +1291,7 @@ BOOL stabs_parse(struct module* module, ULONG_PTR load_offset,
for (i = 0; i < nstab; i++)
{
stab_ptr = (struct stab_nlist *)(pv_stab_ptr + i * stabsize);
- n_value = stab_ptr->n_value;
-#ifdef __APPLE__
- if (module->process->is_64bit)
- n_value = ((struct macho64_nlist *)stab_ptr)->n_value;
-#endif
+ n_value = stabsize == sizeof(struct macho64_nlist) ? ((struct macho64_nlist *)stab_ptr)->n_value : stab_ptr->n_value;
ptr = strs + stab_ptr->n_strx;
if ((ptr > strs_end) || (ptr + strlen(ptr) > strs_end))
{
More information about the wine-cvs
mailing list