Commit 7d441808 authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

dbghelp: Read the stabs nlist entry corresponding to the target's architecture.

parent 1dc9bb70
...@@ -676,7 +676,7 @@ typedef void (*stabs_def_cb)(struct module* module, unsigned long load_offset, ...@@ -676,7 +676,7 @@ typedef void (*stabs_def_cb)(struct module* module, unsigned long load_offset,
BOOL is_public, BOOL is_global, unsigned char other, BOOL is_public, BOOL is_global, unsigned char other,
struct symt_compiland* compiland, void* user); struct symt_compiland* compiland, void* user);
extern BOOL stabs_parse(struct module* module, unsigned long load_offset, extern BOOL stabs_parse(struct module* module, unsigned long load_offset,
const void* stabs, int stablen, const char* stabs, int stablen,
const char* strs, int strtablen, const char* strs, int strtablen,
stabs_def_cb callback, void* user) DECLSPEC_HIDDEN; stabs_def_cb callback, void* user) DECLSPEC_HIDDEN;
......
...@@ -88,13 +88,6 @@ struct dyld_all_image_infos { ...@@ -88,13 +88,6 @@ struct dyld_all_image_infos {
WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_macho); WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_macho);
#ifdef _WIN64
typedef struct nlist_64 macho_nlist;
#else
typedef struct nlist macho_nlist;
#endif
/* Bitmask for Mach-O image header flags indicating that the image is in dyld's /* Bitmask for Mach-O image header flags indicating that the image is in dyld's
shared cached. That implies that its segments are mapped non-contiguously. shared cached. That implies that its segments are mapped non-contiguously.
This value isn't defined anywhere in headers. It's used in dyld and in This value isn't defined anywhere in headers. It's used in dyld and in
...@@ -913,24 +906,25 @@ static int macho_parse_symtab(struct image_file_map* ifm, ...@@ -913,24 +906,25 @@ static int macho_parse_symtab(struct image_file_map* ifm,
struct macho_file_map* fmap = &ifm->u.macho; struct macho_file_map* fmap = &ifm->u.macho;
const struct symtab_command* sc = (const struct symtab_command*)lc; const struct symtab_command* sc = (const struct symtab_command*)lc;
struct macho_debug_info* mdi = user; struct macho_debug_info* mdi = user;
const macho_nlist* stab;
const char* stabstr; const char* stabstr;
int ret = 0; int ret = 0;
size_t stabsize = (ifm->addr_size == 32) ? sizeof(struct nlist) : sizeof(struct nlist_64);
const char *stab;
TRACE("(%p/%d, %p, %p) %u syms at 0x%08x, strings 0x%08x - 0x%08x\n", fmap, fmap->fd, lc, TRACE("(%p/%d, %p, %p) %u syms at 0x%08x, strings 0x%08x - 0x%08x\n", fmap, fmap->fd, lc,
user, sc->nsyms, sc->symoff, sc->stroff, sc->stroff + sc->strsize); user, sc->nsyms, sc->symoff, sc->stroff, sc->stroff + sc->strsize);
if (!macho_map_ranges(fmap, sc->symoff, sc->nsyms * sizeof(macho_nlist), if (!macho_map_ranges(fmap, sc->symoff, sc->nsyms * stabsize,
sc->stroff, sc->strsize, (const void**)&stab, (const void**)&stabstr)) sc->stroff, sc->strsize, (const void**)&stab, (const void**)&stabstr))
return 0; return 0;
if (!stabs_parse(mdi->module, if (!stabs_parse(mdi->module,
mdi->module->format_info[DFI_MACHO]->u.macho_info->load_addr - fmap->segs_start, mdi->module->format_info[DFI_MACHO]->u.macho_info->load_addr - fmap->segs_start,
stab, sc->nsyms * sizeof(macho_nlist), stab, sc->nsyms * stabsize,
stabstr, sc->strsize, macho_stabs_def_cb, mdi)) stabstr, sc->strsize, macho_stabs_def_cb, mdi))
ret = -1; ret = -1;
macho_unmap_ranges(fmap, sc->symoff, sc->nsyms * sizeof(macho_nlist), macho_unmap_ranges(fmap, sc->symoff, sc->nsyms * stabsize,
sc->stroff, sc->strsize, (const void**)&stab, (const void**)&stabstr); sc->stroff, sc->strsize, (const void**)&stab, (const void**)&stabstr);
return ret; return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment