[Title] Callstack Demangling fix
authorjy.exe.lee <jy.exe.lee@samsung.com>
Tue, 26 Jun 2012 08:22:08 +0000 (17:22 +0900)
committerjy.exe.lee <jy.exe.lee@samsung.com>
Tue, 26 Jun 2012 08:22:08 +0000 (17:22 +0900)
[Type] bug fix
[Module] DynamicAnalyzer
[Priority] major
[CQ#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java

index 993f274..9f92e53 100644 (file)
@@ -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);
                        }
 
index 80aca72..357de56 100644 (file)
@@ -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);
                        }
                }