mirror of
https://github.com/reactos/reactos.git
synced 2025-05-20 09:36:16 +00:00
BUGFIX: stabs lookup ( particularly line # lookup )
svn path=/trunk/; revision=12169
This commit is contained in:
parent
26b1a392bf
commit
6aa427939e
2 changed files with 54 additions and 51 deletions
|
@ -79,6 +79,8 @@ KdbpStabFindEntry(IN PIMAGE_SYMBOL_INFO SymbolInfo,
|
||||||
StabEntry = StartEntry;
|
StabEntry = StartEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( RelativeAddress != NULL )
|
||||||
|
{
|
||||||
for (; (ULONG_PTR)StabEntry < (ULONG_PTR)StabsEnd; StabEntry++)
|
for (; (ULONG_PTR)StabEntry < (ULONG_PTR)StabsEnd; StabEntry++)
|
||||||
{
|
{
|
||||||
ULONG_PTR SymbolRelativeAddress;
|
ULONG_PTR SymbolRelativeAddress;
|
||||||
|
@ -91,6 +93,9 @@ KdbpStabFindEntry(IN PIMAGE_SYMBOL_INFO SymbolInfo,
|
||||||
if (StabEntry->n_value >= SymbolInfo->ImageSize)
|
if (StabEntry->n_value >= SymbolInfo->ImageSize)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (StabEntry->n_value > (ULONG_PTR)RelativeAddress )
|
||||||
|
break;
|
||||||
|
|
||||||
SymbolRelativeAddress = StabEntry->n_value;
|
SymbolRelativeAddress = StabEntry->n_value;
|
||||||
if ((SymbolRelativeAddress <= (ULONG_PTR)RelativeAddress) &&
|
if ((SymbolRelativeAddress <= (ULONG_PTR)RelativeAddress) &&
|
||||||
(SymbolRelativeAddress > AddrFound))
|
(SymbolRelativeAddress > AddrFound))
|
||||||
|
@ -99,12 +104,10 @@ KdbpStabFindEntry(IN PIMAGE_SYMBOL_INFO SymbolInfo,
|
||||||
BestStabEntry = StabEntry;
|
BestStabEntry = StabEntry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
BestStabEntry = StabEntry;
|
BestStabEntry = StabEntry;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BestStabEntry == NULL)
|
if (BestStabEntry == NULL)
|
||||||
{
|
{
|
||||||
|
@ -117,4 +120,3 @@ KdbpStabFindEntry(IN PIMAGE_SYMBOL_INFO SymbolInfo,
|
||||||
|
|
||||||
return BestStabEntry;
|
return BestStabEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -339,7 +339,7 @@ KdbSymGetAddressInformation(IN PIMAGE_SYMBOL_INFO SymbolInfo,
|
||||||
if (LineNumber != NULL && FunctionEntry != NULL)
|
if (LineNumber != NULL && FunctionEntry != NULL)
|
||||||
{
|
{
|
||||||
/* find stab entry for line number */
|
/* find stab entry for line number */
|
||||||
ULONG_PTR FunctionRelativeAddress = FunctionEntry->n_value - (ULONG_PTR)SymbolInfo->ImageBase;
|
ULONG_PTR FunctionRelativeAddress = RelativeAddress - FunctionEntry->n_value;
|
||||||
ULONG_PTR AddrFound = 0;
|
ULONG_PTR AddrFound = 0;
|
||||||
PSTAB_ENTRY NextLineEntry;
|
PSTAB_ENTRY NextLineEntry;
|
||||||
|
|
||||||
|
@ -354,8 +354,8 @@ KdbSymGetAddressInformation(IN PIMAGE_SYMBOL_INFO SymbolInfo,
|
||||||
if (NextLineEntry->n_type != N_SLINE)
|
if (NextLineEntry->n_type != N_SLINE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (((NextLineEntry->n_value+FunctionRelativeAddress) <= RelativeAddress) &&
|
if ( NextLineEntry->n_value <= FunctionRelativeAddress
|
||||||
(NextLineEntry->n_value > AddrFound))
|
&& NextLineEntry->n_value >= AddrFound )
|
||||||
{
|
{
|
||||||
AddrFound = NextLineEntry->n_value;
|
AddrFound = NextLineEntry->n_value;
|
||||||
LineEntry = NextLineEntry;
|
LineEntry = NextLineEntry;
|
||||||
|
@ -960,7 +960,8 @@ KdbSymProcessSymbolFile(IN PVOID ModuleLoadBase,
|
||||||
SymbolInfo->SymbolStringsLength = SymbolFileHeader->StabstrLength;
|
SymbolInfo->SymbolStringsLength = SymbolFileHeader->StabstrLength;
|
||||||
DPRINT("Installed stabs: %s@%08x-%08x (%08x-%08x,%08x)\n",
|
DPRINT("Installed stabs: %s@%08x-%08x (%08x-%08x,%08x)\n",
|
||||||
FileName,
|
FileName,
|
||||||
ModuleObject->Base, ModuleObject->Length + ModuleObject->Base,
|
ModuleObject->Base,
|
||||||
|
ModuleObject->Length + ModuleObject->Base,
|
||||||
SymbolInfo->SymbolsBase,
|
SymbolInfo->SymbolsBase,
|
||||||
SymbolInfo->SymbolsLength + SymbolInfo->SymbolsBase,
|
SymbolInfo->SymbolsLength + SymbolInfo->SymbolsBase,
|
||||||
SymbolInfo->SymbolStringsBase);
|
SymbolInfo->SymbolStringsBase);
|
||||||
|
|
Loading…
Reference in a new issue