From 54c0fc4a733b392e90e64972405fa1f2ac147162 Mon Sep 17 00:00:00 2001 From: "jy.exe.lee" Date: Tue, 26 Jun 2012 17:22:08 +0900 Subject: [PATCH] [Title] Callstack Demangling fix [Type] bug fix [Module] DynamicAnalyzer [Priority] major [CQ#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] --- .../src/org/tizen/dynamicanalyzer/LogSpliter.java | 22 ++++++++++++++++------ .../utils/FunctionUsageProfiler.java | 13 +++++++++++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java index 993f274..9f92e53 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java @@ -230,10 +230,10 @@ public class LogSpliter { selfSymbol = SymbolManager.addr2func(binPath, selfAddr, isPieBuild, baseAddr); // FIXME : demangling debug - // String prevSelf = selfSymbol; + String prevSelf = selfSymbol; selfSymbol = SymbolNameDemangler.nameDemangle(selfSymbol); - // System.out.println("Demangling in makeCallstack : " + prevSelf - // + " to " + selfSymbol); + System.out.println("[Self] Demangling in makeCallstack : " + + prevSelf + " to " + selfSymbol); selfSymbol = getUserFunctionPosition() + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + selfSymbol; addrMap.put(self, new String(selfSymbol)); @@ -247,7 +247,10 @@ public class LogSpliter { if (null == callerSymbol) { callerSymbol = SymbolManager.addr2func(binPath, callerAddr, isPieBuild, baseAddr); + String prevCaller = callerSymbol; callerSymbol = SymbolNameDemangler.nameDemangle(callerSymbol); + System.out.println("[Caller] Demangling in makeCallstack : " + + prevCaller + " to " + callerSymbol); callerSymbol = getUserFunctionPosition() + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + callerSymbol; @@ -439,9 +442,16 @@ public class LogSpliter { String[] name = funcName .split(AnalyzerConstants.CALLSTACK_API_OFFSET_TOKEN); - - addrMap.put(addr, new String(name[0])); - CallStackApi cas = new CallStackApi(addr, name[0]); + String fns[] = name[0].split("\\("); + String inputName = null; + if (fns.length > 1) { + String dmfn = SymbolNameDemangler.nameDemangle(fns[1]); + inputName = new String(fns[0] + "(" + dmfn); + } else { + inputName = new String(name[0]); + } + addrMap.put(addr, inputName); + CallStackApi cas = new CallStackApi(addr, inputName); addrList.add(cas); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java index 80aca72..357de56 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java @@ -6,6 +6,7 @@ import java.util.List; import org.tizen.dynamicanalyzer.AnalyzerManager; import org.tizen.dynamicanalyzer.LogSpliter; +import org.tizen.dynamicanalyzer.SymbolNameDemangler; import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; import org.tizen.dynamicanalyzer.model.CallStackApi; import org.tizen.dynamicanalyzer.model.FunctionUsageProfilingData; @@ -367,8 +368,16 @@ public class FunctionUsageProfiler { } String[] name = funcName .split(AnalyzerConstants.CALLSTACK_API_OFFSET_TOKEN); - addrMap.put(addr, new String(name[0])); - CallStackApi cas = new CallStackApi(addr, name[0]); + String fns[] = name[0].split("\\("); + String inputName = null; + if (fns.length > 1) { + String dmfn = SymbolNameDemangler.nameDemangle(fns[1]); + inputName = new String(fns[0] + "(" + dmfn); + } else { + inputName = new String(name[0]); + } + addrMap.put(addr, inputName); + CallStackApi cas = new CallStackApi(addr, inputName); addrList.add(cas); } } -- 2.7.4