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()):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp

    r215671 r215715  
    4949#include <wtf/HashSet.h>
    5050#include <wtf/RefPtr.h>
     51#include <wtf/StackTrace.h>
    5152#include <wtf/text/StringBuilder.h>
    52 
    53 #if OS(DARWIN) || OS(LINUX)
    54 #include <cxxabi.h>
    55 #include <dlfcn.h>
    56 #endif
    5753
    5854namespace JSC {
     
    751747
    752748    if (frameType == FrameType::Unknown || frameType == FrameType::C) {
    753 #if OS(DARWIN) || OS(LINUX)
     749#if HAVE(DLADDR)
    754750        if (frameType == FrameType::C) {
    755             const char* mangledName = nullptr;
    756             const char* cxaDemangled = nullptr;
    757             Dl_info info;
    758             if (dladdr(cCodePC, &info) && info.dli_sname)
    759                 mangledName = info.dli_sname;
    760             if (mangledName) {
    761                 cxaDemangled = abi::__cxa_demangle(mangledName, 0, 0, 0);
    762                 return String(cxaDemangled ? cxaDemangled : mangledName);
    763             }
     751            auto demangled = WTF::StackTrace::demangle(cCodePC);
     752            if (demangled)
     753                return String(demangled->demangledName() ? demangled->demangledName() : demangled->mangledName());
    764754            WTF::dataLog("couldn't get a name");
    765755        }
Note: See TracChangeset for help on using the changeset viewer.