Loading libbacktrace/Backtrace.cpp +31 −1 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ * limitations under the License. */ #include <assert.h> #include <inttypes.h> #include <stdint.h> #include <stdlib.h> Loading @@ -30,9 +31,10 @@ #include <demangle.h> #include "BacktraceLog.h" #include "thread_utils.h" #include "UnwindCurrent.h" #include "UnwindPtrace.h" #include "UnwindStack.h" #include "thread_utils.h" using android::base::StringPrintf; Loading Loading @@ -140,6 +142,34 @@ Backtrace* Backtrace::Create(pid_t pid, pid_t tid, BacktraceMap* map) { } } Backtrace* Backtrace::CreateNew(pid_t pid, pid_t tid, BacktraceMap* map) { if (pid == BACKTRACE_CURRENT_PROCESS) { pid = getpid(); if (tid == BACKTRACE_CURRENT_THREAD) { tid = gettid(); } } else if (tid == BACKTRACE_CURRENT_THREAD) { tid = pid; } if (map == nullptr) { // This would cause the wrong type of map object to be created, so disallow. #if defined(__ANDROID__) __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "Backtrace::CreateNew() must be called with a real map pointer."); #else BACK_LOGE("Backtrace::CreateNew() must be called with a real map pointer."); abort(); #endif } if (pid == getpid()) { return new UnwindStackCurrent(pid, tid, map); } else { return new UnwindStackPtrace(pid, tid, map); } } std::string Backtrace::GetErrorString(BacktraceUnwindError error) { switch (error) { case BACKTRACE_UNWIND_NO_ERROR: Loading libbacktrace/UnwindStack.cpp +1 −30 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ */ #define _GNU_SOURCE 1 #include <assert.h> #include <stdint.h> #include <stdlib.h> #include <string.h> Loading Loading @@ -93,7 +92,7 @@ static bool Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, back_frame->pc = frame->pc; back_frame->sp = frame->sp; back_frame->func_name = frame->function_name; back_frame->func_name = demangle(frame->function_name.c_str()); back_frame->func_offset = frame->function_offset; back_frame->map.name = frame->map_name; Loading Loading @@ -149,31 +148,3 @@ bool UnwindStackPtrace::Unwind(size_t num_ignore_frames, ucontext_t* context) { error_ = BACKTRACE_UNWIND_NO_ERROR; return ::Unwind(regs.get(), GetMap(), &frames_, num_ignore_frames); } Backtrace* Backtrace::CreateNew(pid_t pid, pid_t tid, BacktraceMap* map) { if (pid == BACKTRACE_CURRENT_PROCESS) { pid = getpid(); if (tid == BACKTRACE_CURRENT_THREAD) { tid = gettid(); } } else if (tid == BACKTRACE_CURRENT_THREAD) { tid = pid; } if (map == nullptr) { // This would cause the wrong type of map object to be created, so disallow. #if defined(__ANDROID__) __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "Backtrace::CreateNew() must be called with a real map pointer."); #else BACK_LOGE("Backtrace::CreateNew() must be called with a real map pointer."); abort(); #endif } if (pid == getpid()) { return new UnwindStackCurrent(pid, tid, map); } else { return new UnwindStackPtrace(pid, tid, map); } } Loading
libbacktrace/Backtrace.cpp +31 −1 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ * limitations under the License. */ #include <assert.h> #include <inttypes.h> #include <stdint.h> #include <stdlib.h> Loading @@ -30,9 +31,10 @@ #include <demangle.h> #include "BacktraceLog.h" #include "thread_utils.h" #include "UnwindCurrent.h" #include "UnwindPtrace.h" #include "UnwindStack.h" #include "thread_utils.h" using android::base::StringPrintf; Loading Loading @@ -140,6 +142,34 @@ Backtrace* Backtrace::Create(pid_t pid, pid_t tid, BacktraceMap* map) { } } Backtrace* Backtrace::CreateNew(pid_t pid, pid_t tid, BacktraceMap* map) { if (pid == BACKTRACE_CURRENT_PROCESS) { pid = getpid(); if (tid == BACKTRACE_CURRENT_THREAD) { tid = gettid(); } } else if (tid == BACKTRACE_CURRENT_THREAD) { tid = pid; } if (map == nullptr) { // This would cause the wrong type of map object to be created, so disallow. #if defined(__ANDROID__) __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "Backtrace::CreateNew() must be called with a real map pointer."); #else BACK_LOGE("Backtrace::CreateNew() must be called with a real map pointer."); abort(); #endif } if (pid == getpid()) { return new UnwindStackCurrent(pid, tid, map); } else { return new UnwindStackPtrace(pid, tid, map); } } std::string Backtrace::GetErrorString(BacktraceUnwindError error) { switch (error) { case BACKTRACE_UNWIND_NO_ERROR: Loading
libbacktrace/UnwindStack.cpp +1 −30 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ */ #define _GNU_SOURCE 1 #include <assert.h> #include <stdint.h> #include <stdlib.h> #include <string.h> Loading Loading @@ -93,7 +92,7 @@ static bool Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, back_frame->pc = frame->pc; back_frame->sp = frame->sp; back_frame->func_name = frame->function_name; back_frame->func_name = demangle(frame->function_name.c_str()); back_frame->func_offset = frame->function_offset; back_frame->map.name = frame->map_name; Loading Loading @@ -149,31 +148,3 @@ bool UnwindStackPtrace::Unwind(size_t num_ignore_frames, ucontext_t* context) { error_ = BACKTRACE_UNWIND_NO_ERROR; return ::Unwind(regs.get(), GetMap(), &frames_, num_ignore_frames); } Backtrace* Backtrace::CreateNew(pid_t pid, pid_t tid, BacktraceMap* map) { if (pid == BACKTRACE_CURRENT_PROCESS) { pid = getpid(); if (tid == BACKTRACE_CURRENT_THREAD) { tid = gettid(); } } else if (tid == BACKTRACE_CURRENT_THREAD) { tid = pid; } if (map == nullptr) { // This would cause the wrong type of map object to be created, so disallow. #if defined(__ANDROID__) __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "Backtrace::CreateNew() must be called with a real map pointer."); #else BACK_LOGE("Backtrace::CreateNew() must be called with a real map pointer."); abort(); #endif } if (pid == getpid()) { return new UnwindStackCurrent(pid, tid, map); } else { return new UnwindStackPtrace(pid, tid, map); } }