From 3d292cb21758c55cc6a8607431908be1d3bd9f48 Mon Sep 17 00:00:00 2001 From: Horst Schirmeier Date: Fri, 13 Jul 2018 09:30:33 +0200 Subject: [PATCH] generic-tracing: add error handling Instead of using assert() (which only does something in a Debug build), explicitly fail when a user-specified symbol is not found. Change-Id: I33ac59ca4483ee65ba70c264b5153a7766a919d2 --- src/experiments/generic-tracing/experiment.cc | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/experiments/generic-tracing/experiment.cc b/src/experiments/generic-tracing/experiment.cc index 233a885f..105ce926 100644 --- a/src/experiments/generic-tracing/experiment.cc +++ b/src/experiments/generic-tracing/experiment.cc @@ -95,8 +95,12 @@ void GenericTracing::parseOptions() { if (cmd[START_SYMBOL] && m_elf != NULL) { start_symbol = cmd[START_SYMBOL].first()->arg; - assert(m_elf->getSymbol(start_symbol).isValid()); - start_address = m_elf->getSymbol(start_symbol).getAddress(); + const ElfSymbol& symbol = m_elf->getSymbol(start_symbol); + if (!symbol.isValid()) { + m_log << "Start symbol '" << start_symbol << "' not found." << std::endl; + exit(EXIT_FAILURE); + } + start_address = symbol.getAddress(); } else if (cmd[START_ADDRESS]) { start_address = strtoul(cmd[START_ADDRESS].first()->arg, NULL, 16); } else if (m_elf == NULL) { @@ -104,14 +108,22 @@ void GenericTracing::parseOptions() { exit(EXIT_FAILURE); } else { start_symbol = "main"; - assert(m_elf->getSymbol(start_symbol).isValid()); - start_address = m_elf->getSymbol(start_symbol).getAddress(); + const ElfSymbol& symbol = m_elf->getSymbol(start_symbol); + if (!symbol.isValid()) { + m_log << "Start symbol '" << start_symbol << "' not found." << std::endl; + exit(EXIT_FAILURE); + } + start_address = symbol.getAddress(); } if (cmd[STOP_SYMBOL] && m_elf != NULL) { stop_symbol = std::string(cmd[STOP_SYMBOL].first()->arg); - assert(m_elf->getSymbol(stop_symbol).isValid()); - stop_address = m_elf->getSymbol(stop_symbol).getAddress(); + const ElfSymbol& symbol = m_elf->getSymbol(stop_symbol); + if (!symbol.isValid()) { + m_log << "Stop symbol '" << start_symbol << "' not found." << std::endl; + exit(EXIT_FAILURE); + } + stop_address = symbol.getAddress(); } else if (cmd[STOP_ADDRESS]) { stop_address = strtoul(cmd[STOP_ADDRESS].first()->arg, NULL, 16); } else { @@ -148,8 +160,11 @@ void GenericTracing::parseOptions() { option::Option *opt = cmd[MEM_SYMBOL].first(); while (opt != 0) { - const ElfSymbol &symbol = m_elf->getSymbol(opt->arg); - assert(symbol.isValid()); + const ElfSymbol& symbol = m_elf->getSymbol(opt->arg); + if (!symbol.isValid()) { + m_log << "Symbol '" << start_symbol << "' not found." << std::endl; + exit(EXIT_FAILURE); + } m_log << "Adding '" << opt->arg << "' == 0x" << std::hex << symbol.getAddress() << "+" << std::dec << symbol.getSize() << " to trace map" << std::endl;