mirror of
https://github.com/reactos/reactos.git
synced 2025-01-02 20:43:18 +00:00
Revert "[DBGHELP] SymFromAddr: Handle 2 or more symbols at the same address correct."
This reverts commit 0263151f3c
.
It will be applied later through winesync script
This commit is contained in:
parent
f243e09624
commit
555f98267c
1 changed files with 18 additions and 40 deletions
|
@ -874,33 +874,6 @@ static void symt_get_length(struct module* module, const struct symt* symt, ULON
|
||||||
*size = 0x1000; /* arbitrary value */
|
*size = 0x1000; /* arbitrary value */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* neede by symt_find_nearest */
|
|
||||||
int symt_get_best_at(struct module* module, int idx_sorttab)
|
|
||||||
{
|
|
||||||
ULONG64 ref_addr;
|
|
||||||
int idx_sorttab_orig = idx_sorttab;
|
|
||||||
if (module->addr_sorttab[idx_sorttab]->symt.tag == SymTagPublicSymbol)
|
|
||||||
{
|
|
||||||
symt_get_address(&module->addr_sorttab[idx_sorttab]->symt, &ref_addr);
|
|
||||||
while (idx_sorttab > 0 &&
|
|
||||||
module->addr_sorttab[idx_sorttab]->symt.tag == SymTagPublicSymbol &&
|
|
||||||
!cmp_sorttab_addr(module, idx_sorttab - 1, ref_addr))
|
|
||||||
idx_sorttab--;
|
|
||||||
if (module->addr_sorttab[idx_sorttab]->symt.tag == SymTagPublicSymbol)
|
|
||||||
{
|
|
||||||
idx_sorttab = idx_sorttab_orig;
|
|
||||||
while (idx_sorttab < module->num_sorttab - 1 &&
|
|
||||||
module->addr_sorttab[idx_sorttab]->symt.tag == SymTagPublicSymbol &&
|
|
||||||
!cmp_sorttab_addr(module, idx_sorttab + 1, ref_addr))
|
|
||||||
idx_sorttab++;
|
|
||||||
}
|
|
||||||
/* if no better symbol fond restore original */
|
|
||||||
if (module->addr_sorttab[idx_sorttab]->symt.tag == SymTagPublicSymbol)
|
|
||||||
idx_sorttab = idx_sorttab_orig;
|
|
||||||
}
|
|
||||||
return idx_sorttab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* assume addr is in module */
|
/* assume addr is in module */
|
||||||
struct symt_ht* symt_find_nearest(struct module* module, DWORD_PTR addr)
|
struct symt_ht* symt_find_nearest(struct module* module, DWORD_PTR addr)
|
||||||
{
|
{
|
||||||
|
@ -919,12 +892,7 @@ struct symt_ht* symt_find_nearest(struct module* module, DWORD_PTR addr)
|
||||||
high = module->num_sorttab;
|
high = module->num_sorttab;
|
||||||
|
|
||||||
symt_get_address(&module->addr_sorttab[0]->symt, &ref_addr);
|
symt_get_address(&module->addr_sorttab[0]->symt, &ref_addr);
|
||||||
if (addr <= ref_addr)
|
if (addr < ref_addr) return NULL;
|
||||||
{
|
|
||||||
low = symt_get_best_at(module, 0);
|
|
||||||
return module->addr_sorttab[low];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (high)
|
if (high)
|
||||||
{
|
{
|
||||||
symt_get_address(&module->addr_sorttab[high - 1]->symt, &ref_addr);
|
symt_get_address(&module->addr_sorttab[high - 1]->symt, &ref_addr);
|
||||||
|
@ -947,13 +915,23 @@ struct symt_ht* symt_find_nearest(struct module* module, DWORD_PTR addr)
|
||||||
/* If found symbol is a public symbol, check if there are any other entries that
|
/* If found symbol is a public symbol, check if there are any other entries that
|
||||||
* might also have the same address, but would get better information
|
* might also have the same address, but would get better information
|
||||||
*/
|
*/
|
||||||
low = symt_get_best_at(module, low);
|
if (module->addr_sorttab[low]->symt.tag == SymTagPublicSymbol)
|
||||||
|
{
|
||||||
|
symt_get_address(&module->addr_sorttab[low]->symt, &ref_addr);
|
||||||
|
if (low > 0 &&
|
||||||
|
module->addr_sorttab[low - 1]->symt.tag != SymTagPublicSymbol &&
|
||||||
|
!cmp_sorttab_addr(module, low - 1, ref_addr))
|
||||||
|
low--;
|
||||||
|
else if (low < module->num_sorttab - 1 &&
|
||||||
|
module->addr_sorttab[low + 1]->symt.tag != SymTagPublicSymbol &&
|
||||||
|
!cmp_sorttab_addr(module, low + 1, ref_addr))
|
||||||
|
low++;
|
||||||
|
}
|
||||||
/* finally check that we fit into the found symbol */
|
/* finally check that we fit into the found symbol */
|
||||||
//symt_get_address(&module->addr_sorttab[low]->symt, &ref_addr);
|
symt_get_address(&module->addr_sorttab[low]->symt, &ref_addr);
|
||||||
//if (addr < ref_addr) return NULL;
|
if (addr < ref_addr) return NULL;
|
||||||
//symt_get_length(module, &module->addr_sorttab[low]->symt, &ref_size);
|
symt_get_length(module, &module->addr_sorttab[low]->symt, &ref_size);
|
||||||
//if (addr >= ref_addr + ref_size) return NULL;
|
if (addr >= ref_addr + ref_size) return NULL;
|
||||||
|
|
||||||
return module->addr_sorttab[low];
|
return module->addr_sorttab[low];
|
||||||
}
|
}
|
||||||
|
@ -1282,7 +1260,7 @@ BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 Address,
|
||||||
|
|
||||||
symt_fill_sym_info(&pair, NULL, &sym->symt, Symbol);
|
symt_fill_sym_info(&pair, NULL, &sym->symt, Symbol);
|
||||||
if (Displacement)
|
if (Displacement)
|
||||||
*Displacement = (Address >= Symbol->Address) ? (Address - Symbol->Address) : (DWORD64)-1;
|
*Displacement = Address - Symbol->Address;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue