haikuwebkit/Source/WTF/wtf/StackTrace.h

110 lines
3.5 KiB
C
Raw Permalink Normal View History

[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
/*
* Copyright (C) 2017 Apple Inc. All rights reserved.
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
* Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
Remove <wtf/Optional.h> https://bugs.webkit.org/show_bug.cgi?id=226437 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Remove include of <wtf/Optional.h>. * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py: (CppBackendDispatcherHeaderGenerator._generate_secondary_header_includes): Don't generate an include of wtf/Optional.h; including WTFString.h takes care of this anyway. * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py: (CppFrontendDispatcherHeaderGenerator._generate_secondary_header_includes): Ditto. * inspector/scripts/codegen/generate_cpp_protocol_types_header.py: (CppProtocolTypesHeaderGenerator._generate_secondary_header_includes): Ditto. * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py: (CppProtocolTypesImplementationGenerator.generate_output): Generate an include of <optional> instead of <wtf/Optional.h>. * inspector/scripts/tests/expected/*: Regenerate. Source/WebCore: * <many files>: Removed include of <wtf/Optional.h>. * platform/graphics/Font.h: Tweaked style a bit. * Modules/geolocation/GeolocationClient.h: Added include of <optional>. * Modules/mediastream/DoubleRange.h: Ditto. * Modules/mediastream/LongRange.h: Ditto. * Modules/webauthn/AuthenticationExtensionsClientOutputs.h: Ditto. * css/CSSToLengthConversionData.h: Ditto. * css/DOMMatrix2DInit.h: Ditto. * dom/AddEventListenerOptions.h: Ditto. * dom/DeviceMotionData.h: Ditto. * dom/DeviceOrientationData.h: Ditto. * dom/SuccessOr.h: Ditto. * html/DateTimeFieldsState.h: Ditto. * html/ImageBitmapOptions.h: Ditto. * html/canvas/PredefinedColorSpace.h: Ditto. * layout/LayoutPhase.h: Ditto. * layout/MarginTypes.h: Ditto. * loader/ResourceLoadNotifier.h: Ditto. * page/RuntimeEnabledFeatures.h: Ditto. * page/ScrollOptions.h: Ditto. * platform/MediaCapabilitiesInfo.h: Ditto. * platform/cocoa/SystemBattery.h: Ditto. * platform/graphics/DecodingOptions.h: Ditto. * platform/graphics/DestinationColorSpace.h: Ditto. * platform/graphics/DisplayRefreshMonitorClient.h: Ditto. * platform/graphics/FloatLine.h: Ditto. * platform/graphics/gpu/GPURequestAdapterOptions.h: Ditto. * platform/graphics/x11/PlatformDisplayX11.h: Ditto. * platform/ios/SelectionGeometry.h: Ditto. * platform/mac/NSScrollerImpDetails.h: Ditto. * platform/network/DNS.h: Ditto. * platform/text/EncodingTables.h: Ditto. * platform/text/TextCodecCJK.h: Ditto. * platform/text/TextCodecUTF16.h: Ditto. * platform/text/TextFlags.h: Ditto. Source/WebCore/PAL: * pal/SessionID.h: Include <optional>. * pal/crypto/gcrypt/Utilities.h: Ditto. * pal/crypto/tasn1/Utilities.cpp: Removed include of <wtf/Optional.h>. Source/WebDriver: * SessionHost.h: Removed include of <wtf/Optional.h>. Source/WebKit: * <many files>: Removed include of <wtf/Optional.h>. Source/WebKitLegacy/mac: * DOM/DOMRangeInternal.h: Added import of <optional>. * WebView/WebGeolocationPosition.mm: Removed import of <wtf/Optional.h>. * WebView/WebGeolocationPositionInternal.h: Added import of <optional>. Source/WTF: * <many files>: Removed include of <wtf/Optional.h>. * WTF.xcodeproj/project.pbxproj: Removed Optional.h. * wtf/Markable.h: Added include of <optional>. * wtf/OptionSet.h: Ditto. * wtf/Optional.h: Emptied this file. On the Windows build system, we can't seem to build successfully without an empty file here. The copied forwarding header seems to linger even if we remove the original. Until we fix the Windows build system, if we want to support incremental builds, we need to keep this empty file around. * wtf/PrintStream.h: Added include of <optional>. * wtf/Seconds.h: Ditto. * wtf/StackTrace.h: Ditto. * wtf/StdLibExtras.h: Moved the valueOrCompute function here from Optional.h. Re-sorted the "using" at the bottom of the file. * wtf/URLHelpers.h: Added include of <optional>. * wtf/Vector.h: Ditto. Tools: * <many files>: Removed include of <wtf/Optional.h>. Canonical link: https://commits.webkit.org/238372@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278340 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-02 06:45:51 +00:00
#include <optional>
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
#include <wtf/SystemFree.h>
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
namespace WTF {
class PrintStream;
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
class StackTrace {
WTF_MAKE_FAST_ALLOCATED;
public:
WTF_EXPORT_PRIVATE static std::unique_ptr<StackTrace> captureStackTrace(int maxFrames, int framesToSkip = 0);
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
// Borrowed stack trace.
StackTrace(void** stack, int size, const char* prefix = "")
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
: m_size(size)
, m_capacity(0)
, m_borrowedStack(stack)
, m_prefix(prefix)
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
{ }
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
int size() const { return m_size; }
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
void* const * stack() const
{
if (!m_capacity)
return m_borrowedStack;
return m_stack;
}
class DemangleEntry {
[WTF][JSC] Make JSC and WTF aggressively-fast-malloced https://bugs.webkit.org/show_bug.cgi?id=200611 Reviewed by Saam Barati. Source/JavaScriptCore: This patch aggressively puts many classes into FastMalloc. In JSC side, we grep `std::make_unique` etc. to find potentially system-malloc-allocated classes. After this patch, all the JSC related allocations in JetStream2 cli is done from bmalloc. In the future, it would be nice that we add `WTF::makeUnique<T>` helper function and throw a compile error if `T` is not FastMalloc annotated[1]. Putting WebKit classes in FastMalloc has many benefits. 1. Simply, it is fast. 2. vmmap can tell the amount of memory used for WebKit. 3. bmalloc can isolate WebKit memory allocation from the rest of the world. This is useful since we can know more about what component is corrupting the memory from the memory corruption crash. [1]: https://bugs.webkit.org/show_bug.cgi?id=200620 * API/ObjCCallbackFunction.mm: * assembler/AbstractMacroAssembler.h: * b3/B3PhiChildren.h: * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h: * b3/air/AirDisassembler.h: * bytecode/AccessCaseSnippetParams.h: * bytecode/CallVariant.h: * bytecode/DeferredSourceDump.h: * bytecode/ExecutionCounter.h: * bytecode/GetByIdStatus.h: * bytecode/GetByIdVariant.h: * bytecode/InByIdStatus.h: * bytecode/InByIdVariant.h: * bytecode/InstanceOfStatus.h: * bytecode/InstanceOfVariant.h: * bytecode/PutByIdStatus.h: * bytecode/PutByIdVariant.h: * bytecode/ValueProfile.h: * dfg/DFGAbstractInterpreter.h: * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::newVariableAccessData): * dfg/DFGFlowIndexing.h: * dfg/DFGFlowMap.h: * dfg/DFGLiveCatchVariablePreservationPhase.cpp: (JSC::DFG::LiveCatchVariablePreservationPhase::newVariableAccessData): * dfg/DFGMaximalFlushInsertionPhase.cpp: (JSC::DFG::MaximalFlushInsertionPhase::newVariableAccessData): * dfg/DFGOSRExit.h: * dfg/DFGSpeculativeJIT.h: * dfg/DFGVariableAccessData.h: * disassembler/ARM64/A64DOpcode.h: * inspector/remote/socket/RemoteInspectorMessageParser.h: * inspector/remote/socket/RemoteInspectorSocket.h: * inspector/remote/socket/RemoteInspectorSocketEndpoint.h: * jit/PCToCodeOriginMap.h: * runtime/BasicBlockLocation.h: * runtime/DoublePredictionFuzzerAgent.h: * runtime/JSRunLoopTimer.h: * runtime/PromiseDeferredTimer.h: (JSC::PromiseDeferredTimer::create): PromiseDeferredTimer should be allocated as `Ref<>` instead of `std::unique_ptr` since it is inheriting ThreadSafeRefCounted<>. Holding such a class with std::unique_ptr could lead to potentially dangerous operations (like, someone holds it with Ref<> while it is deleted by std::unique_ptr<>). * runtime/RandomizingFuzzerAgent.h: * runtime/SymbolTable.h: * runtime/VM.cpp: (JSC::VM::VM): * runtime/VM.h: * tools/JSDollarVM.cpp: * tools/SigillCrashAnalyzer.cpp: * wasm/WasmFormat.h: * wasm/WasmMemory.cpp: * wasm/WasmSignature.h: * yarr/YarrJIT.h: Source/WebCore: Changed the accessor since we changed std::unique_ptr to Ref for this field. No behavior change. * bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::addTimerSetNotification): (WebCore::WorkerScriptController::removeTimerSetNotification): Source/WTF: WTF has many data structures, in particular, containers. And these containers can be allocated like `std::make_unique<Container>()`. Without WTF_MAKE_FAST_ALLOCATED, this container itself is allocated from the system malloc. This patch attaches WTF_MAKE_FAST_ALLOCATED more aggressively not to allocate them from the system malloc. And we add some `final` to containers and classes that would be never inherited. * wtf/Assertions.cpp: * wtf/Atomics.h: * wtf/AutodrainedPool.h: * wtf/Bag.h: (WTF::Bag::Bag): Deleted. (WTF::Bag::~Bag): Deleted. (WTF::Bag::clear): Deleted. (WTF::Bag::add): Deleted. (WTF::Bag::iterator::iterator): Deleted. (WTF::Bag::iterator::operator! const): Deleted. (WTF::Bag::iterator::operator* const): Deleted. (WTF::Bag::iterator::operator++): Deleted. (WTF::Bag::iterator::operator== const): Deleted. (WTF::Bag::iterator::operator!= const): Deleted. (WTF::Bag::begin): Deleted. (WTF::Bag::begin const): Deleted. (WTF::Bag::end const): Deleted. (WTF::Bag::isEmpty const): Deleted. (WTF::Bag::unwrappedHead const): Deleted. * wtf/BitVector.h: (WTF::BitVector::BitVector): Deleted. (WTF::BitVector::~BitVector): Deleted. (WTF::BitVector::operator=): Deleted. (WTF::BitVector::size const): Deleted. (WTF::BitVector::ensureSize): Deleted. (WTF::BitVector::quickGet const): Deleted. (WTF::BitVector::quickSet): Deleted. (WTF::BitVector::quickClear): Deleted. (WTF::BitVector::get const): Deleted. (WTF::BitVector::contains const): Deleted. (WTF::BitVector::set): Deleted. (WTF::BitVector::add): Deleted. (WTF::BitVector::ensureSizeAndSet): Deleted. (WTF::BitVector::clear): Deleted. (WTF::BitVector::remove): Deleted. (WTF::BitVector::merge): Deleted. (WTF::BitVector::filter): Deleted. (WTF::BitVector::exclude): Deleted. (WTF::BitVector::bitCount const): Deleted. (WTF::BitVector::isEmpty const): Deleted. (WTF::BitVector::findBit const): Deleted. (WTF::BitVector::isEmptyValue const): Deleted. (WTF::BitVector::isDeletedValue const): Deleted. (WTF::BitVector::isEmptyOrDeletedValue const): Deleted. (WTF::BitVector::operator== const): Deleted. (WTF::BitVector::hash const): Deleted. (WTF::BitVector::iterator::iterator): Deleted. (WTF::BitVector::iterator::operator* const): Deleted. (WTF::BitVector::iterator::operator++): Deleted. (WTF::BitVector::iterator::isAtEnd const): Deleted. (WTF::BitVector::iterator::operator== const): Deleted. (WTF::BitVector::iterator::operator!= const): Deleted. (WTF::BitVector::begin const): Deleted. (WTF::BitVector::end const): Deleted. (WTF::BitVector::bitsInPointer): Deleted. (WTF::BitVector::maxInlineBits): Deleted. (WTF::BitVector::byteCount): Deleted. (WTF::BitVector::makeInlineBits): Deleted. (WTF::BitVector::cleanseInlineBits): Deleted. (WTF::BitVector::bitCount): Deleted. (WTF::BitVector::findBitFast const): Deleted. (WTF::BitVector::findBitSimple const): Deleted. (WTF::BitVector::OutOfLineBits::numBits const): Deleted. (WTF::BitVector::OutOfLineBits::numWords const): Deleted. (WTF::BitVector::OutOfLineBits::bits): Deleted. (WTF::BitVector::OutOfLineBits::bits const): Deleted. (WTF::BitVector::OutOfLineBits::OutOfLineBits): Deleted. (WTF::BitVector::isInline const): Deleted. (WTF::BitVector::outOfLineBits const): Deleted. (WTF::BitVector::outOfLineBits): Deleted. (WTF::BitVector::bits): Deleted. (WTF::BitVector::bits const): Deleted. * wtf/Bitmap.h: (WTF::Bitmap::size): Deleted. (WTF::Bitmap::iterator::iterator): Deleted. (WTF::Bitmap::iterator::operator* const): Deleted. (WTF::Bitmap::iterator::operator++): Deleted. (WTF::Bitmap::iterator::operator== const): Deleted. (WTF::Bitmap::iterator::operator!= const): Deleted. (WTF::Bitmap::begin const): Deleted. (WTF::Bitmap::end const): Deleted. * wtf/Box.h: * wtf/BumpPointerAllocator.h: * wtf/CPUTime.h: * wtf/CheckedBoolean.h: * wtf/CommaPrinter.h: (WTF::CommaPrinter::CommaPrinter): Deleted. (WTF::CommaPrinter::dump const): Deleted. (WTF::CommaPrinter::didPrint const): Deleted. * wtf/CompactPointerTuple.h: (WTF::CompactPointerTuple::encodeType): Deleted. (WTF::CompactPointerTuple::decodeType): Deleted. (WTF::CompactPointerTuple::CompactPointerTuple): Deleted. (WTF::CompactPointerTuple::pointer const): Deleted. (WTF::CompactPointerTuple::setPointer): Deleted. (WTF::CompactPointerTuple::type const): Deleted. (WTF::CompactPointerTuple::setType): Deleted. * wtf/CompilationThread.h: (WTF::CompilationScope::CompilationScope): Deleted. (WTF::CompilationScope::~CompilationScope): Deleted. (WTF::CompilationScope::leaveEarly): Deleted. * wtf/CompletionHandler.h: (WTF::CompletionHandler<Out): (WTF::Detail::CallableWrapper<CompletionHandler<Out): (WTF::CompletionHandlerCallingScope::CompletionHandlerCallingScope): Deleted. (WTF::CompletionHandlerCallingScope::~CompletionHandlerCallingScope): Deleted. (WTF::CompletionHandlerCallingScope::CompletionHandler<void): Deleted. * wtf/ConcurrentBuffer.h: (WTF::ConcurrentBuffer::ConcurrentBuffer): Deleted. (WTF::ConcurrentBuffer::~ConcurrentBuffer): Deleted. (WTF::ConcurrentBuffer::growExact): Deleted. (WTF::ConcurrentBuffer::grow): Deleted. (WTF::ConcurrentBuffer::array const): Deleted. (WTF::ConcurrentBuffer::operator[]): Deleted. (WTF::ConcurrentBuffer::operator[] const): Deleted. (WTF::ConcurrentBuffer::createArray): Deleted. * wtf/ConcurrentPtrHashSet.h: (WTF::ConcurrentPtrHashSet::contains): Deleted. (WTF::ConcurrentPtrHashSet::add): Deleted. (WTF::ConcurrentPtrHashSet::size const): Deleted. (WTF::ConcurrentPtrHashSet::Table::maxLoad const): Deleted. (WTF::ConcurrentPtrHashSet::hash): Deleted. (WTF::ConcurrentPtrHashSet::cast): Deleted. (WTF::ConcurrentPtrHashSet::containsImpl const): Deleted. (WTF::ConcurrentPtrHashSet::addImpl): Deleted. * wtf/ConcurrentVector.h: (WTF::ConcurrentVector::~ConcurrentVector): Deleted. (WTF::ConcurrentVector::size const): Deleted. (WTF::ConcurrentVector::isEmpty const): Deleted. (WTF::ConcurrentVector::at): Deleted. (WTF::ConcurrentVector::at const): Deleted. (WTF::ConcurrentVector::operator[]): Deleted. (WTF::ConcurrentVector::operator[] const): Deleted. (WTF::ConcurrentVector::first): Deleted. (WTF::ConcurrentVector::first const): Deleted. (WTF::ConcurrentVector::last): Deleted. (WTF::ConcurrentVector::last const): Deleted. (WTF::ConcurrentVector::takeLast): Deleted. (WTF::ConcurrentVector::append): Deleted. (WTF::ConcurrentVector::alloc): Deleted. (WTF::ConcurrentVector::removeLast): Deleted. (WTF::ConcurrentVector::grow): Deleted. (WTF::ConcurrentVector::begin): Deleted. (WTF::ConcurrentVector::end): Deleted. (WTF::ConcurrentVector::segmentExistsFor): Deleted. (WTF::ConcurrentVector::segmentFor): Deleted. (WTF::ConcurrentVector::subscriptFor): Deleted. (WTF::ConcurrentVector::ensureSegmentsFor): Deleted. (WTF::ConcurrentVector::ensureSegment): Deleted. (WTF::ConcurrentVector::allocateSegment): Deleted. * wtf/Condition.h: (WTF::Condition::waitUntil): Deleted. (WTF::Condition::waitFor): Deleted. (WTF::Condition::wait): Deleted. (WTF::Condition::notifyOne): Deleted. (WTF::Condition::notifyAll): Deleted. * wtf/CountingLock.h: (WTF::CountingLock::LockHooks::lockHook): Deleted. (WTF::CountingLock::LockHooks::unlockHook): Deleted. (WTF::CountingLock::LockHooks::parkHook): Deleted. (WTF::CountingLock::LockHooks::handoffHook): Deleted. (WTF::CountingLock::tryLock): Deleted. (WTF::CountingLock::lock): Deleted. (WTF::CountingLock::unlock): Deleted. (WTF::CountingLock::isHeld const): Deleted. (WTF::CountingLock::isLocked const): Deleted. (WTF::CountingLock::Count::operator bool const): Deleted. (WTF::CountingLock::Count::operator== const): Deleted. (WTF::CountingLock::Count::operator!= const): Deleted. (WTF::CountingLock::tryOptimisticRead): Deleted. (WTF::CountingLock::validate): Deleted. (WTF::CountingLock::doOptimizedRead): Deleted. (WTF::CountingLock::tryOptimisticFencelessRead): Deleted. (WTF::CountingLock::fencelessValidate): Deleted. (WTF::CountingLock::doOptimizedFencelessRead): Deleted. (WTF::CountingLock::getCount): Deleted. * wtf/CrossThreadQueue.h: * wtf/CrossThreadTask.h: * wtf/CryptographicallyRandomNumber.cpp: * wtf/DataMutex.h: * wtf/DateMath.h: * wtf/Deque.h: (WTF::Deque::size const): Deleted. (WTF::Deque::isEmpty const): Deleted. (WTF::Deque::begin): Deleted. (WTF::Deque::end): Deleted. (WTF::Deque::begin const): Deleted. (WTF::Deque::end const): Deleted. (WTF::Deque::rbegin): Deleted. (WTF::Deque::rend): Deleted. (WTF::Deque::rbegin const): Deleted. (WTF::Deque::rend const): Deleted. (WTF::Deque::first): Deleted. (WTF::Deque::first const): Deleted. (WTF::Deque::last): Deleted. (WTF::Deque::last const): Deleted. (WTF::Deque::append): Deleted. * wtf/Dominators.h: * wtf/DoublyLinkedList.h: * wtf/Expected.h: * wtf/FastBitVector.h: * wtf/FileMetadata.h: * wtf/FileSystem.h: * wtf/GraphNodeWorklist.h: * wtf/GregorianDateTime.h: (WTF::GregorianDateTime::GregorianDateTime): Deleted. (WTF::GregorianDateTime::year const): Deleted. (WTF::GregorianDateTime::month const): Deleted. (WTF::GregorianDateTime::yearDay const): Deleted. (WTF::GregorianDateTime::monthDay const): Deleted. (WTF::GregorianDateTime::weekDay const): Deleted. (WTF::GregorianDateTime::hour const): Deleted. (WTF::GregorianDateTime::minute const): Deleted. (WTF::GregorianDateTime::second const): Deleted. (WTF::GregorianDateTime::utcOffset const): Deleted. (WTF::GregorianDateTime::isDST const): Deleted. (WTF::GregorianDateTime::setYear): Deleted. (WTF::GregorianDateTime::setMonth): Deleted. (WTF::GregorianDateTime::setYearDay): Deleted. (WTF::GregorianDateTime::setMonthDay): Deleted. (WTF::GregorianDateTime::setWeekDay): Deleted. (WTF::GregorianDateTime::setHour): Deleted. (WTF::GregorianDateTime::setMinute): Deleted. (WTF::GregorianDateTime::setSecond): Deleted. (WTF::GregorianDateTime::setUtcOffset): Deleted. (WTF::GregorianDateTime::setIsDST): Deleted. (WTF::GregorianDateTime::operator tm const): Deleted. (WTF::GregorianDateTime::copyFrom): Deleted. * wtf/HashTable.h: * wtf/Hasher.h: * wtf/HexNumber.h: * wtf/Indenter.h: * wtf/IndexMap.h: * wtf/IndexSet.h: * wtf/IndexSparseSet.h: * wtf/IndexedContainerIterator.h: * wtf/Insertion.h: * wtf/IteratorAdaptors.h: * wtf/IteratorRange.h: * wtf/KeyValuePair.h: * wtf/ListHashSet.h: (WTF::ListHashSet::begin): Deleted. (WTF::ListHashSet::end): Deleted. (WTF::ListHashSet::begin const): Deleted. (WTF::ListHashSet::end const): Deleted. (WTF::ListHashSet::random): Deleted. (WTF::ListHashSet::random const): Deleted. (WTF::ListHashSet::rbegin): Deleted. (WTF::ListHashSet::rend): Deleted. (WTF::ListHashSet::rbegin const): Deleted. (WTF::ListHashSet::rend const): Deleted. * wtf/Liveness.h: * wtf/LocklessBag.h: (WTF::LocklessBag::LocklessBag): Deleted. (WTF::LocklessBag::add): Deleted. (WTF::LocklessBag::iterate): Deleted. (WTF::LocklessBag::consumeAll): Deleted. (WTF::LocklessBag::consumeAllWithNode): Deleted. (WTF::LocklessBag::~LocklessBag): Deleted. * wtf/LoggingHashID.h: * wtf/MD5.h: * wtf/MachSendRight.h: * wtf/MainThreadData.h: * wtf/Markable.h: * wtf/MediaTime.h: * wtf/MemoryPressureHandler.h: * wtf/MessageQueue.h: (WTF::MessageQueue::MessageQueue): Deleted. * wtf/MetaAllocator.h: * wtf/MonotonicTime.h: (WTF::MonotonicTime::MonotonicTime): Deleted. (WTF::MonotonicTime::fromRawSeconds): Deleted. (WTF::MonotonicTime::infinity): Deleted. (WTF::MonotonicTime::nan): Deleted. (WTF::MonotonicTime::secondsSinceEpoch const): Deleted. (WTF::MonotonicTime::approximateMonotonicTime const): Deleted. (WTF::MonotonicTime::operator bool const): Deleted. (WTF::MonotonicTime::operator+ const): Deleted. (WTF::MonotonicTime::operator- const): Deleted. (WTF::MonotonicTime::operator% const): Deleted. (WTF::MonotonicTime::operator+=): Deleted. (WTF::MonotonicTime::operator-=): Deleted. (WTF::MonotonicTime::operator== const): Deleted. (WTF::MonotonicTime::operator!= const): Deleted. (WTF::MonotonicTime::operator< const): Deleted. (WTF::MonotonicTime::operator> const): Deleted. (WTF::MonotonicTime::operator<= const): Deleted. (WTF::MonotonicTime::operator>= const): Deleted. (WTF::MonotonicTime::isolatedCopy const): Deleted. (WTF::MonotonicTime::encode const): Deleted. (WTF::MonotonicTime::decode): Deleted. * wtf/NaturalLoops.h: * wtf/NoLock.h: * wtf/OSAllocator.h: * wtf/OptionSet.h: * wtf/Optional.h: * wtf/OrderMaker.h: * wtf/Packed.h: (WTF::alignof): * wtf/PackedIntVector.h: (WTF::PackedIntVector::PackedIntVector): Deleted. (WTF::PackedIntVector::operator=): Deleted. (WTF::PackedIntVector::size const): Deleted. (WTF::PackedIntVector::ensureSize): Deleted. (WTF::PackedIntVector::resize): Deleted. (WTF::PackedIntVector::clearAll): Deleted. (WTF::PackedIntVector::get const): Deleted. (WTF::PackedIntVector::set): Deleted. (WTF::PackedIntVector::mask): Deleted. * wtf/PageBlock.h: * wtf/ParallelJobsOpenMP.h: * wtf/ParkingLot.h: * wtf/PriorityQueue.h: (WTF::PriorityQueue::size const): Deleted. (WTF::PriorityQueue::isEmpty const): Deleted. (WTF::PriorityQueue::enqueue): Deleted. (WTF::PriorityQueue::peek const): Deleted. (WTF::PriorityQueue::dequeue): Deleted. (WTF::PriorityQueue::decreaseKey): Deleted. (WTF::PriorityQueue::increaseKey): Deleted. (WTF::PriorityQueue::begin const): Deleted. (WTF::PriorityQueue::end const): Deleted. (WTF::PriorityQueue::isValidHeap const): Deleted. (WTF::PriorityQueue::parentOf): Deleted. (WTF::PriorityQueue::leftChildOf): Deleted. (WTF::PriorityQueue::rightChildOf): Deleted. (WTF::PriorityQueue::siftUp): Deleted. (WTF::PriorityQueue::siftDown): Deleted. * wtf/RandomDevice.h: * wtf/Range.h: * wtf/RangeSet.h: (WTF::RangeSet::RangeSet): Deleted. (WTF::RangeSet::~RangeSet): Deleted. (WTF::RangeSet::add): Deleted. (WTF::RangeSet::contains const): Deleted. (WTF::RangeSet::overlaps const): Deleted. (WTF::RangeSet::clear): Deleted. (WTF::RangeSet::dump const): Deleted. (WTF::RangeSet::dumpRaw const): Deleted. (WTF::RangeSet::begin const): Deleted. (WTF::RangeSet::end const): Deleted. (WTF::RangeSet::addAll): Deleted. (WTF::RangeSet::compact): Deleted. (WTF::RangeSet::overlapsNonEmpty): Deleted. (WTF::RangeSet::subsumesNonEmpty): Deleted. (WTF::RangeSet::findRange const): Deleted. * wtf/RecursableLambda.h: * wtf/RedBlackTree.h: (WTF::RedBlackTree::Node::successor const): Deleted. (WTF::RedBlackTree::Node::predecessor const): Deleted. (WTF::RedBlackTree::Node::successor): Deleted. (WTF::RedBlackTree::Node::predecessor): Deleted. (WTF::RedBlackTree::Node::reset): Deleted. (WTF::RedBlackTree::Node::parent const): Deleted. (WTF::RedBlackTree::Node::setParent): Deleted. (WTF::RedBlackTree::Node::left const): Deleted. (WTF::RedBlackTree::Node::setLeft): Deleted. (WTF::RedBlackTree::Node::right const): Deleted. (WTF::RedBlackTree::Node::setRight): Deleted. (WTF::RedBlackTree::Node::color const): Deleted. (WTF::RedBlackTree::Node::setColor): Deleted. (WTF::RedBlackTree::RedBlackTree): Deleted. (WTF::RedBlackTree::insert): Deleted. (WTF::RedBlackTree::remove): Deleted. (WTF::RedBlackTree::findExact const): Deleted. (WTF::RedBlackTree::findLeastGreaterThanOrEqual const): Deleted. (WTF::RedBlackTree::findGreatestLessThanOrEqual const): Deleted. (WTF::RedBlackTree::first const): Deleted. (WTF::RedBlackTree::last const): Deleted. (WTF::RedBlackTree::size): Deleted. (WTF::RedBlackTree::isEmpty): Deleted. (WTF::RedBlackTree::treeMinimum): Deleted. (WTF::RedBlackTree::treeMaximum): Deleted. (WTF::RedBlackTree::treeInsert): Deleted. (WTF::RedBlackTree::leftRotate): Deleted. (WTF::RedBlackTree::rightRotate): Deleted. (WTF::RedBlackTree::removeFixup): Deleted. * wtf/ResourceUsage.h: * wtf/RunLoop.cpp: * wtf/RunLoopTimer.h: * wtf/SHA1.h: * wtf/Seconds.h: (WTF::Seconds::Seconds): Deleted. (WTF::Seconds::value const): Deleted. (WTF::Seconds::minutes const): Deleted. (WTF::Seconds::seconds const): Deleted. (WTF::Seconds::milliseconds const): Deleted. (WTF::Seconds::microseconds const): Deleted. (WTF::Seconds::nanoseconds const): Deleted. (WTF::Seconds::minutesAs const): Deleted. (WTF::Seconds::secondsAs const): Deleted. (WTF::Seconds::millisecondsAs const): Deleted. (WTF::Seconds::microsecondsAs const): Deleted. (WTF::Seconds::nanosecondsAs const): Deleted. (WTF::Seconds::fromMinutes): Deleted. (WTF::Seconds::fromHours): Deleted. (WTF::Seconds::fromMilliseconds): Deleted. (WTF::Seconds::fromMicroseconds): Deleted. (WTF::Seconds::fromNanoseconds): Deleted. (WTF::Seconds::infinity): Deleted. (WTF::Seconds::nan): Deleted. (WTF::Seconds::operator bool const): Deleted. (WTF::Seconds::operator+ const): Deleted. (WTF::Seconds::operator- const): Deleted. (WTF::Seconds::operator* const): Deleted. (WTF::Seconds::operator/ const): Deleted. (WTF::Seconds::operator% const): Deleted. (WTF::Seconds::operator+=): Deleted. (WTF::Seconds::operator-=): Deleted. (WTF::Seconds::operator*=): Deleted. (WTF::Seconds::operator/=): Deleted. (WTF::Seconds::operator%=): Deleted. (WTF::Seconds::operator== const): Deleted. (WTF::Seconds::operator!= const): Deleted. (WTF::Seconds::operator< const): Deleted. (WTF::Seconds::operator> const): Deleted. (WTF::Seconds::operator<= const): Deleted. (WTF::Seconds::operator>= const): Deleted. (WTF::Seconds::isolatedCopy const): Deleted. (WTF::Seconds::encode const): Deleted. (WTF::Seconds::decode): Deleted. * wtf/SegmentedVector.h: (WTF::SegmentedVector::~SegmentedVector): Deleted. (WTF::SegmentedVector::size const): Deleted. (WTF::SegmentedVector::isEmpty const): Deleted. (WTF::SegmentedVector::at): Deleted. (WTF::SegmentedVector::at const): Deleted. (WTF::SegmentedVector::operator[]): Deleted. (WTF::SegmentedVector::operator[] const): Deleted. (WTF::SegmentedVector::first): Deleted. (WTF::SegmentedVector::first const): Deleted. (WTF::SegmentedVector::last): Deleted. (WTF::SegmentedVector::last const): Deleted. (WTF::SegmentedVector::takeLast): Deleted. (WTF::SegmentedVector::append): Deleted. (WTF::SegmentedVector::alloc): Deleted. (WTF::SegmentedVector::removeLast): Deleted. (WTF::SegmentedVector::grow): Deleted. (WTF::SegmentedVector::clear): Deleted. (WTF::SegmentedVector::begin): Deleted. (WTF::SegmentedVector::end): Deleted. (WTF::SegmentedVector::shrinkToFit): Deleted. (WTF::SegmentedVector::deleteAllSegments): Deleted. (WTF::SegmentedVector::segmentExistsFor): Deleted. (WTF::SegmentedVector::segmentFor): Deleted. (WTF::SegmentedVector::subscriptFor): Deleted. (WTF::SegmentedVector::ensureSegmentsFor): Deleted. (WTF::SegmentedVector::ensureSegment): Deleted. (WTF::SegmentedVector::allocateSegment): Deleted. * wtf/SetForScope.h: * wtf/SingleRootGraph.h: * wtf/SinglyLinkedList.h: * wtf/SmallPtrSet.h: * wtf/SpanningTree.h: * wtf/Spectrum.h: * wtf/StackBounds.h: * wtf/StackShot.h: * wtf/StackShotProfiler.h: * wtf/StackStats.h: * wtf/StackTrace.h: * wtf/StreamBuffer.h: * wtf/SynchronizedFixedQueue.h: (WTF::SynchronizedFixedQueue::create): Deleted. (WTF::SynchronizedFixedQueue::open): Deleted. (WTF::SynchronizedFixedQueue::close): Deleted. (WTF::SynchronizedFixedQueue::isOpen): Deleted. (WTF::SynchronizedFixedQueue::enqueue): Deleted. (WTF::SynchronizedFixedQueue::dequeue): Deleted. (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue): Deleted. * wtf/SystemTracing.h: * wtf/ThreadGroup.h: (WTF::ThreadGroup::create): Deleted. (WTF::ThreadGroup::threads const): Deleted. (WTF::ThreadGroup::getLock): Deleted. (WTF::ThreadGroup::weakFromThis): Deleted. * wtf/ThreadSpecific.h: * wtf/ThreadingPrimitives.h: (WTF::Mutex::impl): Deleted. * wtf/TimeWithDynamicClockType.h: (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType): Deleted. (WTF::TimeWithDynamicClockType::fromRawSeconds): Deleted. (WTF::TimeWithDynamicClockType::secondsSinceEpoch const): Deleted. (WTF::TimeWithDynamicClockType::clockType const): Deleted. (WTF::TimeWithDynamicClockType::withSameClockAndRawSeconds const): Deleted. (WTF::TimeWithDynamicClockType::operator bool const): Deleted. (WTF::TimeWithDynamicClockType::operator+ const): Deleted. (WTF::TimeWithDynamicClockType::operator- const): Deleted. (WTF::TimeWithDynamicClockType::operator+=): Deleted. (WTF::TimeWithDynamicClockType::operator-=): Deleted. (WTF::TimeWithDynamicClockType::operator== const): Deleted. (WTF::TimeWithDynamicClockType::operator!= const): Deleted. * wtf/TimingScope.h: * wtf/TinyLRUCache.h: * wtf/TinyPtrSet.h: * wtf/URLParser.cpp: * wtf/URLParser.h: * wtf/Unexpected.h: * wtf/Variant.h: * wtf/WTFSemaphore.h: (WTF::Semaphore::Semaphore): Deleted. (WTF::Semaphore::signal): Deleted. (WTF::Semaphore::waitUntil): Deleted. (WTF::Semaphore::waitFor): Deleted. (WTF::Semaphore::wait): Deleted. * wtf/WallTime.h: (WTF::WallTime::WallTime): Deleted. (WTF::WallTime::fromRawSeconds): Deleted. (WTF::WallTime::infinity): Deleted. (WTF::WallTime::nan): Deleted. (WTF::WallTime::secondsSinceEpoch const): Deleted. (WTF::WallTime::approximateWallTime const): Deleted. (WTF::WallTime::operator bool const): Deleted. (WTF::WallTime::operator+ const): Deleted. (WTF::WallTime::operator- const): Deleted. (WTF::WallTime::operator+=): Deleted. (WTF::WallTime::operator-=): Deleted. (WTF::WallTime::operator== const): Deleted. (WTF::WallTime::operator!= const): Deleted. (WTF::WallTime::operator< const): Deleted. (WTF::WallTime::operator> const): Deleted. (WTF::WallTime::operator<= const): Deleted. (WTF::WallTime::operator>= const): Deleted. (WTF::WallTime::isolatedCopy const): Deleted. * wtf/WeakHashSet.h: (WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::get const): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::operator* const): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::operator-> const): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::operator++): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::operator== const): Deleted. (WTF::WeakHashSet::WeakHashSetConstIterator::operator!= const): Deleted. (WTF::WeakHashSet::WeakHashSet): Deleted. (WTF::WeakHashSet::begin const): Deleted. (WTF::WeakHashSet::end const): Deleted. (WTF::WeakHashSet::add): Deleted. (WTF::WeakHashSet::remove): Deleted. (WTF::WeakHashSet::contains const): Deleted. (WTF::WeakHashSet::capacity const): Deleted. (WTF::WeakHashSet::computesEmpty const): Deleted. (WTF::WeakHashSet::hasNullReferences const): Deleted. (WTF::WeakHashSet::computeSize const): Deleted. (WTF::WeakHashSet::checkConsistency const): Deleted. * wtf/WeakRandom.h: (WTF::WeakRandom::WeakRandom): Deleted. (WTF::WeakRandom::setSeed): Deleted. (WTF::WeakRandom::seed const): Deleted. (WTF::WeakRandom::get): Deleted. (WTF::WeakRandom::getUint32): Deleted. (WTF::WeakRandom::lowOffset): Deleted. (WTF::WeakRandom::highOffset): Deleted. (WTF::WeakRandom::nextState): Deleted. (WTF::WeakRandom::generate): Deleted. (WTF::WeakRandom::advance): Deleted. * wtf/WordLock.h: (WTF::WordLock::lock): Deleted. (WTF::WordLock::unlock): Deleted. (WTF::WordLock::isHeld const): Deleted. (WTF::WordLock::isLocked const): Deleted. (WTF::WordLock::isFullyReset const): Deleted. * wtf/generic/MainThreadGeneric.cpp: * wtf/glib/GMutexLocker.h: * wtf/linux/CurrentProcessMemoryStatus.h: * wtf/posix/ThreadingPOSIX.cpp: (WTF::Semaphore::Semaphore): Deleted. (WTF::Semaphore::~Semaphore): Deleted. (WTF::Semaphore::wait): Deleted. (WTF::Semaphore::post): Deleted. * wtf/text/ASCIILiteral.h: (WTF::ASCIILiteral::operator const char* const): Deleted. (WTF::ASCIILiteral::fromLiteralUnsafe): Deleted. (WTF::ASCIILiteral::null): Deleted. (WTF::ASCIILiteral::characters const): Deleted. (WTF::ASCIILiteral::ASCIILiteral): Deleted. * wtf/text/AtomString.h: (WTF::AtomString::operator=): Deleted. (WTF::AtomString::isHashTableDeletedValue const): Deleted. (WTF::AtomString::existingHash const): Deleted. (WTF::AtomString::operator const String& const): Deleted. (WTF::AtomString::string const): Deleted. (WTF::AtomString::impl const): Deleted. (WTF::AtomString::is8Bit const): Deleted. (WTF::AtomString::characters8 const): Deleted. (WTF::AtomString::characters16 const): Deleted. (WTF::AtomString::length const): Deleted. (WTF::AtomString::operator[] const): Deleted. (WTF::AtomString::contains const): Deleted. (WTF::AtomString::containsIgnoringASCIICase const): Deleted. (WTF::AtomString::find const): Deleted. (WTF::AtomString::findIgnoringASCIICase const): Deleted. (WTF::AtomString::startsWith const): Deleted. (WTF::AtomString::startsWithIgnoringASCIICase const): Deleted. (WTF::AtomString::endsWith const): Deleted. (WTF::AtomString::endsWithIgnoringASCIICase const): Deleted. (WTF::AtomString::toInt const): Deleted. (WTF::AtomString::toDouble const): Deleted. (WTF::AtomString::toFloat const): Deleted. (WTF::AtomString::percentage const): Deleted. (WTF::AtomString::isNull const): Deleted. (WTF::AtomString::isEmpty const): Deleted. (WTF::AtomString::operator NSString * const): Deleted. * wtf/text/AtomStringImpl.h: (WTF::AtomStringImpl::lookUp): Deleted. (WTF::AtomStringImpl::add): Deleted. (WTF::AtomStringImpl::addWithStringTableProvider): Deleted. * wtf/text/CString.h: (WTF::CStringBuffer::data): Deleted. (WTF::CStringBuffer::length const): Deleted. (WTF::CStringBuffer::CStringBuffer): Deleted. (WTF::CStringBuffer::mutableData): Deleted. (WTF::CString::CString): Deleted. (WTF::CString::data const): Deleted. (WTF::CString::length const): Deleted. (WTF::CString::isNull const): Deleted. (WTF::CString::buffer const): Deleted. (WTF::CString::isHashTableDeletedValue const): Deleted. * wtf/text/ExternalStringImpl.h: (WTF::ExternalStringImpl::freeExternalBuffer): Deleted. * wtf/text/LineBreakIteratorPoolICU.h: * wtf/text/NullTextBreakIterator.h: * wtf/text/OrdinalNumber.h: * wtf/text/StringBuffer.h: * wtf/text/StringBuilder.h: * wtf/text/StringConcatenateNumbers.h: * wtf/text/StringHasher.h: * wtf/text/StringImpl.h: * wtf/text/StringView.cpp: * wtf/text/StringView.h: (WTF::StringView::left const): Deleted. (WTF::StringView::right const): Deleted. (WTF::StringView::underlyingStringIsValid const): Deleted. (WTF::StringView::setUnderlyingString): Deleted. * wtf/text/SymbolImpl.h: (WTF::SymbolImpl::StaticSymbolImpl::StaticSymbolImpl): Deleted. (WTF::SymbolImpl::StaticSymbolImpl::operator SymbolImpl&): Deleted. (WTF::PrivateSymbolImpl::PrivateSymbolImpl): Deleted. (WTF::RegisteredSymbolImpl::symbolRegistry const): Deleted. (WTF::RegisteredSymbolImpl::clearSymbolRegistry): Deleted. (WTF::RegisteredSymbolImpl::RegisteredSymbolImpl): Deleted. * wtf/text/SymbolRegistry.h: * wtf/text/TextBreakIterator.h: * wtf/text/TextPosition.h: * wtf/text/TextStream.h: * wtf/text/WTFString.h: (WTF::String::swap): Deleted. (WTF::String::adopt): Deleted. (WTF::String::isNull const): Deleted. (WTF::String::isEmpty const): Deleted. (WTF::String::impl const): Deleted. (WTF::String::releaseImpl): Deleted. (WTF::String::length const): Deleted. (WTF::String::characters8 const): Deleted. (WTF::String::characters16 const): Deleted. (WTF::String::is8Bit const): Deleted. (WTF::String::sizeInBytes const): Deleted. (WTF::String::operator[] const): Deleted. (WTF::String::find const): Deleted. (WTF::String::findIgnoringASCIICase const): Deleted. (WTF::String::reverseFind const): Deleted. (WTF::String::contains const): Deleted. (WTF::String::containsIgnoringASCIICase const): Deleted. (WTF::String::startsWith const): Deleted. (WTF::String::startsWithIgnoringASCIICase const): Deleted. (WTF::String::hasInfixStartingAt const): Deleted. (WTF::String::endsWith const): Deleted. (WTF::String::endsWithIgnoringASCIICase const): Deleted. (WTF::String::hasInfixEndingAt const): Deleted. (WTF::String::append): Deleted. (WTF::String::left const): Deleted. (WTF::String::right const): Deleted. (WTF::String::createUninitialized): Deleted. (WTF::String::fromUTF8WithLatin1Fallback): Deleted. (WTF::String::isAllASCII const): Deleted. (WTF::String::isAllLatin1 const): Deleted. (WTF::String::isSpecialCharacter const): Deleted. (WTF::String::isHashTableDeletedValue const): Deleted. (WTF::String::hash const): Deleted. (WTF::String::existingHash const): Deleted. * wtf/text/cf/TextBreakIteratorCF.h: * wtf/text/icu/TextBreakIteratorICU.h: * wtf/text/icu/UTextProviderLatin1.h: * wtf/threads/BinarySemaphore.h: (WTF::BinarySemaphore::waitFor): Deleted. (WTF::BinarySemaphore::wait): Deleted. * wtf/unicode/Collator.h: * wtf/win/GDIObject.h: * wtf/win/PathWalker.h: * wtf/win/Win32Handle.h: Canonical link: https://commits.webkit.org/214396@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248546 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-08-12 20:57:15 +00:00
WTF_MAKE_FAST_ALLOCATED;
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
public:
friend class StackTrace;
const char* mangledName() const { return m_mangledName; }
const char* demangledName() const { return m_demangledName.get(); }
private:
DemangleEntry(const char* mangledName, const char* demangledName)
: m_mangledName(mangledName)
, m_demangledName(demangledName)
{ }
const char* m_mangledName { nullptr };
std::unique_ptr<const char[], SystemFree<const char[]>> m_demangledName;
};
Remove WTF::Optional synonym for std::optional, using that class template directly instead https://bugs.webkit.org/show_bug.cgi?id=226433 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py: (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_payload): Use auto instead of Optional<>. Also use * instead of value() and nest the definition of the local inside an if statement in the case where it's an optional. * inspector/scripts/tests/expected/*: Regenerated these results. Source/WebCore: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebCore/PAL: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebDriver: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKit: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * Scripts/webkit/tests: Regenerated expected results, by running the command "python Scripts/webkit/messages_unittest.py -r". (How am I supposed to know to do that?) Source/WebKitLegacy/ios: * WebCoreSupport/WebChromeClientIOS.h: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKitLegacy/mac: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKitLegacy/win: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WTF: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * wtf/Optional.h: Remove WTF::Optional. Tools: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Canonical link: https://commits.webkit.org/238290@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278253 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-30 16:11:40 +00:00
WTF_EXPORT_PRIVATE static std::optional<DemangleEntry> demangle(void*);
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
Introduce ExceptionScope::assertNoException() and releaseAssertNoException(). https://bugs.webkit.org/show_bug.cgi?id=171776 Reviewed by Keith Miller. Source/JavaScriptCore: Instead of ASSERT(!scope.exception()), we can now do scope.assertNoException(). Ditto for RELEASE_ASSERT and scope.releaseAssertNoException(). The advantage of using ExceptionScope::assertNoException() and releaseAssertNoException() is that if the assertion fails, these utility functions will print the stack trace for where the unexpected exception is detected as well as where the unexpected exception was thrown from. This makes it much easier to debug the source of unhandled exceptions. * debugger/Debugger.cpp: (JSC::Debugger::pauseIfNeeded): * dfg/DFGOperations.cpp: * interpreter/Interpreter.cpp: (JSC::eval): (JSC::notifyDebuggerOfUnwinding): (JSC::Interpreter::executeProgram): (JSC::Interpreter::executeCall): (JSC::Interpreter::executeConstruct): (JSC::Interpreter::prepareForRepeatCall): (JSC::Interpreter::execute): (JSC::Interpreter::debug): * interpreter/ShadowChicken.cpp: (JSC::ShadowChicken::functionsOnStack): * jsc.cpp: (GlobalObject::moduleLoaderResolve): (GlobalObject::moduleLoaderFetch): (functionGenerateHeapSnapshot): (functionSamplingProfilerStackTraces): (box): (runWithScripts): * runtime/AbstractModuleRecord.cpp: (JSC::AbstractModuleRecord::finishCreation): * runtime/ArrayPrototype.cpp: (JSC::ArrayPrototype::tryInitializeSpeciesWatchpoint): * runtime/Completion.cpp: (JSC::rejectPromise): * runtime/ErrorInstance.cpp: (JSC::ErrorInstance::sanitizedToString): * runtime/ExceptionHelpers.cpp: (JSC::createError): * runtime/ExceptionScope.cpp: (JSC::ExceptionScope::unexpectedExceptionMessage): * runtime/ExceptionScope.h: (JSC::ExceptionScope::assertNoException): (JSC::ExceptionScope::releaseAssertNoException): (JSC::ExceptionScope::unexpectedExceptionMessage): * runtime/GenericArgumentsInlines.h: (JSC::GenericArguments<Type>::defineOwnProperty): * runtime/IntlCollator.cpp: (JSC::IntlCollator::createCollator): (JSC::IntlCollator::resolvedOptions): * runtime/IntlDateTimeFormat.cpp: (JSC::IntlDateTimeFormat::resolvedOptions): (JSC::IntlDateTimeFormat::format): * runtime/IntlNumberFormat.cpp: (JSC::IntlNumberFormat::createNumberFormat): (JSC::IntlNumberFormat::resolvedOptions): * runtime/JSCJSValue.cpp: (JSC::JSValue::putToPrimitiveByIndex): * runtime/JSGenericTypedArrayViewPrototypeFunctions.h: (JSC::genericTypedArrayViewProtoFuncIncludes): (JSC::genericTypedArrayViewProtoFuncIndexOf): (JSC::genericTypedArrayViewProtoFuncLastIndexOf): (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate): * runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::init): * runtime/JSGlobalObjectFunctions.cpp: (JSC::globalFuncHostPromiseRejectionTracker): * runtime/JSModuleEnvironment.cpp: (JSC::JSModuleEnvironment::getOwnPropertySlot): * runtime/JSModuleLoader.cpp: (JSC::JSModuleLoader::finishCreation): * runtime/JSModuleNamespaceObject.cpp: (JSC::JSModuleNamespaceObject::finishCreation): * runtime/JSONObject.cpp: (JSC::Stringifier::toJSON): * runtime/JSObject.cpp: (JSC::JSObject::ordinaryToPrimitive): * runtime/JSPropertyNameEnumerator.h: (JSC::propertyNameEnumerator): * runtime/ObjectConstructor.cpp: (JSC::objectConstructorGetOwnPropertyDescriptors): (JSC::objectConstructorDefineProperty): * runtime/ObjectPrototype.cpp: (JSC::objectProtoFuncHasOwnProperty): * runtime/ProgramExecutable.cpp: (JSC::ProgramExecutable::initializeGlobalProperties): * runtime/ReflectObject.cpp: (JSC::reflectObjectDefineProperty): * runtime/SamplingProfiler.cpp: (JSC::SamplingProfiler::StackFrame::nameFromCallee): * runtime/StringPrototype.cpp: (JSC::stringProtoFuncRepeatCharacter): * runtime/TemplateRegistry.cpp: (JSC::TemplateRegistry::getTemplateObject): * runtime/VM.cpp: (JSC::VM::throwException): * runtime/VM.h: (JSC::VM::nativeStackTraceOfLastThrow): (JSC::VM::clearException): * wasm/WasmB3IRGenerator.cpp: * wasm/js/JSWebAssemblyInstance.cpp: (JSC::JSWebAssemblyInstance::create): Source/WebCore: No new tests because there's no behavior change in functionality. We're only refactoring the code to use the new assertion utility function. * Modules/plugins/QuickTimePluginReplacement.mm: (WebCore::QuickTimePluginReplacement::installReplacement): * bindings/js/JSCryptoKeySerializationJWK.cpp: (WebCore::getJSArrayFromJSON): (WebCore::getStringFromJSON): (WebCore::getBooleanFromJSON): * bindings/js/JSCustomElementRegistryCustom.cpp: (WebCore::JSCustomElementRegistry::whenDefined): * bindings/js/JSDOMExceptionHandling.cpp: (WebCore::propagateExceptionSlowPath): (WebCore::throwNotSupportedError): (WebCore::throwInvalidStateError): (WebCore::throwSecurityError): (WebCore::throwDOMSyntaxError): (WebCore::throwDataCloneError): (WebCore::throwIndexSizeError): (WebCore::throwTypeMismatchError): * bindings/js/JSDOMGlobalObject.cpp: (WebCore::makeThisTypeErrorForBuiltins): (WebCore::makeGetterTypeErrorForBuiltins): * bindings/js/JSDOMGlobalObjectTask.cpp: * bindings/js/JSDOMPromise.h: (WebCore::callPromiseFunction): * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowMicrotaskCallback::call): * bindings/js/JSMainThreadExecState.h: (WebCore::JSMainThreadExecState::~JSMainThreadExecState): * bindings/js/ReadableStreamDefaultController.cpp: (WebCore::ReadableStreamDefaultController::isControlledReadableStreamLocked): * bindings/js/ReadableStreamDefaultController.h: (WebCore::ReadableStreamDefaultController::enqueue): * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneDeserializer::readTerminal): * bindings/scripts/CodeGeneratorJS.pm: (GenerateSerializerFunction): * bindings/scripts/test/JS/JSTestNode.cpp: (WebCore::JSTestNode::serialize): * bindings/scripts/test/JS/JSTestObj.cpp: (WebCore::JSTestObj::serialize): * bindings/scripts/test/JS/JSTestSerialization.cpp: (WebCore::JSTestSerialization::serialize): * bindings/scripts/test/JS/JSTestSerializationInherit.cpp: (WebCore::JSTestSerializationInherit::serialize): * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp: (WebCore::JSTestSerializationInheritFinal::serialize): * contentextensions/ContentExtensionParser.cpp: (WebCore::ContentExtensions::getTypeFlags): * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange): (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus): * html/HTMLPlugInImageElement.cpp: (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Source/WTF: 1. Add an option to skip some number of top frames when capturing the StackTrace. 2. Add an option to use an indentation string when dumping the StackTrace. * wtf/StackTrace.cpp: (WTF::StackTrace::captureStackTrace): (WTF::StackTrace::dump): * wtf/StackTrace.h: Canonical link: https://commits.webkit.org/188717@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@216428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-05-08 16:56:32 +00:00
WTF_EXPORT_PRIVATE void dump(PrintStream&, const char* indentString = nullptr) const;
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
private:
inline static size_t instanceSize(int capacity);
StackTrace()
: m_size(0)
{ }
// We structure the top fields this way because the underlying stack capture
// facility will capture from the top of the stack, and we'll need to skip the
// top 2 frame which is of no interest. Setting up the fields layout this way
// allows us to capture the stack in place and minimize space wastage.
union {
struct {
int m_size;
int m_capacity;
};
struct {
void* m_skippedFrame0;
void* m_skippedFrame1;
};
};
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
union {
void** m_borrowedStack;
void* m_stack[1];
};
const char* m_prefix;
[Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging. https://bugs.webkit.org/show_bug.cgi?id=169454 Reviewed by Michael Saboff. The underlying implementation is hoisted right out of Assertions.cpp from the implementations of WTFPrintBacktrace(). The reason we need this StackTrace object is because during heap debugging, we sometimes want to capture the stack trace that allocated the objects of interest. Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may perturb the execution profile sufficiently that an issue may not reproduce, while alternatively, just capturing the stack trace and deferring printing it till we actually need it later perturbs the execution profile less. In addition, just capturing the stack traces (instead of printing them immediately at each capture site) allows us to avoid polluting stdout with tons of stack traces that may be irrelevant. For now, we only capture the native stack trace. We'll leave capturing and integrating the JS stack trace as an exercise for the future if we need it then. Here's an example of how to use this StackTrace utility: // Capture a stack trace of the top 10 frames. std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10)); // Print the trace. dataLog(*trace); * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * tools/StackTrace.cpp: Added. (JSC::StackTrace::instanceSize): (JSC::StackTrace::captureStackTrace): (JSC::StackTrace::dump): * tools/StackTrace.h: Added. (JSC::StackTrace::size): (JSC::StackTrace::StackTrace): Canonical link: https://commits.webkit.org/186472@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213718 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-10 19:01:57 +00:00
};
[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()): Canonical link: https://commits.webkit.org/188119@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215715 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-25 02:53:49 +00:00
} // namespace WTF
using WTF::StackTrace;