diff options
Diffstat (limited to 'src/include/usr/debugpointers.H')
| -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 |

