Loading libbacktrace/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ cc_library { cflags: ["-DNO_LIBDEXFILE_SUPPORT"], }, }, whole_static_libs: ["libdemangle"], } cc_test_library { Loading libbacktrace/Backtrace.cpp +10 −3 Original line number Diff line number Diff line Loading @@ -28,13 +28,13 @@ #include <backtrace/Backtrace.h> #include <backtrace/BacktraceMap.h> #include <demangle.h> #include "BacktraceLog.h" #include "UnwindStack.h" using android::base::StringPrintf; extern "C" char* __cxa_demangle(const char*, char*, size_t*, int*); //------------------------------------------------------------------------- // Backtrace functions. //------------------------------------------------------------------------- Loading Loading @@ -63,7 +63,14 @@ std::string Backtrace::GetFunctionName(uint64_t pc, uint64_t* offset, const back if (map->start == 0 || (map->flags & PROT_DEVICE_MAP)) { return ""; } return demangle(GetFunctionNameRaw(pc, offset).c_str()); std::string name(GetFunctionNameRaw(pc, offset)); char* demangled_name = __cxa_demangle(name.c_str(), nullptr, nullptr, nullptr); if (demangled_name != nullptr) { name = demangled_name; free(demangled_name); return name; } return name; } bool Backtrace::VerifyReadWordArgs(uint64_t ptr, word_t* out_value) { Loading libbacktrace/UnwindStack.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ #include <string> #include <backtrace/Backtrace.h> #include <demangle.h> #include <unwindstack/Elf.h> #include <unwindstack/MapInfo.h> #include <unwindstack/Maps.h> Loading @@ -41,6 +40,8 @@ #include "UnwindStack.h" #include "UnwindStackMap.h" extern "C" char* __cxa_demangle(const char*, char*, size_t*, int*); bool Backtrace::Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, std::vector<backtrace_frame_data_t>* frames, size_t num_ignore_frames, std::vector<std::string>* skip_names, BacktraceUnwindError* error) { Loading Loading @@ -115,7 +116,13 @@ bool Backtrace::Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, back_frame->pc = frame->pc; back_frame->sp = frame->sp; back_frame->func_name = demangle(frame->function_name.c_str()); char* demangled_name = __cxa_demangle(frame->function_name.c_str(), nullptr, nullptr, nullptr); if (demangled_name != nullptr) { back_frame->func_name = demangled_name; free(demangled_name); } else { back_frame->func_name = frame->function_name; } back_frame->func_offset = frame->function_offset; back_frame->map.name = frame->map_name; Loading Loading
libbacktrace/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ cc_library { cflags: ["-DNO_LIBDEXFILE_SUPPORT"], }, }, whole_static_libs: ["libdemangle"], } cc_test_library { Loading
libbacktrace/Backtrace.cpp +10 −3 Original line number Diff line number Diff line Loading @@ -28,13 +28,13 @@ #include <backtrace/Backtrace.h> #include <backtrace/BacktraceMap.h> #include <demangle.h> #include "BacktraceLog.h" #include "UnwindStack.h" using android::base::StringPrintf; extern "C" char* __cxa_demangle(const char*, char*, size_t*, int*); //------------------------------------------------------------------------- // Backtrace functions. //------------------------------------------------------------------------- Loading Loading @@ -63,7 +63,14 @@ std::string Backtrace::GetFunctionName(uint64_t pc, uint64_t* offset, const back if (map->start == 0 || (map->flags & PROT_DEVICE_MAP)) { return ""; } return demangle(GetFunctionNameRaw(pc, offset).c_str()); std::string name(GetFunctionNameRaw(pc, offset)); char* demangled_name = __cxa_demangle(name.c_str(), nullptr, nullptr, nullptr); if (demangled_name != nullptr) { name = demangled_name; free(demangled_name); return name; } return name; } bool Backtrace::VerifyReadWordArgs(uint64_t ptr, word_t* out_value) { Loading
libbacktrace/UnwindStack.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ #include <string> #include <backtrace/Backtrace.h> #include <demangle.h> #include <unwindstack/Elf.h> #include <unwindstack/MapInfo.h> #include <unwindstack/Maps.h> Loading @@ -41,6 +40,8 @@ #include "UnwindStack.h" #include "UnwindStackMap.h" extern "C" char* __cxa_demangle(const char*, char*, size_t*, int*); bool Backtrace::Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, std::vector<backtrace_frame_data_t>* frames, size_t num_ignore_frames, std::vector<std::string>* skip_names, BacktraceUnwindError* error) { Loading Loading @@ -115,7 +116,13 @@ bool Backtrace::Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, back_frame->pc = frame->pc; back_frame->sp = frame->sp; back_frame->func_name = demangle(frame->function_name.c_str()); char* demangled_name = __cxa_demangle(frame->function_name.c_str(), nullptr, nullptr, nullptr); if (demangled_name != nullptr) { back_frame->func_name = demangled_name; free(demangled_name); } else { back_frame->func_name = frame->function_name; } back_frame->func_offset = frame->function_offset; back_frame->map.name = frame->map_name; Loading