Minor update: SystemIM

System IM could be corrupted or not supported by the vpd parser.
Capturing that case and logging PEL with a severity "ERROR".

Tested on simics:
-> Corrupt the system vpd IM value at 0x05FB
dd if=/dev/zero of=/sys/bus/i2c/drivers/at24/8-0050/eeprom bs=1 count=1 seek=1531

000005d0  00 50 46 02 00 00 78 84  2c 00 52 54 04 56 53 42  |.PF...x.,.RT.VSB|
000005e0  50 44 52 10 56 50 44 20  52 4f 4f 54 20 4e 4f 44  |PDR.VPD ROOT NOD|
000005f0  45 20 20 20 50 41 01 59  49 4d 04 00 00 10 01 50  |E   PA.YIM.....P|
00000600  46 04 00 00 00 00 78 84  b0 00 52 54 04 56 53 59

-> Execute the vpd parser
root@rainier:/tmp# ./ibm-read-vpd-IM --file /sys/bus/i2c/drivers/at24/8-0050/eeprom
Erroneous/Unsupported IM in System VPD. PEL logged.
std::exception
root@rainier:/tmp#

-> PEL
"Private Header": {
    "Section Version":          "1",
    "Sub-section type":         "0",
    "Created by":               "0x4000",
    "Created at":               "04/21/2021 05:28:21",
    "Committed at":             "04/21/2021 05:28:21",
    "Creator Subsystem":        "BMC",
    "CSSVER":                   "",
    "Platform Log Id":          "0x50000008",
    "Entry Id":                 "0x50000008",
    "BMC Event Log Id":         "8"
},
"User Header": {
    "Section Version":          "1",
    "Sub-section type":         "0",
    "Log Committed by":         "0x2000",
    "Subsystem":                "CEC Hardware: VPD Interface",
    "Event Scope":              "Entire Platform",
    "Event Severity":           "Unrecoverable Error",
    "Event Type":               "Not Applicable",
    "Action Flags": [
                                "Service Action Required",
                                "Report Externally",
                                "HMC Call Home"
    ],
    "Host Transmission":        "Not Sent"
},
"Primary SRC": {
    "Section Version":          "1",
    "Sub-section type":         "1",
    "Created by":               "0x4000",
    "SRC Version":              "0x02",
    "SRC Format":               "0x55",
    "Virtual Progress SRC":     "False",
    "I5/OS Service Event Bit":  "False",
    "Hypervisor Dump Initiated":"False",
    "Power Control Net Fault":  "False",
    "Backplane CCIN":           "",
    "Deconfigured":             "False",
    "Guarded":                  "False",
    "Error Details": {
        "Message":              "A VPD data exception occurred."
    },
    "Valid Word Count":         "0x09",
    "Reference Code":           "BD554001",
    "Hex Word 2":               "00000055",
    "Hex Word 3":               "00000010",
    "Hex Word 4":               "00000000",
    "Hex Word 5":               "00000000",
    "Hex Word 6":               "00000000",
    "Hex Word 7":               "00000000",
    "Hex Word 8":               "00000000",
    "Hex Word 9":               "00000000",
    "Callout Section": {
        "Callout Count":        "1",
        "Callouts": [{
            "FRU Type":         "Normal Hardware FRU",
            "Priority":         "Mandatory, replace all with this type as a unit",
            "Location Code":    "U78DA.ND0.1234567-P0",
            "Part Number":      "F191014",
            "CCIN":             "2E2D",
            "Serial Number":    "YL2E2D010000"
        }]
    }
},
"Extended User Header": {
    "Section Version":          "1",
    "Sub-section type":         "0",
    "Created by":               "0x2000",
    "Reporting Machine Type":   "",
    "Reporting Serial Number":  "",
    "FW Released Ver":          "",
    "FW SubSys Version":        "fw1020.00-18.0",
    "Common Ref Time":          "00/00/0000 00:00:00",
    "Symptom Id Len":           "20",
    "Symptom Id":               "BD554001_00000010"
},
"Failing MTMS": {
    "Section Version":          "1",
    "Sub-section type":         "0",
    "Created by":               "0x2000",
    "Machine Type Model":       "",
    "Serial Number":            ""
},
"User Data 0": {
    "Section Version": "1",
    "Sub-section type": "1",
    "Created by": "0x2000",
    "BMC Version ID": "fw1020.00-18.0-14-g5b4915816",
    "BMCState": "Ready",
    "ChassisState": "Off",
    "HostState": "Off",
    "Process Name": "Unknown"
},
"User Data 1": {
    "Section Version": "1",
    "Sub-section type": "1",
    "Created by": "0x2000",
    "CALLOUT_INVENTORY_PATH": "/xyz/openbmc_project/inventory/system/chassis/motherboard",
    "DESCRIPTION": "System IM value is erroneous/not supported.",
    "INVALID IM VALUE": "00001001"
}
}

Signed-off-by: PriyangaRamasamy <priyanga24@in.ibm.com>
Change-Id: I9301ac73e0b4a7a767861a294ce865804d930a2d
diff --git a/ibm_vpd_app.cpp b/ibm_vpd_app.cpp
index 237d001..ca1dd4d 100644
--- a/ibm_vpd_app.cpp
+++ b/ibm_vpd_app.cpp
@@ -888,6 +888,20 @@
         {
             target = INVENTORY_JSON_EVEREST;
         }
+        else
+        {
+            PelAdditionalData additionalData{};
+            const string& baseFruInventoryPath =
+                js["frus"][filePath][0]["inventoryPath"].get_ref<string&>();
+            additionalData.emplace("CALLOUT_INVENTORY_PATH",
+                                   INVENTORY_PATH + baseFruInventoryPath);
+            additionalData.emplace(
+                "DESCRIPTION", "System IM value is erroneous/not supported.");
+            additionalData.emplace("INVALID IM VALUE", imValStr);
+            createPEL(additionalData, PelSeverity::ERROR, errIntfForInvalidVPD);
+            throw runtime_error(
+                "Erroneous/Unsupported IM in System VPD. PEL logged.");
+        }
 
         // Create the directory for hosting the symlink
         fs::create_directories(VPD_FILES_PATH);
@@ -1032,7 +1046,7 @@
         catch (exception& e)
         {
             postFailAction(js, file);
-            throw e;
+            throw;
         }
     }
     catch (const VpdJsonException& ex)