From caf328ccd931de4ce4e4d285d1a4e5ddd151abb5 Mon Sep 17 00:00:00 2001 From: Mike Jones Date: Tue, 22 Jan 2013 09:41:25 -0600 Subject: ERRL: Create Hostboot error log SRC/UD parser and deliver to FSP bld A new script called genErrlParsers will scan the Hostboot code for error log tags and create a SRC parser for each component. The script will also scan the Hostboot code for plugin directories containing User Detail Data parsers and will create a makefile that is used by the FSP to build each component's SRC/UD parser. Change-Id: I7113f6cd8069447a1caaa199aff199b663d59072 RTC: 47518 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/2975 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- src/include/usr/errl/errludbacktrace.H | 167 +++++---------------------------- 1 file changed, 25 insertions(+), 142 deletions(-) (limited to 'src/include/usr/errl/errludbacktrace.H') diff --git a/src/include/usr/errl/errludbacktrace.H b/src/include/usr/errl/errludbacktrace.H index 193064e36..9d8e8aecf 100644 --- a/src/include/usr/errl/errludbacktrace.H +++ b/src/include/usr/errl/errludbacktrace.H @@ -1,37 +1,33 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/usr/errl/errludbacktrace.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2012 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/errl/errludbacktrace.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ #ifndef ERRL_UDBACKTRACE_H #define ERRL_UDBACKTRACE_H /** * @file errludbacktrace.H * - * Defines the following classes: - * - * ErrlUserDetailsBackTrace: Adds backtrace FFDC to an error log as user detail - * data - * ErrlUserDetailsParserBackTrace: Parses backtrace FFDC user detail in an - * error log + * Defines the ErrlUserDetailsBackTrace class that adds backtrace FFDC to an + * error log as user detail data */ #include @@ -39,13 +35,11 @@ namespace ERRORLOG { -#ifndef PARSER - /** * @class ErrlUserDetailsBackTrace * * Adds backtrace FFDC to an error log as user detail data -*/ + */ class ErrlUserDetailsBackTrace : public ErrlUserDetails { public: @@ -67,117 +61,6 @@ private: ErrlUserDetailsBackTrace & operator=(const ErrlUserDetailsBackTrace &); }; -#else // (if PARSER defined) - -/** - * @class ErrlUserDetailsParserBackTrace - * - * Parses backtrace user detail in an error log -*/ -class ErrlUserDetailsParserBackTrace : public ErrlUserDetailsParser -{ -public: - /** - * @brief Constructor - */ - ErrlUserDetailsParserBackTrace() {} - - /** - * @brief Destructor - */ - virtual ~ErrlUserDetailsParserBackTrace() {} - - /** - * @brief Parses backtrace user detail data from an error log - * - * @param i_version Version of the data - * @param i_parse ErrlUsrParser object for outputting information - * @param i_pBuffer Pointer to buffer containing detail data - * @param i_buflen Length of the buffer - */ - virtual void parse(errlver_t i_version, - ErrlUsrParser & i_parser, - void * i_pBuffer, - const uint32_t i_buflen) const - { - // This buffer contains a number of 64-bit frame pointers. - - // A character vector for storing a backtrace entry and the space - // required for the header (frame number and address (with some padding - // for safety)) and the symbol name. This vector is resized if a longer - // symbol name is encountered. - const uint8_t BACKTRACE_ENTRY_HEADER_SIZE = 32; - const uint8_t BACKTRACE_ENTRY_SYMBOL_SIZE = 64; - std::vector l_traceEntry(BACKTRACE_ENTRY_HEADER_SIZE + - BACKTRACE_ENTRY_SYMBOL_SIZE); - - // Initialize l_the symbol table. - const char * l_pSymFile = "hbicore.syms"; - hbSymbolTable symTab; - int readRC = symTab.readSymbols( l_pSymFile ); - if( readRC ) - { - i_parser.PrintString( "Symbols not found", l_pSymFile ); - // symTab.nearestSymbol() will return NULL because of this. - // Carry on. - } - - const char * l_pErrlEntry = "ErrlEntry::ErrlEntry"; - const char * l_pLabel = "Backtrace"; - - // loop thru the buffer which is an array of 64-bit addresses - uint64_t * p64 = static_cast(i_pBuffer); - int l_count = i_buflen / sizeof( uint64_t ); - for( int i = 0; i < l_count; i++ ) - { - // endian convert the stack address - uint64_t l_addr = ntohll(*p64); - - // get nearest symbol - const char * l_pSymbol = symTab.nearestSymbol( l_addr ); - - if( l_pSymbol ) - { - if( strstr( l_pSymbol, l_pErrlEntry )) - { - // hackish, makes for better looking output - // it's in every backtrace (jan2012) - l_pSymbol = l_pErrlEntry; - } - - uint16_t l_traceSize = - (BACKTRACE_ENTRY_HEADER_SIZE + strlen(l_pSymbol) + 1); - - if (l_traceEntry.size() < l_traceSize) - { - l_traceEntry.resize(l_traceSize); - } - sprintf(&(l_traceEntry[0]), - "#%2d %016llX %s", i, l_addr, l_pSymbol); - } - else - { - sprintf(&(l_traceEntry[0]),"#%2d %016llX", i, l_addr); - } - i_parser.PrintString( l_pLabel, &(l_traceEntry[0]) ); - - // next stack address in the buffer - p64++; - - // don't print the label for subsequent backtraces - l_pLabel = ""; - } - } - -private: - // Disabled - ErrlUserDetailsParserBackTrace(const ErrlUserDetailsParserBackTrace &); - ErrlUserDetailsParserBackTrace & operator=( - const ErrlUserDetailsParserBackTrace &); -}; - -#endif - } #endif -- cgit v1.2.1