https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e51f4db7d0726fdd1ebb29f31b246edd611e9cfb

commit e51f4db7d0726fdd1ebb29f31b246edd611e9cfb
Author:     Thomas Faber <[email protected]>
AuthorDate: Sat Jul 20 22:20:33 2019 +0200
Commit:     Thomas Faber <[email protected]>
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)
         {

Reply via email to