https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e51f4db7d0726fdd1ebb29...
commit e51f4db7d0726fdd1ebb29f31b246edd611e9cfb Author: Thomas Faber thomas.faber@reactos.org AuthorDate: Sat Jul 20 22:20:33 2019 +0200 Commit: Thomas Faber thomas.faber@reactos.org CommitDate: Sat Aug 17 10:22:36 2019 +0200
[RSYM] When determining the current function, always prefer COFF symbols if they're closer. --- sdk/tools/rsym/rsym.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/sdk/tools/rsym/rsym.c b/sdk/tools/rsym/rsym.c index 58f5960ed38..9435c21a464 100644 --- a/sdk/tools/rsym/rsym.c +++ b/sdk/tools/rsym/rsym.c @@ -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) {