Changeset 215715 in webkit for trunk/Source/JavaScriptCore/tools


Ignore:
Timestamp:
Apr 24, 2017, 7:53:49 PM (8 years ago)
Author:
Yusuke Suzuki
Message:

[WTF] Move JSC tools/StackTrace to WTF and unify stack trace dump code
https://bugs.webkit.org/show_bug.cgi?id=171199

Reviewed by Mark Lam.

Source/JavaScriptCore:

This patch adds a utility method to produce demangled names with dladdr.
It fixes several memory leaks because the result of abi::cxa_demangle()
needs to be free-ed.

  • CMakeLists.txt:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • inspector/JSGlobalObjectInspectorController.cpp:

(Inspector::JSGlobalObjectInspectorController::appendAPIBacktrace):

  • runtime/SamplingProfiler.cpp:

(JSC::SamplingProfiler::StackFrame::displayName):

  • tools/CellProfile.h:
  • tools/CodeProfile.cpp:

(JSC::CodeProfile::report):
(JSC::symbolName): Deleted.

Source/WTF:

JSC tools/StackTrace's dump code is almost identical to WTF Assertions'
stack trace dump code. This patch moves tools/StackTrace to WTF and use
it in Assertions. It unifies the two duplicate implementations into one.

  • WTF.xcodeproj/project.pbxproj:
  • wtf/Assertions.cpp:
  • wtf/CMakeLists.txt:
  • wtf/Platform.h:
  • wtf/StackTrace.cpp: Renamed from Source/JavaScriptCore/tools/StackTrace.cpp.

(WTF::StackTrace::captureStackTrace):
(WTF::StackTrace::dump):

  • wtf/StackTrace.h: Copied from Source/JavaScriptCore/tools/StackTrace.h.

(WTF::StackTrace::StackTrace):
(WTF::StackTrace::stack):
(WTF::StackTrace::DemangleEntry::mangledName):
(WTF::StackTrace::DemangleEntry::demangledName):
(WTF::StackTrace::DemangleEntry::DemangleEntry):

  • wtf/SystemFree.h: Renamed from Source/JavaScriptCore/tools/StackTrace.h.

(WTF::SystemFree::operator()):

Location:
trunk/Source/JavaScriptCore/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/tools/CellProfile.h

    r213883 r215715  
    2727
    2828#include "JSCell.h"
    29 #include "StackTrace.h"
    3029#include "Structure.h"
    3130#include <wtf/MonotonicTime.h>
     31#include <wtf/StackTrace.h>
    3232
    3333namespace JSC {
  • trunk/Source/JavaScriptCore/tools/CodeProfile.cpp

    r213859 r215715  
    3131#include "LinkBuffer.h"
    3232#include "ProfileTreeNode.h"
     33#include <wtf/StackTrace.h>
    3334#include <wtf/text/WTFString.h>
    34 
    35 #if OS(DARWIN) || OS(LINUX)
    36 #include <cxxabi.h>
    37 #include <dlfcn.h>
    38 #include <execinfo.h>
    39 #endif
    4035
    4136namespace JSC {
     
    5247    "[[EngineFrame]]"
    5348};
    54 
    55 // Helper function, find the symbol name for a pc in JSC.
    56 static const char* symbolName(void* address)
    57 {
    58 #if OS(DARWIN) || OS(LINUX)
    59     Dl_info info;
    60     if (!dladdr(address, &info) || !info.dli_sname)
    61         return "<unknown>";
    62 
    63     const char* mangledName = info.dli_sname;
    64     const char* cxaDemangled = abi::__cxa_demangle(mangledName, 0, 0, 0);
    65     return cxaDemangled ? cxaDemangled : mangledName;
    66 #else
    67     UNUSED_PARAM(address);
    68     return "<unknown>";
    69 #endif
    70 }
    7149
    7250// Helper function, truncate traces to prune the output & make very verbose mode a little more readable.
     
    168146            --lastEngineFrame;
    169147            ASSERT(m_samples[lastEngineFrame].type == EngineFrame);
    170             const char* name = symbolName(m_samples[lastEngineFrame].pc);
     148            const char* name = "<unknown>";
     149            auto demangled = StackTrace::demangle(m_samples[lastEngineFrame].pc);
     150            if (demangled)
     151                name = demangled->demangledName() ? demangled->demangledName() : demangled->mangledName();
    171152            callbacks = callbacks->sampleChild(name);
    172153            if (truncateTrace(name))
Note: See TracChangeset for help on using the changeset viewer.