From 49c8675f013bfa6a6d329acc28a2a1525ec76ea7 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Tue, 18 Oct 2005 19:18:27 -0400 Subject: [PATCH] fix nmtest test/Makefile: get nmtest to compile test/nmtest.cc: make nmtest actually do something --HG-- extra : convert_revision : 471c02c51355a5145f0d0ce965c2a341076120c0 --- test/Makefile | 4 ++-- test/nmtest.cc | 60 ++++++++++++++++++++++++++++---------------------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/test/Makefile b/test/Makefile index 20abe8466..6fe0e5f48 100644 --- a/test/Makefile +++ b/test/Makefile @@ -33,8 +33,8 @@ initest: test/initest.cc base/str.cc base/inifile.cc base/cprintf.cc lrutest: test/lru_test.cc $(CXX) $(CCFLAGS) -o $@ $^ -nmtest: test/nmtest.cc base/object_file.cc base/symtab.cc base/misc.cc base/str.cc - $(CXX) $(CCFLAGS) -o $@ $^ +nmtest: test/nmtest.cc base/output.cc base/hostinfo.cc base/cprintf.cc base/misc.cc base/loader/object_file.cc base/loader/symtab.cc base/misc.cc base/str.cc base/loader/aout_object.cc base/loader/ecoff_object.cc base/loader/elf_object.cc + $(CXX) $(CCFLAGS) -I/n/ziff/z/binkertn/build/work/ALPHA_FS -lelf -o $@ $^ offtest: test/offtest.cc $(CXX) $(CCFLAGS) -o $@ $^ diff --git a/test/nmtest.cc b/test/nmtest.cc index 90166adf3..e9c20d19d 100644 --- a/test/nmtest.cc +++ b/test/nmtest.cc @@ -30,45 +30,53 @@ #include #include -#include "ecoff.hh" #include "base/loader/object_file.hh" -#include "base/str.hh" #include "base/loader/symtab.hh" +#include "base/misc.hh" +#include "base/str.hh" +using namespace std; Tick curTick; +ostream *outputStream = &cout; + int main(int argc, char *argv[]) { - EcoffObject obj; - if (argc != 3) { - cout << "usage: " << argv[0] << " \n"; - return 1; - } + if (argc != 2 && argc != 3) + panic("usage: %s \n", argv[0]); - if (!obj.open(argv[1])) { - cout << "file not found\n"; - return 1; - } + ObjectFile *obj = createObjectFile(argv[1]); + if (!obj) + panic("file not found\n"); SymbolTable symtab; - obj.loadGlobals(&symtab); + obj->loadGlobalSymbols(&symtab); + obj->loadLocalSymbols(&symtab); - string symbol = argv[2]; - Addr address; - - if (symbol[0] == '0' && symbol[1] == 'x') { - if (to_number(symbol, address) && symtab.findSymbol(address, symbol)) - cout << "address = 0x" << hex << address - << ", symbol = " << symbol << "\n"; - else - cout << "address = 0x" << hex << address << " was not found\n"; + if (argc == 2) { + SymbolTable::ATable::const_iterator i = symtab.getAddrTable().begin(); + SymbolTable::ATable::const_iterator end = symtab.getAddrTable().end(); + while (i != end) { + cprintf("%#x %s\n", i->first, i->second); + ++i; + } } else { - if (symtab.findAddress(symbol, address)) - cout << "symbol = " << symbol << ", address = 0x" << hex - << address << "\n"; - else - cout << "symbol = " << symbol << " was not found\n"; + string symbol = argv[2]; + Addr address; + + if (symbol[0] == '0' && symbol[1] == 'x') { + if (to_number(symbol, address) && + symtab.findSymbol(address, symbol)) + cprintf("address = %#x, symbol = %s\n", address, symbol); + else + cprintf("address = %#x was not found\n", address); + } else { + if (symtab.findAddress(symbol, address)) + cprintf("symbol = %s address = %#x\n", symbol, address); + else + cprintf("symbol = %s was not found\n", symbol); + } } return 0;