blob: 99e0e90471399cb7084c05281a2814c71f12b33f [file] [log] [blame]
/**
* @file name_storage.cpp
* Storage of global names (filenames and symbols)
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author Philippe Elie
* @author John Levon
*/
#include <stdexcept>
#include "name_storage.h"
#include "demangle_symbol.h"
#include "file_manip.h"
#include "string_manip.h"
using namespace std;
image_name_storage image_names;
debug_name_storage debug_names;
symbol_name_storage symbol_names;
string const & image_name_storage::basename(image_name_id id) const
{
stored_name const & n = get(id);
if (n.name_processed.empty()) {
n.name_processed = op_basename(n.name);
}
return n.name_processed;
}
string const & debug_name_storage::basename(debug_name_id id) const
{
stored_name const & n = get(id);
if (n.name_processed.empty()) {
n.name_processed = op_basename(n.name);
}
return n.name_processed;
}
string const & symbol_name_storage::demangle(symbol_name_id id) const
{
stored_name const & n = get(id);
if (!n.name_processed.empty() || n.name.empty())
return n.name_processed;
if (n.name[0] != '?') {
n.name_processed = demangle_symbol(n.name);
return n.name_processed;
}
if (n.name.length() < 2 || n.name[1] != '?') {
n.name_processed = "(no symbols)";
return n.name_processed;
}
n.name_processed = "anonymous symbol from section ";
n.name_processed += ltrim(n.name, "?");
return n.name_processed;
}