Support for callout list FFDC

The FFDC contains relevent fields to a callout that otherwise would not
be displayed in the callout user data section.

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: Iadb71587b7219c4d352fa583ddd86f290de4a747
diff --git a/analyzer/resolution.cpp b/analyzer/resolution.cpp
index fe407b6..a20be83 100644
--- a/analyzer/resolution.cpp
+++ b/analyzer/resolution.cpp
@@ -5,6 +5,8 @@
 namespace analyzer
 {
 
+//------------------------------------------------------------------------------
+
 void HardwareCalloutResolution::resolve(ServiceData& io_sd) const
 {
     // Get the chip target from the root cause signature.
@@ -34,7 +36,15 @@
     io_sd.addCallout(callout);
 
     // Add the guard info to the service data.
-    io_sd.addGuard(entityPath, iv_guard);
+    Guard guard = io_sd.addGuard(entityPath, iv_guard);
+
+    // Add the callout FFDC to the service data.
+    nlohmann::json ffdc;
+    ffdc["Callout Type"] = "Hardware Callout";
+    ffdc["Target"]       = entityPath;
+    ffdc["Priority"]     = iv_priority.getRegistryString();
+    ffdc["Guard Type"]   = guard.getString();
+    io_sd.addCalloutFFDC(ffdc);
 }
 
 //------------------------------------------------------------------------------
@@ -46,6 +56,13 @@
     callout["Procedure"] = iv_procedure.getString();
     callout["Priority"]  = iv_priority.getUserDataString();
     io_sd.addCallout(callout);
+
+    // Add the callout FFDC to the service data.
+    nlohmann::json ffdc;
+    ffdc["Callout Type"] = "Procedure Callout";
+    ffdc["Procedure"]    = iv_procedure.getString();
+    ffdc["Priority"]     = iv_priority.getRegistryString();
+    io_sd.addCalloutFFDC(ffdc);
 }
 
 //------------------------------------------------------------------------------