summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2018-03-20 09:20:17 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-06-26 11:18:28 -0400
commit0e138b0da002197cc86f601be5b307386a5fdfab (patch)
tree9412e5b2803d1022f30b2646ddaefc333a627ac9 /src
parentd2482ab7773d854ec50ffcd7d92bb019a217d4e3 (diff)
downloadblackbird-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')
-rwxr-xr-xsrc/build/debug/Hostboot/Errl.pm5
-rwxr-xr-xsrc/build/debug/Hostboot/MemStats.pm64
-rwxr-xr-xsrc/build/debug/Hostboot/PageMgr.pm5
-rw-r--r--src/build/debug/Hostboot/PrintVMM.pm8
-rwxr-xr-xsrc/build/debug/Hostboot/Printk.pm7
-rwxr-xr-xsrc/build/debug/Hostboot/Ps.pm3
-rwxr-xr-xsrc/build/debug/Hostboot/Trace.pm10
-rwxr-xr-xsrc/build/debug/Hostboot/_DebugFramework.pm140
-rwxr-xr-xsrc/build/debug/Hostboot/_DebugFrameworkVMM.pm6
-rwxr-xr-xsrc/build/debug/ecmd-debug-framework.pl15
-rwxr-xr-xsrc/build/debug/hb-dump-debug21
-rwxr-xr-xsrc/build/debug/simics-debug-framework.pl13
-rw-r--r--src/include/kernel/block.H10
-rw-r--r--src/include/kernel/heapmgr.H11
-rw-r--r--src/include/kernel/pagemgr.H8
-rw-r--r--src/include/kernel/segmentmgr.H9
-rw-r--r--src/include/kernel/taskmgr.H14
-rw-r--r--src/include/usr/debugpointers.H117
-rw-r--r--src/kernel/block.C15
-rw-r--r--src/kernel/heapmgr.C33
-rw-r--r--src/kernel/kernel.C51
-rw-r--r--src/kernel/pagemgr.C19
-rw-r--r--src/kernel/segmentmgr.C15
-rw-r--r--src/kernel/start.S8
-rw-r--r--src/kernel/taskmgr.C15
-rw-r--r--src/usr/errl/errlmanager.C5
-rw-r--r--src/usr/trace/daemon/daemon.C7
-rw-r--r--src/usr/trace/service.C7
28 files changed, 578 insertions, 63 deletions
diff --git a/src/build/debug/Hostboot/Errl.pm b/src/build/debug/Hostboot/Errl.pm
index e3484555c..8b248a786 100755
--- a/src/build/debug/Hostboot/Errl.pm
+++ b/src/build/debug/Hostboot/Errl.pm
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2015
+# Contributors Listed Below - COPYRIGHT 2011,2018
# [+] International Business Machines Corp.
#
#
@@ -84,7 +84,8 @@ sub main
}
}
- my ($symAddr, $symSize) = ::findSymbolAddress("ERRORLOG::g_ErrlStorage");
+ my ($symAddr, $symSize) = ::findPointer("ERRORLOG",
+ "ERRORLOG::g_ErrlStorage");
if (not defined $symAddr)
{
::userDisplay "Couldn't find symbol ERRORLOG::g_ErrlStorage\n";
diff --git a/src/build/debug/Hostboot/MemStats.pm b/src/build/debug/Hostboot/MemStats.pm
index 68fcf15e2..9156d8267 100755
--- a/src/build/debug/Hostboot/MemStats.pm
+++ b/src/build/debug/Hostboot/MemStats.pm
@@ -5,7 +5,9 @@
#
# OpenPOWER HostBoot Project
#
-# COPYRIGHT International Business Machines Corp. 2011,2014
+# Contributors Listed Below - COPYRIGHT 2011,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.
@@ -28,6 +30,8 @@ our @EXPORT_OK = ('main');
use constant HEAPMGR_INSTANCE_NAME =>
"Singleton<HeapManager>::instance()::instance";
+use constant PAGEMGR_INSTANCE_NAME =>
+ "Singleton<PageManager>::instance()::instance";
use constant HEAPMGR_CHUNK_OFFSET => 0;
#use constant HEAPMGR_BIGCHUNK_OFFSET => 0;
use constant HEAPMGR_NUMBER_OF_BUCKETS => 12;
@@ -51,11 +55,11 @@ sub main
$showchunks = 1;
}
- my ($heap_manager_addr, $symSize) =
- ::findSymbolAddress(HEAPMGR_INSTANCE_NAME);
+ my ($heap_manager_addr, $symSize) = ::findPointer("HEAPMGR ",
+ HEAPMGR_INSTANCE_NAME);
- my @page_manager_addr =
- ::findSymbolAddress("Singleton<PageManager>::instance()::instance");
+ my @page_manager_addr = ::findPointer("PAGEMGR ",
+ PAGEMGR_INSTANCE_NAME);
my $free_pages =
::read64 @page_manager_addr;
@@ -63,39 +67,49 @@ sub main
my $total_pages =
::read64 ($page_manager_addr[0] + 8, 8);
- my $free_min =
- ::read64 ::findSymbolAddress("PageManager::cv_low_page_count");
+ my $free_min = ::read64
+ ::findPointer("PAGEMLPC",
+ "PageManager::cv_low_page_count");
- my $page_coal =
- ::read64 ::findSymbolAddress("PageManager::cv_coalesce_count");
+ my $page_coal = ::read64
+ ::findPointer("PAGEMCNT",
+ "PageManager::cv_coalesce_count");
- my $big_heap_pages_used =
- ::read32 ::findSymbolAddress("HeapManager::cv_largeheap_page_count");
+ my $big_heap_pages_used = ::read32
+ ::findPointer("HEAPMLPC",
+ "HeapManager::cv_largeheap_page_count");
- my $big_heap_max =
- ::read32 ::findSymbolAddress("HeapManager::cv_largeheap_page_max");
+ my $big_heap_max = ::read32
+ ::findPointer("HEAPMLPM",
+ "HeapManager::cv_largeheap_page_max");
- my $small_heap_pages_used =
- ::read32 ::findSymbolAddress("HeapManager::cv_smallheap_page_count");
+ my $small_heap_pages_used = ::read32
+ ::findPointer("HEAPMSPC",
+ "HeapManager::cv_smallheap_page_count");
- my $heap_coal =
- ::read32 ::findSymbolAddress("HeapManager::cv_coalesce_count");
+ my $heap_coal = ::read32
+ ::findPointer("HEAPMCNT",
+ "HeapManager::cv_coalesce_count");
- my $heap_free =
- ::read32 ::findSymbolAddress("HeapManager::cv_free_bytes");
+ my $heap_free = ::read32
+ ::findPointer("HEAPBYTE",
+ "HeapManager::cv_free_bytes");
- my $heap_free_chunks =
- ::read32 ::findSymbolAddress("HeapManager::cv_free_chunks");
+ my $heap_free_chunks = ::read32
+ ::findPointer("HEAPCHNK",
+ "HeapManager::cv_free_chunks");
my $heap_total = $big_heap_pages_used + $small_heap_pages_used;
my $heap_max = $big_heap_max + $small_heap_pages_used;
- my $castout_ro =
- ::read32 ::findSymbolAddress("Block::cv_ro_evict_req");
+ my $castout_ro = ::read32
+ ::findPointer("BLOCKROE",
+ "Block::cv_ro_evict_req");
- my $castout_rw =
- ::read32 ::findSymbolAddress("Block::cv_rw_evict_req");
+ my $castout_rw = ::read32
+ ::findPointer("BLOCKRWE",
+ "Block::cv_rw_evict_req");
::userDisplay "===================================================\n";
diff --git a/src/build/debug/Hostboot/PageMgr.pm b/src/build/debug/Hostboot/PageMgr.pm
index d0d73f3d8..faa70253e 100755
--- a/src/build/debug/Hostboot/PageMgr.pm
+++ b/src/build/debug/Hostboot/PageMgr.pm
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2012,2016
+# Contributors Listed Below - COPYRIGHT 2012,2018
# [+] International Business Machines Corp.
#
#
@@ -54,7 +54,8 @@ sub main
}
# Find the PageManager
- my ($symAddr, $symSize) = ::findSymbolAddress(PAGEMGR_INSTANCE_NAME);
+ my ($symAddr, $symSize) = ::findPointer("PAGEMGR ",
+ PAGEMGR_INSTANCE_NAME);
if (not defined $symAddr)
{
::userDisplay "Couldn't find ".PAGEMGR_INSTANCE_NAME;
diff --git a/src/build/debug/Hostboot/PrintVMM.pm b/src/build/debug/Hostboot/PrintVMM.pm
index 390a9b4b6..476262d93 100644
--- a/src/build/debug/Hostboot/PrintVMM.pm
+++ b/src/build/debug/Hostboot/PrintVMM.pm
@@ -5,7 +5,9 @@
#
# OpenPOWER HostBoot Project
#
-# COPYRIGHT International Business Machines Corp. 2012,2014
+# Contributors Listed Below - COPYRIGHT 2012,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.
@@ -68,8 +70,8 @@ sub main
}
# Get the device segment address
- my @segment_manager_addr =
- ::findSymbolAddress("Singleton<SegmentManager>::instance()::instance");
+ my @segment_manager_addr = ::findPointer("SGMNTMGR",
+ "Singleton<SegmentManager>::instance()::instance");
if (not defined @segment_manager_addr)
{
diff --git a/src/build/debug/Hostboot/Printk.pm b/src/build/debug/Hostboot/Printk.pm
index 8f933145c..b7dd49546 100755
--- a/src/build/debug/Hostboot/Printk.pm
+++ b/src/build/debug/Hostboot/Printk.pm
@@ -6,7 +6,9 @@
#
# OpenPOWER HostBoot Project
#
-# COPYRIGHT International Business Machines Corp. 2011,2014
+# Contributors Listed Below - COPYRIGHT 2011,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.
@@ -30,7 +32,8 @@ our @EXPORT_OK = ('main');
sub main
{
- my ($symAddr, $symSize) = ::findSymbolAddress("kernel_printk_buffer");
+ my ($symAddr, $symSize) = ::findPointer("PRINTK ",
+ "kernel_printk_buffer");
if (not defined $symAddr) { ::userDisplay "Cannot find symbol.\n"; die; }
my $data = ::readData($symAddr,$symSize);
$data =~ s/\0+//g; #strip off nulls
diff --git a/src/build/debug/Hostboot/Ps.pm b/src/build/debug/Hostboot/Ps.pm
index 134bc6ae8..594f124e0 100755
--- a/src/build/debug/Hostboot/Ps.pm
+++ b/src/build/debug/Hostboot/Ps.pm
@@ -67,7 +67,8 @@ sub main
# Find symbol containing kernel list of task objects.
# (Tasks who's parent is the kernel)
- my ($symAddr, $symSize) = ::findSymbolAddress(PS_TASKMGR_SYMBOLNAME);
+ my ($symAddr, $symSize) = ::findPointer("TASKLIST",
+ PS_TASKMGR_SYMBOLNAME);
if (not defined $symAddr)
{
::userDisplay "Couldn't find ".PS_TASKMGR_SYMBOLNAME;
diff --git a/src/build/debug/Hostboot/Trace.pm b/src/build/debug/Hostboot/Trace.pm
index 23286b48c..4756de305 100755
--- a/src/build/debug/Hostboot/Trace.pm
+++ b/src/build/debug/Hostboot/Trace.pm
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2016
+# Contributors Listed Below - COPYRIGHT 2011,2018
# [+] International Business Machines Corp.
#
#
@@ -75,11 +75,11 @@ sub main
my $foundBuffer = 0;
print $fh "\2";
- my ($daemonAddr, $daemonSize) =
- ::findSymbolAddress("Singleton<TRACEDAEMON::Daemon>::instance()::instance");
+ my ($daemonAddr, $daemonSize) =::findPointer("TRACEDMN",
+ "Singleton<TRACEDAEMON::Daemon>::instance()::instance");
- my ($serviceAddr, $serviceSize) =
- ::findSymbolAddress("Singleton<TRACE::Service>::instance()::instance");
+ my ($serviceAddr, $serviceSize) = ::findPointer("TRACESVC",
+ "Singleton<TRACE::Service>::instance()::instance");
if ((not defined $daemonAddr) || (not defined $serviceAddr))
{
diff --git a/src/build/debug/Hostboot/_DebugFramework.pm b/src/build/debug/Hostboot/_DebugFramework.pm
index 8937f4f6d..4977eedeb 100755
--- a/src/build/debug/Hostboot/_DebugFramework.pm
+++ b/src/build/debug/Hostboot/_DebugFramework.pm
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2017
+# Contributors Listed Below - COPYRIGHT 2011,2018
# [+] International Business Machines Corp.
#
#
@@ -56,6 +56,7 @@ our @EXPORT = ( 'setBootloader', 'clearBootloader', 'callToolModule',
'getIstepList',
'findSymbolWithinAddrRange',
'alignUp',
+ 'findDebugPointer', 'findPointer',
);
our ($parsedSymbolFile, %symbolAddress, %symbolTOC,
@@ -63,6 +64,11 @@ our ($parsedSymbolFile, %symbolAddress, %symbolTOC,
our ($parsedModuleFile, %moduleAddress);
our (%toolOpts);
our ($bootloaderDebug);
+our (%debugPointerAddrs, %debugPointerSizes, $parsedDebugPointers);
+
+# HOSTBOOT eyecatcher at HRMOR+8K+16
+use constant DEBUG_PTR_ADDR => 8208;
+
BEGIN
{
@@ -71,6 +77,9 @@ BEGIN
%symbolTOC = ();
%addressSymbol = ();
%addrRangeHash = ();
+ %debugPointerAddrs = ();
+ %debugPointerSizes = ();
+ $parsedDebugPointers = 0;
%symbolSize = ();
@@ -365,9 +374,103 @@ sub parseSymbolFile
$parsedSymbolFile = 1;
}
+# @sub parseDebugPointers <INTERNAL ONLY>
+#
+# Parses the debug pointers area of memory.
+# See debugpointers.H for implementation details
+#
+# @return array of (address, size) or (not-defined, not-defined).
+#
+sub parseDebugPointers
+{
+ if ($parsedDebugPointers) { return; }
+
+ # The pointer to the DebugPointers_t sits right behind the
+ #my $debugptr = translateHRMOR(DEBUG_PTR_ADDR);
+ #::userDisplay("Reading $debugptr\n");
+ my $mainptr = ::read64(DEBUG_PTR_ADDR);
+ #::userDisplay("mainptr=$mainptr\n");
+ if( $mainptr == 0 )
+ {
+ ::userDisplay("No debug pointer set at 0x2010\n");
+ }
+ elsif( $mainptr > 0x4000000 )
+ {
+ ::userDisplay("Debug pointer area appears invalid - $mainptr\n");
+ }
+ else
+ {
+ #::userDisplay("Found debug pointer at $mainptr\n");
+ #uint64_t eyecatcher;
+ #uint16_t version;
+ #uint16_t numEntries;
+ #uint32_t reserved;
+ #PointerPair_t pairs[MAX_ENTRIES];
+
+ # Pull down the metadata
+ my $eyecatcher = ::read64($mainptr);
+ #::userDisplay("eyecatcher=$eyecatcher\n");
+ my $version = ::read16($mainptr+8);
+ #::userDisplay("version=$version\n");
+ my $numentries = ::read16($mainptr+10);
+ #::userDisplay("numentries=$numentries\n");
+ if( $eyecatcher != 0x4445425547505452 ) #DEBUGPTR
+ {
+ ::userDisplay("Invalid debug pointer at $mainptr\n");
+ }
+
+ # Walk through all of the pointers
+ #char label[8];
+ #uint32_t size;
+ #uint32_t pointer;
+
+ my $curentry = $mainptr+16;
+ for(my $i = 0; $i < $numentries; $i++)
+ {
+ #::userDisplay("i=$i, curentry=$curentry\n");
+ my $cur_label = ::read64($curentry);
+ my $cur_label2 = sprintf("%X",$cur_label);
+ my $cur_size = ::read32($curentry+8);
+ my $cur_ptr = ::read32($curentry+12);
+ if( $cur_label != 0 )
+ {
+ #my $cur_ascii = pack( "A*", $cur_label2 );
+ #::userDisplay(
+ # "$cur_label2 / $cur_ascii is at $cur_ptr for $cur_size\n");
+ $debugPointerAddrs{$cur_label2} = $cur_ptr;
+ $debugPointerSizes{$cur_label2} = $cur_size;
+ }
+
+ $curentry = $curentry+16;
+ }
+ }
+
+ $parsedDebugPointers = 1;
+}
+
+# @sub findDebugPointer
+#
+# Searches a syms file for the address of a particular symbol name.
+#
+# @param string - Symbol to search for.
+# @return array of (address, size) or (not-defined, not-defined).
+#
+sub findDebugPointer
+{
+ my $name = shift;
+
+ parseDebugPointers();
+ #::userDisplay("name=$name\n");
+ # need to turn this string into hex digits
+ my $name2 = uc(unpack( "H*", $name ));
+ #::userDisplay("name2=$name2\n");
+
+ return ($debugPointerAddrs{$name2}, $debugPointerSizes{$name2} );
+}
+
# @sub findSymbolAddress
#
-# Searchs a syms file for the address of a particular symbol name.
+# Searches a syms file for the address of a particular symbol name.
#
# @param string - Symbol to search for.
# @return array of (address, size) or (not-defined, not-defined).
@@ -381,6 +484,39 @@ sub findSymbolAddress
return ($symbolAddress{$name}, $symbolSize{$name} );
}
+# @sub findPointer
+#
+# Searches for a pointer wherever it can be found.
+# Looks in the debug pointer section of memory first, then
+# tries to use the symbols
+#
+# @param string - Debug pointer to search for.
+# @param string - Symbol to search for.
+# @return array of (address, size) or (not-defined, not-defined).
+#
+sub findPointer
+{
+ my $dbgptrstr = shift; #Debug Pointer
+ my $sym = shift; #Symbol
+ my $addr;
+ my $size;
+
+ my $symsmode = ::getSymsMode();
+ if( ($symsmode =~ "") || ($symsmode =~ "usemem") )
+ {
+ ($addr, $size ) = findDebugPointer( $dbgptrstr );
+ }
+
+ if( (($symsmode =~ "") && (not defined $addr))
+ || ($symsmode =~ "usefile") )
+ {
+ #::userDisplay( "*Using Symbol File*\n" );
+ ($addr, $size ) = findSymbolAddress( $sym );
+ }
+
+ return ( $addr, $size );
+}
+
# @sub findSymbolTOCAddress
# Searches a syms file for the address of the TOC of a symbol.
#
diff --git a/src/build/debug/Hostboot/_DebugFrameworkVMM.pm b/src/build/debug/Hostboot/_DebugFrameworkVMM.pm
index e51e195a3..128df4ec7 100755
--- a/src/build/debug/Hostboot/_DebugFrameworkVMM.pm
+++ b/src/build/debug/Hostboot/_DebugFrameworkVMM.pm
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2012,2015
+# Contributors Listed Below - COPYRIGHT 2012,2018
# [+] International Business Machines Corp.
#
#
@@ -400,8 +400,8 @@ sub getPhysicalAddr
#}
# Get the device segment address
- my @segment_manager_addr =
- ::findSymbolAddress("Singleton<SegmentManager>::instance()::instance");
+ my @segment_manager_addr = ::findPointer("SGMNTMGR",
+ "Singleton<SegmentManager>::instance()::instance");
if (not defined @segment_manager_addr)
diff --git a/src/build/debug/ecmd-debug-framework.pl b/src/build/debug/ecmd-debug-framework.pl
index 0fadd554b..cbdbbad83 100755
--- a/src/build/debug/ecmd-debug-framework.pl
+++ b/src/build/debug/ecmd-debug-framework.pl
@@ -67,6 +67,11 @@ if (not $self)
$tool = basename $0;
}
+# "" : Default - Try to use memory, fall-back to symbol files
+# "usefile" : Only use the symbol files
+# "usemem" : Only use the data from memory
+my $useSymsMode = "";
+
GetOptions("tool:s" => \$tool,
"tool-options:s" => \$toolOptions,
"test" => \$testImage,
@@ -77,6 +82,7 @@ GetOptions("tool:s" => \$tool,
"node:i" => \$node,
"proc:i" => \$proc,
"memmode:s" => \$memMode,
+ "symsmode:s" => \$useSymsMode,
"man" => \$cfgMan) || pod2usage(-verbose => 0);
pod2usage(-verbose => 1) if $cfgHelp;
pod2usage(-verbose => 2) if $cfgMan;
@@ -125,6 +131,15 @@ sub getImgPath
return $imgPath;
}
+# @sub getSymsMode
+#
+# Return whether we should use symbol files or pointers from memory.
+#
+sub getSymsMode
+{
+ return $useSymsMode;
+}
+
# @sub getIsTest
#
# Return boolean to determine if tools should look at test debug files or
diff --git a/src/build/debug/hb-dump-debug b/src/build/debug/hb-dump-debug
index 50972ff45..3aeffe02e 100755
--- a/src/build/debug/hb-dump-debug
+++ b/src/build/debug/hb-dump-debug
@@ -6,7 +6,9 @@
#
# OpenPOWER HostBoot Project
#
-# COPYRIGHT International Business Machines Corp. 2011,2014
+# Contributors Listed Below - COPYRIGHT 2011,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.
@@ -50,17 +52,23 @@ if (defined ($hbDir))
}
}
+# "both" : Try to use memory, fall-back to symbol files
+# "usefile" : Only use the symbol files
+# "usemem" : Only use the data from memory
+my $useSymsMode = "both";
+
GetOptions("tool:s" => \$tool,
"tool-options:s" => \$toolOptions,
"file:s" => \$dumpfile,
"test" => \$testImage,
"img-path:s" => \$imgPath,
+ "symsmode:s" => \$useSymsMode,
"help" => \$cfgHelp,
"toolhelp" => \$toolHelp,
"man" => \$cfgMan) || pod2usage(-verbose => 0);
pod2usage(-verbose => 1) if $cfgHelp;
pod2usage(-verbose => 2) if $cfgMan;
-pod2usage(-verbose => 0) if (($tool eq "") ||
+pod2usage(-verbose => 0) if (($tool eq "") ||
(($dumpfile eq "") && (!$toolHelp)));
if ($toolHelp)
@@ -133,6 +141,15 @@ sub getImgPath
return $imgPath;
}
+# @sub getSymsMode
+#
+# Return whether we should use symbol files or pointers from memory.
+#
+sub getSymsMode
+{
+ return $useSymsMode;
+}
+
# @sub getIsTest
#
# Return boolean to determine if tools should look at test debug files or
diff --git a/src/build/debug/simics-debug-framework.pl b/src/build/debug/simics-debug-framework.pl
index 932a30f84..1a16db647 100755
--- a/src/build/debug/simics-debug-framework.pl
+++ b/src/build/debug/simics-debug-framework.pl
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2016
+# Contributors Listed Below - COPYRIGHT 2011,2018
# [+] Google Inc.
# [+] International Business Machines Corp.
#
@@ -157,6 +157,17 @@ sub getImgPath
return $imgPath;
}
+# @sub getSymsMode
+#
+# Return whether we should use symbol files or pointers from memory.
+# "usefile" : Only use the symbol files
+#
+sub getSymsMode
+{
+ # We're always running from a build of some sort in simics
+ return "usefile";
+}
+
# Tool location override.
sub getToolOverride
{
diff --git a/src/include/kernel/block.H b/src/include/kernel/block.H
index 80f62b3e0..219c7d3e2 100644
--- a/src/include/kernel/block.H
+++ b/src/include/kernel/block.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2014 */
+/* Contributors Listed Below - COPYRIGHT 2011,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. */
@@ -149,6 +151,11 @@ class Block
void updateRefCount( uint64_t i_vaddr,
PageTableManager::UsageStats_t i_stats );
+ /**
+ * Add pointers to the global debug area
+ */
+ static void addDebugPointers();
+
friend class Segment;
friend class BaseSegment;
friend class StackSegment;
@@ -285,7 +292,6 @@ class Block
uint64_t i_size, task_t* i_task);
-
private:
/** Base address of the block */
const uint64_t iv_baseAddr;
diff --git a/src/include/kernel/heapmgr.H b/src/include/kernel/heapmgr.H
index 9f1d0a7ed..8710e40c7 100644
--- a/src/include/kernel/heapmgr.H
+++ b/src/include/kernel/heapmgr.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2010,2017 */
+/* Contributors Listed Below - COPYRIGHT 2010,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -116,6 +116,10 @@ class HeapManager
*/
static void free(void * i_ptr);
+ /**
+ * Add pointers to the global debug area
+ */
+ static void addDebugPointers();
protected:
@@ -224,6 +228,11 @@ class HeapManager
*/
void test_pages();
+ /**
+ * Add pointers to the global debug area
+ */
+ void _addDebugPointers();
+
private: // data
Util::Lockfree::Stack<chunk_t> first_chunk[BUCKETS]; //!< free pool
diff --git a/src/include/kernel/pagemgr.H b/src/include/kernel/pagemgr.H
index c842a9360..2431c613d 100644
--- a/src/include/kernel/pagemgr.H
+++ b/src/include/kernel/pagemgr.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2010,2016 */
+/* Contributors Listed Below - COPYRIGHT 2010,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -181,6 +181,11 @@ class PageManager
*/
static void addMemory(size_t i_addr, size_t i_pageCount);
+ /**
+ * Add pointers to the global debug area
+ */
+ static void addDebugPointers();
+
enum
{
KERNEL_HEAP_RESERVED_PAGES = 4,
@@ -208,6 +213,7 @@ class PageManager
void _freePage(void*, size_t); //!< see freePage()
void _coalesce( void ); //!< see coalesce()
void _addMemory(size_t, size_t); //!< see addMemory()
+ void _addDebugPointers(); //!< see addDebugPointers()
/** see queryAvail() */
ALWAYS_INLINE uint64_t _queryAvail() const
diff --git a/src/include/kernel/segmentmgr.H b/src/include/kernel/segmentmgr.H
index 34bbe8fb6..2534590bc 100644
--- a/src/include/kernel/segmentmgr.H
+++ b/src/include/kernel/segmentmgr.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2015 */
+/* Contributors Listed Below - COPYRIGHT 2011,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -154,6 +154,10 @@ class SegmentManager
*/
static int devUnmap(void* ea);
+ /**
+ * Add pointers to the global debug area
+ */
+ static void addDebugPointers();
private:
@@ -188,6 +192,9 @@ class SegmentManager
return i_addr >> SLBE_s;
}
+ /** See addDebugPointers */
+ void _addDebugPointers();
+
/** Array of segment objects to associated segment IDs. */
Segment* iv_segments[MAX_SEGMENTS];
};
diff --git a/src/include/kernel/taskmgr.H b/src/include/kernel/taskmgr.H
index 2b2e17f34..71dc6cfc9 100644
--- a/src/include/kernel/taskmgr.H
+++ b/src/include/kernel/taskmgr.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2010,2014 */
+/* Contributors Listed Below - COPYRIGHT 2010,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. */
@@ -144,6 +146,11 @@ class TaskManager
static void waitTask(task_t* t, int64_t tid,
int* status, void** retval);
+ /**
+ * Add pointers to the global debug area
+ */
+ static void addDebugPointers();
+
friend class CpuManager;
protected:
@@ -174,6 +181,11 @@ class TaskManager
*/
void removeTracker(task_tracking_t* t);
+ /**
+ * Add pointers to the global debug area
+ */
+ void _addDebugPointers();
+
/** Atomic monotonically increasing counter to use for TIDs. */
Util::Lockfree::Counter<tid_t> iv_nextTid;
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
diff --git a/src/kernel/block.C b/src/kernel/block.C
index ecb11ff0c..b80db2aac 100644
--- a/src/kernel/block.C
+++ b/src/kernel/block.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2014 */
+/* Contributors Listed Below - COPYRIGHT 2011,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. */
@@ -42,6 +44,7 @@
#include <usr/vmmconst.h>
#include <new>
+#include <usr/debugpointers.H>
// Track eviction requests due to aging pages
uint32_t Block::cv_ro_evict_req = 0;
@@ -708,3 +711,13 @@ void Block::releaseSPTE(ShadowPTE* i_pte)
i_pte->setPageAddr(NULL);
}
+
+void Block::addDebugPointers()
+{
+ DEBUG::add_debug_pointer(DEBUG::BLOCKREADONLYEVICT,
+ &cv_ro_evict_req,
+ sizeof(cv_ro_evict_req));
+ DEBUG::add_debug_pointer(DEBUG::BLOCKREADWRITEEVICT,
+ &cv_rw_evict_req,
+ sizeof(cv_rw_evict_req));
+}
diff --git a/src/kernel/heapmgr.C b/src/kernel/heapmgr.C
index b473eb05c..643774f52 100644
--- a/src/kernel/heapmgr.C
+++ b/src/kernel/heapmgr.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2010,2017 */
+/* Contributors Listed Below - COPYRIGHT 2010,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -30,6 +30,7 @@
#include <kernel/pagemgr.H>
#include <util/align.H>
#include <arch/ppc.H>
+#include <usr/debugpointers.H>
#ifdef HOSTBOOT_DEBUG
#define SMALL_HEAP_PAGES_TRACKED 64
@@ -75,6 +76,11 @@ void HeapManager::init()
Singleton<HeapManager>::instance();
}
+void HeapManager::addDebugPointers()
+{
+ Singleton<HeapManager>::instance()._addDebugPointers();
+}
+
void * HeapManager::allocate(size_t i_sz)
{
HeapManager& hmgr = Singleton<HeapManager>::instance();
@@ -622,3 +628,28 @@ bool HeapManager::_freeBig(void* i_ptr)
return result;
}
+void HeapManager::_addDebugPointers()
+{
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGER,
+ this,
+ sizeof(HeapManager));
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGERLARGEPAGECOUNT,
+ &cv_largeheap_page_count,
+ sizeof(HeapManager::cv_largeheap_page_count));
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGERLARGEPAGEMAX,
+ &cv_largeheap_page_max,
+ sizeof(HeapManager::cv_largeheap_page_max));
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGERSMALLPAGECOUNT,
+ &cv_smallheap_page_count,
+ sizeof(HeapManager::cv_smallheap_page_count));
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGERCOALESCECOUNT,
+ &cv_coalesce_count,
+ sizeof(HeapManager::cv_coalesce_count));
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGERFREEBYTES,
+ &cv_free_bytes,
+ sizeof(HeapManager::cv_free_bytes));
+ DEBUG::add_debug_pointer(DEBUG::HEAPMANAGERFREECHUNKS,
+ &cv_free_chunks,
+ sizeof(HeapManager::cv_free_chunks));
+}
+
diff --git a/src/kernel/kernel.C b/src/kernel/kernel.C
index e78dca726..da9470546 100644
--- a/src/kernel/kernel.C
+++ b/src/kernel/kernel.C
@@ -41,13 +41,16 @@
#include <securerom/sha512.H>
#include <kernel/bltohbdatamgr.H>
#include <kernel/cpuid.H>
+#include <usr/debugpointers.H>
+#include <kernel/segmentmgr.H>
+#include <kernel/block.H>
#include <stdlib.h>
extern "C" void kernel_dispatch_task();
extern void* init_main(void* unused);
extern uint64_t kernel_other_thread_spinlock;
-
+extern char hbi_ImageId[];
class Kernel
{
@@ -101,7 +104,8 @@ const Bootloader::BlToHbData* getBlToHbData()
extern "C"
int main()
{
- printk("Booting %s kernel...\n\n", "Hostboot");
+ printk("Booting %s kernel...\n", "Hostboot");
+ printk("%s\n\n", hbi_ImageId);
printk("CPU=%s PIR=%ld\n",
ProcessorCoreTypeStrings[CpuID::getCpuType()],
static_cast<uint64_t>(getPIR()));
@@ -135,6 +139,18 @@ int main()
// Let FSP/BMC know that Hostboot is now running
KernelMisc::setHbScratchStatus(KernelMisc::HB_RUNNING);
+ // Initialize the debug pointer area
+ debug_pointers = new DEBUG::DebugPointers_t();
+ DEBUG::add_debug_pointer(DEBUG::PRINTK,
+ kernel_printk_buffer,
+ sizeof(kernel_printk_buffer));
+ printk("Debug @ %p\n", debug_pointers);
+ HeapManager::addDebugPointers();
+ PageManager::addDebugPointers();
+ TaskManager::addDebugPointers();
+ SegmentManager::addDebugPointers();
+ Block::addDebugPointers();
+
kernel.inittaskBootstrap();
// Ready to let the other CPUs go.
@@ -193,3 +209,34 @@ void Kernel::inittaskBootstrap()
TaskManager::setCurrentTask(t);
}
+
+namespace DEBUG
+{
+void add_debug_pointer( uint64_t i_label,
+ void* i_ptr,
+ size_t i_size )
+{
+ if( debug_pointers != nullptr )
+ {
+ for( auto i = 0; i < MAX_ENTRIES; i++ )
+ {
+ if( 0 == ((DebugPointers_t*)debug_pointers)->pairs[i].label_num )
+ {
+ ((DebugPointers_t*)debug_pointers)->pairs[i].label_num
+ = i_label;
+ ((DebugPointers_t*)debug_pointers)->pairs[i].pointer =
+ (uint32_t)((uint64_t)i_ptr); //using forced cast on purpose
+ ((DebugPointers_t*)debug_pointers)->pairs[i].size =
+ static_cast<uint32_t>(i_size);
+ break;
+ }
+ }
+ }
+ else
+ {
+ printk("No debug pointer set for %.16lX\n",i_label);
+ MAGIC_INSTRUCTION(MAGIC_BREAK);
+ }
+ //NOTE: This is called by kernel code so do not add any traces
+}
+};
diff --git a/src/kernel/pagemgr.C b/src/kernel/pagemgr.C
index 42545470a..bfc1bbf7a 100644
--- a/src/kernel/pagemgr.C
+++ b/src/kernel/pagemgr.C
@@ -38,6 +38,7 @@
#include <kernel/memstate.H>
#include <kernel/bltohbdatamgr.H>
#include <kernel/misc.H>
+#include <usr/debugpointers.H>
size_t PageManager::cv_coalesce_count = 0;
@@ -205,6 +206,11 @@ uint64_t PageManager::availPages()
return Singleton<PageManager>::instance()._availPages();
}
+void PageManager::addDebugPointers()
+{
+ return Singleton<PageManager>::instance()._addDebugPointers();
+}
+
PageManager::PageManager()
: iv_pagesAvail(0), iv_pagesTotal(0), iv_lock()
{
@@ -478,3 +484,16 @@ void PageManager::_addMemory(size_t i_addr, size_t i_pageCount)
return;
}
+
+void PageManager::_addDebugPointers()
+{
+ DEBUG::add_debug_pointer(DEBUG::PAGEMANAGER,
+ this,
+ sizeof(PageManager));
+ DEBUG::add_debug_pointer(DEBUG::PAGEMANAGERLOWPAGECOUNT,
+ &PageManager::cv_low_page_count,
+ sizeof(PageManager::cv_low_page_count));
+ DEBUG::add_debug_pointer(DEBUG::PAGEMANAGERCOALESCECOUNT,
+ &PageManager::cv_coalesce_count,
+ sizeof(PageManager::cv_coalesce_count));
+}
diff --git a/src/kernel/segmentmgr.C b/src/kernel/segmentmgr.C
index 73caaf76f..9cf88de90 100644
--- a/src/kernel/segmentmgr.C
+++ b/src/kernel/segmentmgr.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2015 */
+/* Contributors Listed Below - COPYRIGHT 2011,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -31,6 +31,7 @@
#include <kernel/segmentmgr.H>
#include <kernel/segment.H>
#include <kernel/devicesegment.H>
+#include <usr/debugpointers.H>
bool SegmentManager::handlePageFault(task_t* i_task, uint64_t i_addr,
bool i_store)
@@ -77,6 +78,11 @@ int SegmentManager::devUnmap(void* ea)
return Singleton<SegmentManager>::instance()._devUnmap(ea);
}
+void SegmentManager::addDebugPointers()
+{
+ Singleton<SegmentManager>::instance()._addDebugPointers();
+}
+
bool SegmentManager::_handlePageFault(task_t* i_task, uint64_t i_addr,
bool i_store)
{
@@ -200,4 +206,9 @@ int SegmentManager::_devUnmap(void* ea)
return reinterpret_cast<DeviceSegment*>(iv_segments[segId])->devUnmap(ea);
}
-
+void SegmentManager::_addDebugPointers()
+{
+ DEBUG::add_debug_pointer(DEBUG::SEGMENTMANAGER,
+ this,
+ sizeof(SegmentManager));
+}
diff --git a/src/kernel/start.S b/src/kernel/start.S
index 979235276..1e2b53cd6 100644
--- a/src/kernel/start.S
+++ b/src/kernel/start.S
@@ -276,6 +276,14 @@ kernel_descriptor:
.byte 'H', 'O', 'S', 'T', 'B', 'O', 'O', 'T'
.quad kernel_hbDescriptor
+;// Hostboot debug pointers.
+;//
+;// This points to a table of pointers to be used by the debug tools
+;// See debugpointers.H for details
+.global debug_pointers
+debug_pointers:
+ .space 8
+
;// _main:
;// Set up stack and TOC and call kernel's main.
diff --git a/src/kernel/taskmgr.C b/src/kernel/taskmgr.C
index 03b3d0073..274ad42cc 100644
--- a/src/kernel/taskmgr.C
+++ b/src/kernel/taskmgr.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2010,2015 */
+/* Contributors Listed Below - COPYRIGHT 2010,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -36,6 +36,7 @@
#include <string.h>
#include <limits.h>
#include <assert.h>
+#include <usr/debugpointers.H>
extern "C" void userspace_task_entry();
extern "C" void task_end_stub();
@@ -80,6 +81,11 @@ void TaskManager::waitTask(task_t* t, int64_t tid, int* status, void** retval)
Singleton<TaskManager>::instance()._waitTask(t,tid,status,retval);
}
+void TaskManager::addDebugPointers()
+{
+ Singleton<TaskManager>::instance()._addDebugPointers();
+}
+
task_t* TaskManager::_createIdleTask()
{
return this->_createTask(&TaskManager::idleTaskLoop, NULL, false, true);
@@ -373,3 +379,10 @@ void TaskManager::removeTracker(task_tracking_t* t)
// Delete tracker object.
delete t;
}
+
+void TaskManager::_addDebugPointers()
+{
+ DEBUG::add_debug_pointer(DEBUG::TASKMANAGER,
+ this,
+ sizeof(TaskManager));
+}
diff --git a/src/usr/errl/errlmanager.C b/src/usr/errl/errlmanager.C
index 4476640f7..d3dd871aa 100644
--- a/src/usr/errl/errlmanager.C
+++ b/src/usr/errl/errlmanager.C
@@ -54,6 +54,7 @@
#include <functional>
#include <hwas/common/deconfigGard.H>
#include <kernel/terminate.H>
+#include <debugpointers.H>
namespace ERRORLOG
{
@@ -153,6 +154,10 @@ ErrlManager::ErrlManager() :
l_pMarker->length = 0;
#endif
+ DEBUG::add_debug_pointer(DEBUG::ERRORLOGS,
+ &g_ErrlStorage,
+ 4);
+
// to determine the starting log ID, we need to do this in 2 steps
// first, determine our node
// BYTE 0 of the PLID is the ID: 0x9# where # is the node instance.
diff --git a/src/usr/trace/daemon/daemon.C b/src/usr/trace/daemon/daemon.C
index a7e895b0a..8ebb24e74 100644
--- a/src/usr/trace/daemon/daemon.C
+++ b/src/usr/trace/daemon/daemon.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2017 */
+/* Contributors Listed Below - COPYRIGHT 2012,2018 */
/* [+] Google Inc. */
/* [+] International Business Machines Corp. */
/* */
@@ -50,6 +50,7 @@
#include <config.h>
#include <console/consoleif.H>
#include <util/utilmbox_scratch.H>
+#include <debugpointers.H>
namespace TRACE
{
@@ -75,6 +76,10 @@ namespace TRACEDAEMON
Daemon::Daemon() : iv_service(NULL), iv_totalPruned(0)
{
iv_first = iv_last = BufferPage::allocate(true);
+
+ DEBUG::add_debug_pointer(DEBUG::TRACEDAEMON,
+ this,
+ sizeof(TRACEDAEMON::Daemon));
}
Daemon::~Daemon()
diff --git a/src/usr/trace/service.C b/src/usr/trace/service.C
index a3445c2ee..260f71e2b 100644
--- a/src/usr/trace/service.C
+++ b/src/usr/trace/service.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2016 */
+/* Contributors Listed Below - COPYRIGHT 2012,2018 */
/* [+] Google Inc. */
/* [+] International Business Machines Corp. */
/* */
@@ -42,6 +42,7 @@
#include <stdio.h>
#include <ctype.h>
#include <util/sprintf.H>
+#include <debugpointers.H>
namespace TRACE
@@ -55,6 +56,10 @@ namespace TRACE
// initialize tracelite setting to off
iv_traceLite = 0;
+
+ DEBUG::add_debug_pointer(DEBUG::TRACESERVICE,
+ this,
+ sizeof(TRACE::Service));
}
Service::~Service()
OpenPOWER on IntegriCloud