Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dde60ce1 authored by Christopher Ferris's avatar Christopher Ferris Committed by android-build-merger
Browse files

Merge "Move to the libc++ demangler." am: 89bb586d am: 057b4cfa

am: 845b8ec4

Change-Id: I92783c8f31a44df93c46488e8c667ebe745faa3b
parents 5d46c1ef 845b8ec4
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -97,7 +97,6 @@ cc_library {
            cflags: ["-DNO_LIBDEXFILE_SUPPORT"],
        },
    },
    whole_static_libs: ["libdemangle"],
}

cc_test_library {
+10 −3
Original line number Diff line number Diff line
@@ -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.
//-------------------------------------------------------------------------
@@ -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) {
+9 −2
Original line number Diff line number Diff line
@@ -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>
@@ -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) {
@@ -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;