name_storage.cpp revision cc2ee177dbb3befca43e36cfc56778b006c3d050
1/** 2 * @file name_storage.cpp 3 * Storage of global names (filenames and symbols) 4 * 5 * @remark Copyright 2002 OProfile authors 6 * @remark Read the file COPYING 7 * 8 * @author Philippe Elie 9 * @author John Levon 10 */ 11 12#include <stdexcept> 13 14#include "name_storage.h" 15#include "demangle_symbol.h" 16#include "file_manip.h" 17#include "string_manip.h" 18 19using namespace std; 20 21image_name_storage image_names; 22debug_name_storage debug_names; 23symbol_name_storage symbol_names; 24 25 26string const & image_name_storage::basename(image_name_id id) const 27{ 28 stored_name const & n = get(id); 29 if (n.name_processed.empty()) { 30 n.name_processed = op_basename(n.name); 31 } 32 return n.name_processed; 33} 34 35 36string const & debug_name_storage::basename(debug_name_id id) const 37{ 38 stored_name const & n = get(id); 39 if (n.name_processed.empty()) { 40 n.name_processed = op_basename(n.name); 41 } 42 return n.name_processed; 43} 44 45 46string const & symbol_name_storage::demangle(symbol_name_id id) const 47{ 48 stored_name const & n = get(id); 49 if (!n.name_processed.empty() || n.name.empty()) 50 return n.name_processed; 51 52 if (n.name[0] != '?') { 53 n.name_processed = demangle_symbol(n.name); 54 return n.name_processed; 55 } 56 57 if (n.name.length() < 2 || n.name[1] != '?') { 58 n.name_processed = "(no symbols)"; 59 return n.name_processed; 60 } 61 62 n.name_processed = "anonymous symbol from section "; 63 n.name_processed += ltrim(n.name, "?"); 64 return n.name_processed; 65} 66