symtab.hh revision 1158
1/* 2 * Copyright (c) 2002-2004 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution; 12 * neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef __SYMTAB_HH__ 30#define __SYMTAB_HH__ 31 32#include <map> 33#include "targetarch/isa_traits.hh" // for Addr 34 35class SymbolTable 36{ 37 private: 38 typedef std::map<Addr, std::string> ATable; 39 typedef std::map<std::string, Addr> STable; 40 41 ATable addrTable; 42 STable symbolTable; 43 44 public: 45 SymbolTable() {} 46 SymbolTable(const std::string &file) { load(file); } 47 ~SymbolTable() {} 48 49 bool insert(Addr address, std::string symbol); 50 bool load(const std::string &file); 51 52 /// Find the nearest symbol equal to or less than the supplied 53 /// address (e.g., the label for the enclosing function). 54 /// @param address The address to look up. 55 /// @param symbol Return reference for symbol string. 56 /// @param sym_address Return reference for symbol address. 57 /// @param next_sym_address Address of following symbol (for 58 /// determining valid range of symbol). 59 /// @retval True if a symbol was found. 60 bool findNearestSymbol(Addr address, std::string &symbol, 61 Addr &sym_address, Addr &next_sym_address) const; 62 63 /// Overload for findNearestSymbol() for callers who don't care 64 /// about next_sym_address. 65 bool findNearestSymbol(Addr address, std::string &symbol, 66 Addr &sym_address) const 67 { 68 Addr dummy; 69 return findNearestSymbol(address, symbol, sym_address, dummy); 70 } 71 72 73 bool findSymbol(Addr address, std::string &symbol) const; 74 bool findAddress(const std::string &symbol, Addr &address) const; 75 76 std::string find(Addr addr) const; 77 Addr find(const std::string &symbol) const; 78}; 79 80/// Global unified debugging symbol table (for target). Conceptually 81/// there should be one of these per System object for full system, 82/// and per Process object for non-full-system, but so far one big 83/// global one has worked well enough. 84extern SymbolTable *debugSymbolTable; 85 86#endif // __SYMTAB_HH__ 87