[RSYM] When determining the current function, always prefer COFF symbols if they're closer.

This commit is contained in:
Thomas Faber 2019-07-20 22:20:33 +02:00
parent 87845a1cc2
commit e51f4db7d0
No known key found for this signature in database
GPG key ID: 076E7C3D44720826

View file

@ -720,7 +720,8 @@ MergeStabsAndCoffs(ULONG *MergedSymbolCount, PROSSYM_ENTRY *MergedSymbols,
ULONG StabIndex, j;
ULONG CoffIndex;
ULONG_PTR StabFunctionStartAddress;
ULONG StabFunctionStringOffset, NewStabFunctionStringOffset;
ULONG StabFunctionStringOffset, NewStabFunctionStringOffset, CoffFunctionStringOffset;
PROSSYM_ENTRY CoffFunctionSymbol;
*MergedSymbolCount = 0;
if (StabSymbolsCount == 0)
@ -737,6 +738,8 @@ MergeStabsAndCoffs(ULONG *MergedSymbolCount, PROSSYM_ENTRY *MergedSymbols,
StabFunctionStartAddress = 0;
StabFunctionStringOffset = 0;
CoffFunctionStringOffset = 0;
CoffFunctionSymbol = NULL;
CoffIndex = 0;
for (StabIndex = 0; StabIndex < StabSymbolsCount; StabIndex++)
{
@ -761,18 +764,22 @@ MergeStabsAndCoffs(ULONG *MergedSymbolCount, PROSSYM_ENTRY *MergedSymbols,
StabIndex = j - 1;
while (CoffIndex < CoffSymbolsCount &&
CoffSymbols[CoffIndex + 1].Address <= (*MergedSymbols)[*MergedSymbolCount].Address)
CoffSymbols[CoffIndex].Address <= (*MergedSymbols)[*MergedSymbolCount].Address)
{
if (CoffSymbols[CoffIndex].FunctionOffset != 0)
{
CoffFunctionSymbol = &CoffSymbols[CoffIndex];
CoffFunctionStringOffset = CoffFunctionSymbol->FunctionOffset;
}
CoffIndex++;
}
NewStabFunctionStringOffset = (*MergedSymbols)[*MergedSymbolCount].FunctionOffset;
if (CoffSymbolsCount > 0 &&
CoffSymbols[CoffIndex].Address < (*MergedSymbols)[*MergedSymbolCount].Address &&
StabFunctionStartAddress < CoffSymbols[CoffIndex].Address &&
CoffSymbols[CoffIndex].FunctionOffset != 0)
if (CoffFunctionSymbol &&
CoffFunctionSymbol->Address <= (*MergedSymbols)[*MergedSymbolCount].Address &&
StabFunctionStartAddress < CoffFunctionSymbol->Address)
{
(*MergedSymbols)[*MergedSymbolCount].FunctionOffset = CoffSymbols[CoffIndex].FunctionOffset;
CoffSymbols[CoffIndex].FileOffset = CoffSymbols[CoffIndex].FunctionOffset = 0;
(*MergedSymbols)[*MergedSymbolCount].FunctionOffset = CoffFunctionStringOffset;
CoffFunctionSymbol->FunctionOffset = 0;
}
if (StabFunctionStringOffset != NewStabFunctionStringOffset)
{