Chromium Code Reviews| Index: base/debug/stack_trace.h |
| diff --git a/base/debug/stack_trace.h b/base/debug/stack_trace.h |
| index ab1d2ebe6a3c00244b5d09cb1e4fcadce16ab093..94974a1628c2fc8c4ad978fc95a25b4d4012c2fa 100644 |
| --- a/base/debug/stack_trace.h |
| +++ b/base/debug/stack_trace.h |
| @@ -11,6 +11,7 @@ |
| #include <string> |
| #include "base/base_export.h" |
| +#include "base/debug/debugging_flags.h" |
| #include "base/macros.h" |
| #include "build/build_config.h" |
| @@ -23,23 +24,27 @@ struct _EXCEPTION_POINTERS; |
| struct _CONTEXT; |
| #endif |
| -// TODO(699863): Clean up HAVE_TRACE_STACK_FRAME_POINTERS. |
| +// Fast stack trace capture using frame pointers is only available under POSIX |
| +// platforms, and only for certain architectures, and only when frame pointers |
| +// are enabled in the build. |
| #if defined(OS_POSIX) |
| +#if BUILDFLAG(ENABLE_PROFILING) || !defined(NDEBUG) |
| #if defined(__i386__) || defined(__x86_64__) |
| -#define HAVE_TRACE_STACK_FRAME_POINTERS 1 |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS() 1 |
|
Wez
2017/03/27 03:59:37
FYI: Turned this back into a non-function-style ma
|
| #elif defined(__arm__) && !defined(__thumb__) |
| -#define HAVE_TRACE_STACK_FRAME_POINTERS 1 |
| -#else // defined(__arm__) && !defined(__thumb__) |
| -#define HAVE_TRACE_STACK_FRAME_POINTERS 0 |
| -#endif // defined(__arm__) && !defined(__thumb__) |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS() 1 |
| +#else // defined(__arm__) && !defined(__thumb__) |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS() 0 |
| +#endif // defined(__arm__) && !defined(__thumb__) |
| -#elif defined(OS_WIN) |
| -#define HAVE_TRACE_STACK_FRAME_POINTERS 1 |
| +#else // BUILDFLAG(ENABLE_PROFILING) || !defined(NDEBUG) |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS() 0 |
| +#endif // BUILDFLAG(ENABLE_PROFILING) || !defined(NDEBUG) |
| -#else // defined(OS_WIN) |
| -#define HAVE_TRACE_STACK_FRAME_POINTERS 0 |
| -#endif // defined(OS_WIN) |
| +#else // defined(OS_POSIX) |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS() 0 |
| +#endif // defined(OS_POSIX) |
| namespace base { |
| namespace debug { |
| @@ -56,7 +61,7 @@ namespace debug { |
| BASE_EXPORT bool EnableInProcessStackDumping(); |
| // Returns end of the stack, or 0 if we couldn't get it. |
| -#if HAVE_TRACE_STACK_FRAME_POINTERS |
| +#if HAVE_TRACE_STACK_FRAME_POINTERS() |
| BASE_EXPORT uintptr_t GetStackEnd(); |
| #endif |
| @@ -119,7 +124,7 @@ class BASE_EXPORT StackTrace { |
| size_t count_; |
| }; |
| -#if HAVE_TRACE_STACK_FRAME_POINTERS |
| +#if HAVE_TRACE_STACK_FRAME_POINTERS() |
| // Traces the stack by using frame pointers. This function is faster but less |
| // reliable than StackTrace. It should work for debug and profiling builds, |
| // but not for release builds (although there are some exceptions). |
| @@ -132,7 +137,6 @@ BASE_EXPORT size_t TraceStackFramePointers(const void** out_trace, |
| size_t max_depth, |
| size_t skip_initial); |
| -#if !defined(OS_WIN) |
| // Links stack frame |fp| to |parent_fp|, so that during stack unwinding |
| // TraceStackFramePointers() visits |parent_fp| after visiting |fp|. |
| // Both frame pointers must come from __builtin_frame_address(). |
| @@ -182,9 +186,8 @@ class BASE_EXPORT ScopedStackFrameLinker { |
| DISALLOW_COPY_AND_ASSIGN(ScopedStackFrameLinker); |
| }; |
| -#endif // !defined(OS_WIN) |
| -#endif // HAVE_TRACE_STACK_FRAME_POINTERS |
| +#endif // HAVE_TRACE_STACK_FRAME_POINTERS() |
| namespace internal { |