blob: 90ee83f07f1f03e096bbee76e76d9ec2efd80865 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/zxdb/symbols/elf_symbol_record.h"
#include "llvm/Demangle/Demangle.h"
namespace zxdb {
ElfSymbolRecord::ElfSymbolRecord(ElfSymbolType t, uint64_t relative_address, uint64_t size,
const std::string& linkage_name)
: type(t), relative_address(relative_address), size(size), linkage_name(linkage_name) {
// TODO(brettw) use "demangled = llvm::demangle() when we roll LLVM. It avoids the buffer
// allocation problem.
int demangle_status = llvm::demangle_unknown_error;
char* demangled_buf =
llvm::itaniumDemangle(linkage_name.c_str(), nullptr, nullptr, &demangle_status);
if (demangle_status == llvm::demangle_success) {
unmangled_name = demangled_buf;
free(demangled_buf);
} else {
// Fall back to the linkage name on error (might not be a mangled name at all).
unmangled_name = linkage_name;
}
}
} // namespace zxdb