| Index: third_party/tcmalloc/chromium/src/getpc.h
|
| diff --git a/third_party/tcmalloc/chromium/src/getpc.h b/third_party/tcmalloc/chromium/src/getpc.h
|
| index 9fb2e162beb22621406918ec017f2dd3bc2ea073..c5183bf0adba86f8d5ecb13a30e81de032905839 100644
|
| --- a/third_party/tcmalloc/chromium/src/getpc.h
|
| +++ b/third_party/tcmalloc/chromium/src/getpc.h
|
| @@ -62,6 +62,8 @@
|
| #elif defined(HAVE_CYGWIN_SIGNAL_H)
|
| #include <cygwin/signal.h>
|
| typedef ucontext ucontext_t;
|
| +#elif defined(__ANDROID__)
|
| +#include <unwind.h>
|
| #endif
|
|
|
|
|
| @@ -109,7 +111,8 @@ struct CallUnrollInfo {
|
| // then, is to do the magic call-unrolling for systems that support it.
|
|
|
| // -- Special case 1: linux x86, for which we have CallUnrollInfo
|
| -#if defined(__linux) && defined(__i386) && defined(__GNUC__)
|
| +#if defined(__linux) && defined(__i386) && defined(__GNUC__) && \
|
| + !defined(__ANDROID__)
|
| static const CallUnrollInfo callunrollinfo[] = {
|
| // Entry to a function: push %ebp; mov %esp,%ebp
|
| // Top-of-stack contains the caller IP.
|
| @@ -171,7 +174,16 @@ inline void* GetPC(const struct ucontext_t& signal_ucontext) {
|
| RAW_LOG(ERROR, "GetPC is not yet implemented on Windows\n");
|
| return NULL;
|
| }
|
| +#elif defined(__ANDROID__)
|
| +typedef struct _Unwind_Context ucontext_t;
|
|
|
| +inline void* GetPC(const ucontext_t& signal_ucontext) {
|
| + // Bionic doesn't export ucontext, see
|
| + // https://code.google.com/p/android/issues/detail?id=34784.
|
| + return reinterpret_cast<void*>(_Unwind_GetIP(
|
| + const_cast<ucontext_t*>(&signal_ucontext)));
|
| +}
|
| +//
|
| // Normal cases. If this doesn't compile, it's probably because
|
| // PC_FROM_UCONTEXT is the empty string. You need to figure out
|
| // the right value for your system, and add it to the list in
|
|
|