diff options
| author | Dan Crowell <dcrowell@us.ibm.com> | 2018-03-20 09:20:17 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-06-26 11:18:28 -0400 |
| commit | 0e138b0da002197cc86f601be5b307386a5fdfab (patch) | |
| tree | 9412e5b2803d1022f30b2646ddaefc333a627ac9 /src/include/usr | |
| parent | d2482ab7773d854ec50ffcd7d92bb019a217d4e3 (diff) | |
| download | blackbird-hostboot-0e138b0da002197cc86f601be5b307386a5fdfab.tar.gz blackbird-hostboot-0e138b0da002197cc86f601be5b307386a5fdfab.zip | |
Modify debug framework to be build-independent
During boot, Hostboot will push key pointers into memory. This
allows the debug tools to find the pointers (using a known static
memory address) to base memory accesses on. This replaces the
existing symbol lookup that we use now. That means we don't
need to have the exact symbol file for the build we're debugging
against.
Change-Id: I4618e15a3dc90acc3a89520a502eb818c1b4258c
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56097
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/include/usr')
| -rw-r--r-- | src/include/usr/debugpointers.H | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/include/usr/debugpointers.H b/src/include/usr/debugpointers.H new file mode 100644 index 000000000..01de1a0d8 --- /dev/null +++ b/src/include/usr/debugpointers.H @@ -0,0 +1,117 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/debugpointers.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +#ifndef _DEBUGPOINTERS_H +#define _DEBUGPOINTERS_H + +/** + * This file contains details on a list of pointers that can be used + * by our debug framework without requiring an exact build match. + */ + +// Static space allocated in start.S +// This points to a dynamically allocated instance of a DebugPointers_t +extern void* debug_pointers; + +namespace DEBUG +{ +// Maximum number of entries +constexpr uint16_t MAX_ENTRIES = 20; + +// Eyecatcher to detect levels without this support +// = DEBUGPTR +constexpr uint64_t EYECATCHER = 0x4445425547505452; + +// Only 1 version so far but allow for others +constexpr uint16_t VERSION_LATEST = 0x0001; + +// A pair of pointers +struct PointerPair_t +{ + union { + char label[8]; + uint64_t label_num; //Makes assignments and checking simpler + }; + uint32_t size; // bytes + uint32_t pointer; // we never use all 64-bits of a native pointer +} PACKED; + +// Table of Debug Pointers +struct DebugPointers_t +{ + uint64_t eyecatcher; + uint16_t version; + uint16_t numEntries; + uint32_t reserved; + PointerPair_t pairs[MAX_ENTRIES]; + + DebugPointers_t() + : eyecatcher(EYECATCHER), + version(VERSION_LATEST), + numEntries(MAX_ENTRIES), + reserved(0) + { + memset( pairs, 0, sizeof(pairs) ); + } +} PACKED; + +/* + * List of known debug pointers + * Note: Must keep debug tools in sync if these values change + */ +constexpr uint64_t PRINTK = 0x5052494e544b2020; //'PRINTK ' +constexpr uint64_t TRACESERVICE = 0x5452414345535643; //'TRACESVC' +constexpr uint64_t TRACEDAEMON = 0x5452414345444D4E; //'TRACEDMN' +constexpr uint64_t TASKMANAGER = 0x5441534b4c495354; //'TASKLIST' +constexpr uint64_t ERRORLOGS = 0x4552524f524c4f47; //'ERRORLOG' +constexpr uint64_t HEAPMANAGER = 0x484541504d475220; //'HEAPMGR ' +constexpr uint64_t HEAPMANAGERLARGEPAGECOUNT = 0x484541504d4c5043; //'HEAPMLPC' +constexpr uint64_t HEAPMANAGERLARGEPAGEMAX = 0x484541504d4c504d; //'HEAPMLPM' +constexpr uint64_t HEAPMANAGERSMALLPAGECOUNT = 0x484541504d535043; //'HEAPMSPC' +constexpr uint64_t HEAPMANAGERCOALESCECOUNT = 0x484541504d434e54; //'HEAPMCNT' +constexpr uint64_t HEAPMANAGERFREEBYTES = 0x4845415042595445; //'HEAPBYTE' +constexpr uint64_t HEAPMANAGERFREECHUNKS = 0x4845415043484e4b; //'HEAPCHNK' +constexpr uint64_t PAGEMANAGER = 0x504147454d475220; //'PAGEMGR ' +constexpr uint64_t PAGEMANAGERCOALESCECOUNT = 0x504147454d434e54; //'PAGEMCNT' +constexpr uint64_t PAGEMANAGERLOWPAGECOUNT = 0x504147454d4c5043; //'PAGEMLPC' +constexpr uint64_t SEGMENTMANAGER = 0x53474d4e544d4752; //'SGMNTMGR' +constexpr uint64_t BLOCKREADONLYEVICT = 0x424c4f434b524f45; //'BLOCKROE' +constexpr uint64_t BLOCKREADWRITEEVICT = 0x424c4f434b525745; //'BLOCKRWE' +// Number of values cannot exceed MAX_ENTRIES + + +/* + * @brief Save off a pointer to the master list + * + * @param[in] Pointer Label + * @param[in] Pointer Value + */ +void add_debug_pointer( uint64_t i_label, + void* i_ptr, + size_t i_size ); + +}; //namespace + + +#endif //_DEBUGPOINTERS_H |

