summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/target.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/targeting/target.C')
-rw-r--r--src/usr/targeting/target.C53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/usr/targeting/target.C b/src/usr/targeting/target.C
index 714e614bd..10fbab4b8 100644
--- a/src/usr/targeting/target.C
+++ b/src/usr/targeting/target.C
@@ -178,6 +178,59 @@ Target::Target()
#undef TARG_FN
}
+//******************************************************************************
+// Target::targetFFDC()
+//******************************************************************************
+
+char * Target::targetFFDC( uint32_t & o_size ) const
+{
+ #define TARG_FN "targetFFDC(...)"
+
+ char l_buff[128];
+ char *l_pFFDC = NULL;
+ char *l_ptr = NULL;
+ void *l_ptr1 = NULL;
+ uint32_t l_len;
+
+ o_size = sprintf( l_buff, "Class = 0x%X, Type = 0x%X, Model = 0x%X",
+ getAttr<ATTR_CLASS>(),
+ getAttr<ATTR_TYPE>(),
+ getAttr<ATTR_MODEL>() );
+
+ l_pFFDC = static_cast<char*>( malloc( ++o_size ) );
+ memcpy( l_pFFDC, l_buff, o_size );
+
+ l_ptr = getAttr<ATTR_PHYS_PATH>().toString();
+ if (l_ptr)
+ {
+ l_len = strlen( l_ptr ) + 1;
+ l_ptr1 = realloc( l_pFFDC, o_size + l_len );
+ l_pFFDC = static_cast<char*>( l_ptr1 );
+ memcpy( l_pFFDC + o_size, l_ptr, l_len );
+ o_size += l_len;
+ free( l_ptr );
+ }
+
+ EntityPath l_entityPath;
+ if( tryGetAttr<ATTR_AFFINITY_PATH>(l_entityPath) )
+ {
+ l_ptr = l_entityPath.toString();
+ if (l_ptr)
+ {
+ l_len = strlen( l_ptr ) + 1;
+ l_ptr1 = realloc( l_pFFDC, o_size + l_len );
+ l_pFFDC = static_cast<char*>( l_ptr1 );
+ memcpy( l_pFFDC + o_size, l_ptr, l_len );
+ o_size += l_len;
+ free( l_ptr );
+ }
+ }
+
+ return l_pFFDC;
+
+ #undef TARG_FN
+}
+
#undef TARG_CLASS
#undef TARG_NAMESPACE
OpenPOWER on IntegriCloud