https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e51f4db7d0726fdd1ebb2…
commit e51f4db7d0726fdd1ebb29f31b246edd611e9cfb
Author: Thomas Faber <thomas.faber(a)reactos.org>
AuthorDate: Sat Jul 20 22:20:33 2019 +0200
Commit: Thomas Faber <thomas.faber(a)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)
{