Module: wine Branch: master Commit: 1c5989465e72d90b10c1c21105c99ba6f0f9b2f7 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1c5989465e72d90b10c1c2110...
Author: Eric Pouech eric.pouech@gmail.com Date: Fri Oct 29 15:37:04 2021 +0200
dbghelp: Make symt_add_func_line() last parameter an absolute address.
It used to be an offset to the start of function, but it's actually stored as an absolute address afterwards. This avoids unnecessary computations.
Signed-off-by: Eric Pouech eric.pouech@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dbghelp/coff.c | 7 +------ dlls/dbghelp/dwarf.c | 2 +- dlls/dbghelp/msc.c | 5 ++--- dlls/dbghelp/stabs.c | 4 ++-- dlls/dbghelp/symbol.c | 8 ++++---- 5 files changed, 10 insertions(+), 16 deletions(-)
diff --git a/dlls/dbghelp/coff.c b/dlls/dbghelp/coff.c index 8684a493310..cc005a3bbc5 100644 --- a/dlls/dbghelp/coff.c +++ b/dlls/dbghelp/coff.c @@ -421,16 +421,11 @@ DECLSPEC_HIDDEN BOOL coff_process_info(const struct msc_debug_info* msc_dbg) { if (coff_files.files[j].entries[l+1]->tag == SymTagFunction) { - /* - * Add the line number. This is always relative to the - * start of the function, so we need to subtract that offset - * first. - */ symt_add_func_line(msc_dbg->module, (struct symt_function*)coff_files.files[j].entries[l+1], coff_files.files[j].compiland->source, linepnt->Linenumber, - msc_dbg->module->module.BaseOfImage + linepnt->Type.VirtualAddress - addr); + msc_dbg->module->module.BaseOfImage + linepnt->Type.VirtualAddress); } break; } diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 1ea8d2df773..eab6609cdf4 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -2526,7 +2526,7 @@ static void dwarf2_set_line_number(struct module* module, ULONG_PTR address, if (symt_check_tag(&symt->symt, SymTagFunction)) { func = (struct symt_function*)symt; - symt_add_func_line(module, func, *psrc, line, address - func->address); + symt_add_func_line(module, func, *psrc, line, address); } }
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c index c557cb24636..191e33e781f 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -1454,8 +1454,7 @@ static void codeview_snarf_linetab(const struct msc_debug_info* msc_dbg, const B break; } } - symt_add_func_line(msc_dbg->module, func, source, - linenos[k], addr - func->address); + symt_add_func_line(msc_dbg->module, func, source, linenos[k], addr); } } } @@ -1519,7 +1518,7 @@ static void codeview_snarf_linetab2(const struct msc_debug_info* msc_dbg, const { symt_add_func_line(msc_dbg->module, func, source, lines_blk->l[i].lineno ^ 0x80000000, - lines_blk->l[i].offset); + func->address + lines_blk->l[i].offset); } break; case LT2_FILES_BLOCK: /* skip */ diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c index 9d7d5131fc4..647a71ec258 100644 --- a/dlls/dbghelp/stabs.c +++ b/dlls/dbghelp/stabs.c @@ -1168,7 +1168,7 @@ static void pending_flush(struct pending_list* pending, struct module* module, if (module->type == DMT_MACHO) pending->objs[i].u.line.offset -= func->address - pending->objs[i].u.line.load_offset; symt_add_func_line(module, func, pending->objs[i].u.line.source_idx, - pending->objs[i].u.line.line_num, pending->objs[i].u.line.offset); + pending->objs[i].u.line.line_num, func->address + pending->objs[i].u.line.offset); break; default: ERR("Unknown pending object tag %u\n", (unsigned)pending->objs[i].tag); @@ -1492,7 +1492,7 @@ BOOL stabs_parse(struct module* module, ULONG_PTR load_offset, if (module->type == DMT_MACHO) offset -= curr_func->address - load_offset; symt_add_func_line(module, curr_func, source_idx, - stab_ptr->n_desc, offset); + stab_ptr->n_desc, curr_func->address + offset); } else pending_add_line(&pending_func, source_idx, stab_ptr->n_desc, n_value, load_offset); diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index e4208bc2418..43f7b3fdec2 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -391,7 +391,7 @@ struct symt_inlinesite* symt_new_inlinesite(struct module* module, }
void symt_add_func_line(struct module* module, struct symt_function* func, - unsigned source_idx, int line_num, ULONG_PTR offset) + unsigned source_idx, int line_num, ULONG_PTR addr) { struct line_info* dli; unsigned vlen; @@ -401,8 +401,8 @@ void symt_add_func_line(struct module* module, struct symt_function* func,
if (func == NULL || !(dbghelp_options & SYMOPT_LOAD_LINES)) return;
- TRACE_(dbghelp_symt)("(%p)%s:%lx %s:%u\n", - func, func->hash_elt.name, offset, + TRACE_(dbghelp_symt)("(%p)%s:%Ix %s:%u\n", + func, func->hash_elt.name, addr, source_get(module, source_idx), line_num);
assert(func->symt.tag == SymTagFunction || func->symt.tag == SymTagInlineSite); @@ -435,7 +435,7 @@ void symt_add_func_line(struct module* module, struct symt_function* func, dli->is_first = 0; /* only a source file can be first */ dli->is_last = 1; dli->line_number = line_num; - dli->u.address = func->address + offset; + dli->u.address = addr; }
/******************************************************************