| Index: third_party/tcmalloc/chromium/src/stacktrace_x86_64-inl.h
|
| diff --git a/third_party/tcmalloc/chromium/src/stacktrace_x86_64-inl.h b/third_party/tcmalloc/chromium/src/stacktrace_x86_64-inl.h
|
| deleted file mode 100644
|
| index 767ef9b1d11dc5ae0201fd9ae18ee343d1556207..0000000000000000000000000000000000000000
|
| --- a/third_party/tcmalloc/chromium/src/stacktrace_x86_64-inl.h
|
| +++ /dev/null
|
| @@ -1,151 +0,0 @@
|
| -// Copyright (c) 2005, Google Inc.
|
| -// All rights reserved.
|
| -//
|
| -// Redistribution and use in source and binary forms, with or without
|
| -// modification, are permitted provided that the following conditions are
|
| -// met:
|
| -//
|
| -// * Redistributions of source code must retain the above copyright
|
| -// notice, this list of conditions and the following disclaimer.
|
| -// * 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.
|
| -// * Neither the name of Google Inc. nor the names of its
|
| -// contributors may be used to endorse or promote products derived from
|
| -// this software without specific prior written permission.
|
| -//
|
| -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| -// "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 THE COPYRIGHT
|
| -// OWNER 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.
|
| -
|
| -// ---
|
| -// Author: Arun Sharma
|
| -//
|
| -// Produce stack trace using libgcc
|
| -
|
| -extern "C" {
|
| -#include <stdlib.h> // for NULL
|
| -#include <unwind.h> // ABI defined unwinder
|
| -#include <string.h> // for memset
|
| -}
|
| -#include "google/stacktrace.h"
|
| -
|
| -typedef struct {
|
| - void **result;
|
| - int max_depth;
|
| - int skip_count;
|
| - int count;
|
| -} trace_arg_t;
|
| -
|
| -
|
| -// Workaround for the malloc() in _Unwind_Backtrace() issue.
|
| -static _Unwind_Reason_Code nop_backtrace(struct _Unwind_Context *uc, void *opq) {
|
| - return _URC_NO_REASON;
|
| -}
|
| -
|
| -
|
| -// This code is not considered ready to run until
|
| -// static initializers run so that we are guaranteed
|
| -// that any malloc-related initialization is done.
|
| -static bool ready_to_run = false;
|
| -class StackTraceInit {
|
| - public:
|
| - StackTraceInit() {
|
| - // Extra call to force initialization
|
| - _Unwind_Backtrace(nop_backtrace, NULL);
|
| - ready_to_run = true;
|
| - }
|
| -};
|
| -
|
| -static StackTraceInit module_initializer; // Force initialization
|
| -
|
| -static _Unwind_Reason_Code GetOneFrame(struct _Unwind_Context *uc, void *opq) {
|
| - trace_arg_t *targ = (trace_arg_t *) opq;
|
| -
|
| - if (targ->skip_count > 0) {
|
| - targ->skip_count--;
|
| - } else {
|
| - targ->result[targ->count++] = (void *) _Unwind_GetIP(uc);
|
| - }
|
| -
|
| - if (targ->count == targ->max_depth)
|
| - return _URC_END_OF_STACK;
|
| -
|
| - return _URC_NO_REASON;
|
| -}
|
| -
|
| -// If you change this function, also change GetStackFrames below.
|
| -int GetStackTrace(void** result, int max_depth, int skip_count) {
|
| - if (!ready_to_run)
|
| - return 0;
|
| -
|
| - trace_arg_t targ;
|
| -
|
| - skip_count += 1; // Do not include the "GetStackTrace" frame
|
| -
|
| - targ.result = result;
|
| - targ.max_depth = max_depth;
|
| - targ.skip_count = skip_count;
|
| - targ.count = 0;
|
| -
|
| - _Unwind_Backtrace(GetOneFrame, &targ);
|
| -
|
| - return targ.count;
|
| -}
|
| -
|
| -// If you change this function, also change GetStackTrace above:
|
| -//
|
| -// This GetStackFrames routine shares a lot of code with GetStackTrace
|
| -// above. This code could have been refactored into a common routine,
|
| -// and then both GetStackTrace/GetStackFrames could call that routine.
|
| -// There are two problems with that:
|
| -//
|
| -// (1) The performance of the refactored-code suffers substantially - the
|
| -// refactored needs to be able to record the stack trace when called
|
| -// from GetStackTrace, and both the stack trace and stack frame sizes,
|
| -// when called from GetStackFrames - this introduces enough new
|
| -// conditionals that GetStackTrace performance can degrade by as much
|
| -// as 50%.
|
| -//
|
| -// (2) Whether the refactored routine gets inlined into GetStackTrace and
|
| -// GetStackFrames depends on the compiler, and we can't guarantee the
|
| -// behavior either-way, even with "__attribute__ ((always_inline))"
|
| -// or "__attribute__ ((noinline))". But we need this guarantee or the
|
| -// frame counts may be off by one.
|
| -//
|
| -// Both (1) and (2) can be addressed without this code duplication, by
|
| -// clever use of template functions, and by defining GetStackTrace and
|
| -// GetStackFrames as macros that expand to these template functions.
|
| -// However, this approach comes with its own set of problems - namely,
|
| -// macros and preprocessor trouble - for example, if GetStackTrace
|
| -// and/or GetStackFrames is ever defined as a member functions in some
|
| -// class, we are in trouble.
|
| -int GetStackFrames(void** pcs, int* sizes, int max_depth, int skip_count) {
|
| - if (!ready_to_run)
|
| - return 0;
|
| -
|
| - trace_arg_t targ;
|
| -
|
| - skip_count += 1; // Do not include the "GetStackFrames" frame
|
| -
|
| - targ.result = pcs;
|
| - targ.max_depth = max_depth;
|
| - targ.skip_count = skip_count;
|
| - targ.count = 0;
|
| -
|
| - _Unwind_Backtrace(GetOneFrame, &targ);
|
| -
|
| - // No implementation for finding out the stack frame sizes yet.
|
| - memset(sizes, 0, sizeof(*sizes) * targ.count);
|
| -
|
| - return targ.count;
|
| -}
|
|
|