Support to stringify CPER output
Initial commit to add a "message" property that provides a single line
description of some important properties. This makes it easier to parse
multiple CPERs in crowded logs.
For now, "message" is supported for nvidia, arm processor and memory
types. The other types contain generic messages.
Example output:
```
"sections":[
{
"message":"A Corrected CCPLEXSCF NVIDIA Error occurred on CPU 0",
"Nvidia":{
"signature":"CCPLEXSC",
"sections":[
{
"message":"An ARM Processor Error occurred on CPU 0; Error Type(s): {Cache Error at Virtual Addr=0x41D6AA12D528 Physical Addr=0x80003A198DDA10}",
"ArmProcessor":{
"errorInfoNum":1,
"sections":[
{
"message":"A Multi-bit ECC Memory Error occurred at address 0x0000000080000000 at node 0",
```
Change-Id: I395d0370ec60579b8f7fede825b45a3ced8ff18f
Signed-off-by: Aushim Nagarkatti <anagarkatti@nvidia.com>
diff --git a/cper-parse.c b/cper-parse.c
index 87d577b..27cfd72 100644
--- a/cper-parse.c
+++ b/cper-parse.c
@@ -409,11 +409,20 @@
if (definition->ToIR == NULL) {
return NULL;
}
- json_object *section_ir = definition->ToIR(cper_section_buf, size);
+ char *cper_description = NULL;
+
+ json_object *section_ir =
+ definition->ToIR(cper_section_buf, size, &cper_description);
if (section_ir == NULL) {
return NULL;
}
json_object *result = json_object_new_object();
+ if (cper_description != NULL) {
+ json_object_object_add(
+ result, "message",
+ json_object_new_string(cper_description));
+ free(cper_description);
+ }
json_object_object_add(result, definition->ShortName, section_ir);
return result;
}
diff --git a/examples/arm.cperhex b/examples/arm.cperhex
index f5aa12c..a22dc45 100644
--- a/examples/arm.cperhex
+++ b/examples/arm.cperhex
@@ -1,16 +1,18 @@
-435045520000ffffffff01000300000003000000d4010000530018001006
-559300000000000000000000000000000000000000000000000000000000
+435045520000ffffffff010001000000030000000b020000130016002807
+220200000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000859525080000000004000000000000000000000000000000
-0000000000000000c80000000c010000462e030078000000163d9ee111bc
-e4119caac2051d5d46b09baa689ff4b3c83be10e045a48a46ee903000000
-495d7369743927663a774a3b00000000000000000a000000030002000c01
-0000020000000000000000000000e8b628cc32d292720000000070511622
-0020150002f15700550d408174050000000000000000000001db94bc4b02
-0c4c0020150001b47a005500c100000000000000000000000000ae9635b0
-a2818b44002015000115ec00550080000000000000000000000000006dbc
-24ee47685b8a818f0100600000005d6f8396aec7a7fb2693333214a0ef38
-8e36a0eac0dff5416e15ae5329f2d08661531c0f1ac40b40573e736bde62
-a46c98445659234b9a916149e48a3bb4109c072dac22f1b76248f5d5b3d3
-37573fd09c9629bfe1c351420c35cc47eadde4f1901308000a000000f60f
-834e4e53eae47ca91d601c3338123b061918
\ No newline at end of file
+0000000000009fd7ef1b0000000004000000000000000000000000000000
+0000000000000000c800000043010000828a030083000000163d9ee111bc
+e4119caac2051d5d46b02f866394e79c3260299a5d7e32b261a700000000
+537c334149475b223c29437a693a4e25215554000a000000020002004301
+000002000000b3065876a7664083a35ff938b377a2e00100000099b12d98
+00201500020402035505e4a77e030000ffb8c64a93fe1da4ce876992d1ec
+b45600201500015c0f0b5500c609000000007353c9b077f17ced0c8528ad
+b2e7241932a20600780000004965d9167b061ab57c75348999394e9ae390
+4106434418641b2984e1addd4bb222c5224b3b4e2dc9e28f8b5c3a5725e6
+f2d18616b49c0178440d7247a1bb816b2a2af8bcdbd7dd2c4d7d919c44b4
+dc9b760fc4d82f6dd69a9edeff9b09f878d39cf286de8393fe7899cbbe5b
+b46b7d5d6f93e77437b9d3902d4b020040000000c8017b71b003521fea5f
+2594baba211b60af511e2916332a1852addf8ac7a3dc2003f254257fde52
+10bbfcff146c36d181f637f1bdc0c5d0f47312a0f801cce556543b3e5629
+395e2275552974263d585a5135
\ No newline at end of file
diff --git a/examples/arm.json b/examples/arm.json
index 8d275c7..beb1ae0 100644
--- a/examples/arm.json
+++ b/examples/arm.json
@@ -1,208 +1,184 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 136680837,
- "recordLength": 468,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 1,
+ "name": "Fatal"
},
- "timestamp": "9355-06-10T18:00:53+00:00",
- "timestampIsPrecise": false
+ "recordLength": 523,
+ "timestamp": "0222-07-28T16:00:13+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 468703135,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": true,
- "latentError": true,
- "overflow": false,
- "primary": false,
- "propagated": true,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "9f68aa9b-b3f4-3bc8-e10e-045a48a46ee9",
- "fruText": "I]sit9'f:wJ;",
- "revision": {
- "major": 46,
- "minor": 70
- },
- "sectionLength": 268,
"sectionOffset": 200,
+ "sectionLength": 323,
+ "revision": {
+ "major": 138,
+ "minor": 130
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": true,
+ "reset": false,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": false,
+ "latentError": false,
+ "propagated": false,
+ "overflow": true
+ },
"sectionType": {
"data": "e19e3d16-bc11-11e4-9caa-c2051d5d46b0",
"type": "ARM"
},
+ "fruID": "9463862f-9ce7-6032-299a-5d7e32b261a7",
+ "fruText": "S|3AIG[\"<)Czi:N%!UT",
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 0,
+ "name": "Recoverable"
}
}
],
"sections": [
{
+ "message": "An ARM Processor Error occurred; Error Type(s): {Bus Error Physical Addr=0x56B4ECD1926987CE, TLB Error Physical Addr=0x1924E7B2AD28850C}",
"ArmProcessor": {
- "contextInfo": [
- {
- "registerArray": {
- "dacr": 4058308074,
- "dfar": 2525196125,
- "dfsr": 4222076846,
- "ifar": 842240806,
- "isr": 955228180,
- "mair0": 3936368270,
- "mair1": 1106632640,
- "midr": 1403917678,
- "mpidr": 2261840425,
- "nmrr": 253514593,
- "prrr": 1074512922,
- "sctlr_ns": 1802714711,
- "spsr": 1822712542,
- "spsr_abt": 1498825880,
- "spsr_fiq": 2442808099,
- "spsr_irq": 2330216801,
- "spsr_svc": 2618340411,
- "spsr_und": 581709063,
- "tpidrprw": 1214429169,
- "tpidruro": 3551778293,
- "tpidrurw": 3493812023,
- "ttbcr": 3207173788,
- "ttbr0": 1112654817,
- "ttbr1": 1204565260
- },
- "registerArraySize": 96,
- "registerContextType": {
- "name": "AArch32 EL1 Context Registers",
- "value": 1
- },
- "version": 36737
- },
- {
- "registerArray": {
- "mrsEncoding": {
- "crm": 14,
- "crn": 15,
- "o0": 0,
- "op1": 1,
- "op2": 6
- },
- "value": 12212887984593063555
- },
- "registerArraySize": 10,
- "registerContextType": {
- "name": "Miscellaneous System Register Structure",
- "value": 8
- },
- "version": 5008
- }
- ],
+ "errorInfoNum": 2,
"contextInfoNum": 2,
+ "sectionLength": 323,
"errorAffinity": {
- "type": "Vendor Defined",
- "value": 2
+ "value": 2,
+ "type": "Vendor Defined"
},
+ "midrEl1": 16186631622361702307,
+ "psciState": 2553131417,
"errorInfo": [
{
+ "version": 0,
+ "length": 32,
+ "errorType": {
+ "value": 2,
+ "name": "Bus Error"
+ },
+ "multipleError": {
+ "value": 516,
+ "type": "Multiple Errors"
+ },
"errorInformation": {
"busError": {
- "accessMode": {
- "name": "Secure",
- "value": 0
+ "transactionType": {
+ "value": 0,
+ "name": "Instruction"
},
- "corrected": false,
- "level": 5,
- "memoryAttributes": 349,
+ "level": 7,
+ "corrected": true,
"restartablePC": false,
"timedOut": true,
- "transactionType": {
- "name": "Instruction",
- "value": 0
+ "memoryAttributes": 223,
+ "accessMode": {
+ "value": 0,
+ "name": "Secure"
}
}
},
- "errorType": {
- "name": "Bus Error",
- "value": 2
- },
- "length": 32,
- "multipleError": {
- "type": "Multiple Errors",
- "value": 22513
- },
- "physicalFaultAddress": 5479757370912725761,
- "version": 0
+ "physicalFaultAddress": 6247878967918430158
},
{
+ "version": 0,
+ "length": 32,
+ "errorType": {
+ "value": 1,
+ "name": "TLB Error"
+ },
+ "multipleError": {
+ "value": 3932,
+ "type": "Multiple Errors"
+ },
"errorInformation": {
"tlbError": {
- "corrected": false,
- "level": 3,
- "restartablePC": false,
"transactionType": {
- "name": "Data Access",
- "value": 1
- }
+ "value": 2,
+ "name": "Generic"
+ },
+ "level": 7,
+ "corrected": false,
+ "restartablePC": false
}
},
- "errorType": {
- "name": "TLB Error",
- "value": 1
- },
- "length": 32,
- "multipleError": {
- "type": "Multiple Errors",
- "value": 31412
- },
- "physicalFaultAddress": 4939183952082867886,
- "version": 0
- },
- {
- "errorInformation": {
- "tlbError": {
- "corrected": false,
- "level": 2,
- "restartablePC": false,
- "transactionType": {
- "name": "Instruction",
- "value": 0
- }
- }
- },
- "errorType": {
- "name": "TLB Error",
- "value": 1
- },
- "length": 32,
- "multipleError": {
- "type": "Multiple Errors",
- "value": 60437
- },
- "physicalFaultAddress": 9969676858262076525,
- "version": 0
+ "physicalFaultAddress": 1811827704705090828
}
],
- "errorInfoNum": 3,
- "midrEl1": 8255892182538958568,
- "psciState": 571887984,
- "sectionLength": 268,
+ "contextInfo": [
+ {
+ "version": 41522,
+ "registerContextType": {
+ "value": 6,
+ "name": "AArch64 EL2 Context Registers"
+ },
+ "registerArraySize": 120,
+ "registerArray": {
+ "elr_el2": 13049749995993523529,
+ "esr_el2": 11118887861619029372,
+ "far_el2": 7212589857892307171,
+ "hacr_el2": 12847606100887087387,
+ "hcr_el2": 14496328792146101538,
+ "hpfar_el2": 16583757111034089442,
+ "mair_el2": 8647365056814043634,
+ "sctlr_el2": 7746679135416749380,
+ "sp_el2": 3232977446290074154,
+ "spsr_el2": 11231049777532730701,
+ "tcr_el2": 11157225179124600694,
+ "tpidr_el2": 15238202059363704478,
+ "ttbr0_el2": 8718568123219243676,
+ "vtcr_el2": 6736659039993645977,
+ "vttbr_el2": 10435888409383244655
+ }
+ },
+ {
+ "version": 19245,
+ "registerContextType": {
+ "value": 2,
+ "name": "AArch32 EL2 Context Registers"
+ },
+ "registerArraySize": 64,
+ "registerArray": {
+ "elr_hyp": 1903886792,
+ "hamair0": 525468592,
+ "hamair1": 2485477354,
+ "hcr": 455195322,
+ "hcr2": 508669792,
+ "hdfar": 707991081,
+ "hifar": 3752677912,
+ "hpfar": 3701720970,
+ "hsr": 1425146656,
+ "htcr": 1390313253,
+ "htpidr": 4294753040,
+ "httbr": 3510004756,
+ "spsr_hyp": 4046976641,
+ "vtcr": 3502620861,
+ "vttbr": 2685563892,
+ "dacr32_el2": 3855352312
+ }
+ }
+ ],
"vendorSpecificInfo": {
- "data": "HWAcMzgSOwYZGA=="
+ "data": "VlQ7PlYpOV4idVUpdCY9WFpRNQ=="
}
}
}
diff --git a/examples/ccixper.cperhex b/examples/ccixper.cperhex
index 21e11f5..48026bc 100644
--- a/examples/ccixper.cperhex
+++ b/examples/ccixper.cperhex
@@ -1,12 +1,11 @@
-435045520000ffffffff0100000000000300000058010000020011000710
-087300000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100000000000300000038010000190015001502
+507200000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000c89acc5d0000000004000000000000000000000000000000
-0000000000000000c80000009000000028e20300e2000000f65e3391fbeb
-7844a6a688b728cf75d77063d63b089ca7307e8ac060e64bf42400000000
-23344922575d634c23754224746b45000000000090000000050000000000
-0000510000008fe15494754269365d829009be737a9943dbcb69b56c826d
-4e4f1ea0401a1bcffb6f6370b1cda60f4f37180daa93a6ed6e715623ddd9
-902c28aecc68c8e737c3569b330868da17b7112fc4bbc26aa830dbff54b8
-d8e4e40093b0695b97a01fee3b52f6a32c0d5a3d3c1ef8ff88a12f63a083
-1c78680078fbb1e15648827536bd
\ No newline at end of file
+000000000000bcacb2360000000004000000000000000000000000000000
+0000000000000000c8000000700000002118030090000000f65e3391fbeb
+7844a6a688b728cf75d75c26be1d46bc61ef2f7071e2d13a961a00000000
+4f463c46615b2f6a21652b4a2f517e6565693f0070000000050000000000
+0000b10000007f56b0dcf956340ec7ca4a8c341252119c7c49262b11b050
+8ed94f07201a106eeb7ae743687d641ea22ee4e2d1ab48d940337d8f513f
+7fe3ccd86274f59144829ffaa9cc62e3e342ef93e907b7d01c9d3fa84c3e
+f99559c8c9cbac4f97547b5e
\ No newline at end of file
diff --git a/examples/ccixper.json b/examples/ccixper.json
index 80349dc..d22ad80 100644
--- a/examples/ccixper.json
+++ b/examples/ccixper.json
@@ -1,18 +1,5 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 1573690056,
- "recordLength": 344,
"revision": {
"major": 0,
"minor": 0
@@ -22,33 +9,46 @@
"code": 0,
"name": "Recoverable"
},
- "timestamp": "7308-10-07T11:00:02+00:00",
- "timestampIsPrecise": false
+ "recordLength": 312,
+ "timestamp": "7250-02-15T15:00:19+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 917679292,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": false,
- "latentError": true,
- "overflow": true,
- "primary": false,
- "propagated": true,
- "reset": false,
- "resourceNotAccessible": false
- },
- "fruID": "3bd66370-9c08-30a7-7e8a-c060e64bf424",
- "fruText": "#4I\"W]cL#uB$tkE",
- "revision": {
- "major": 226,
- "minor": 40
- },
- "sectionLength": 144,
"sectionOffset": 200,
+ "sectionLength": 112,
+ "revision": {
+ "major": 24,
+ "minor": 33
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": false,
+ "reset": false,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": true,
+ "latentError": false,
+ "propagated": false,
+ "overflow": true
+ },
"sectionType": {
"data": "91335ef6-ebfb-4478-a6a6-88b728cf75d7",
"type": "CCIX PER Log Error"
},
+ "fruID": "1dbe265c-bc46-ef61-2f70-71e2d13a961a",
+ "fruText": "OF<Fa[\/j!e+J\/Q~eei?",
"severity": {
"code": 0,
"name": "Recoverable"
@@ -57,10 +57,11 @@
],
"sections": [
{
+ "message": "A CCIX PER Log Error occurred",
"CcixPer": {
- "ccixPERLog": "j+FUlHVCaTZdgpAJvnN6mUPby2m1bIJtTk8eoEAaG8/7b2Nwsc2mD083GA2qk6btbnFWI93ZkCworsxoyOc3w1abMwho2he3ES/Eu8JqqDDb/1S42OTkAJOwaVuXoB/uO1L2oywNWj08Hvj/iKEvY6CDHHhoAHj7seFWSIJ1Nr0=",
- "ccixSourceID": 81,
- "length": 144
+ "length": 112,
+ "ccixSourceID": 177,
+ "ccixPERLog": "f1aw3PlWNA7HykqMNBJSEZx8SSYrEbBQjtlPByAaEG7reudDaH1kHqIu5OLRq0jZQDN9j1E\/f+PM2GJ09ZFEgp\/6qcxi4+NC75PpB7fQHJ0\/qEw++ZVZyMnLrE+XVHte"
}
}
]
diff --git a/examples/cxlcomponent-media.cperhex b/examples/cxlcomponent-media.cperhex
index 15bd389..8fce990 100644
--- a/examples/cxlcomponent-media.cperhex
+++ b/examples/cxlcomponent-media.cperhex
@@ -1,10 +1,9 @@
-435045520000ffffffff0100030000000300000019010000570008000703
-240800000000000000000000000000000000000000000000000000000000
+435045520000ffffffff01000000000003000000fb000000080014000404
+485300000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-0000000000009b66466a0000000004000000000000000000000000000000
-0000000000000000c800000051000000ff540300e4000000770acdfb60c2
-7f4185a9088b1621eba61ef8ff88a12f63a0831c78680078fbb102000000
-336b67775a414e63225c5b675e0000000000000051000000050000000000
-000051f0fc7b8fe1549475406900000000000000000043dbcb69b56c826d
-4e4f1ea0401a1bcffb6f6370b1cda60f4f37180daa93a6ed6e715623ddd9
-902c28aecc68c8e737c356
\ No newline at end of file
+00000000000064d3f2260000000004000000000000000000000000000000
+0000000000000000c80000003300000041cf03007e000000770acdfb60c2
+7f4185a9088b1621eba6221025af466dce42d961a16eab41338502000000
+2e4a7637473e586945563937554b31786d5d3e0033000000050000000000
+00003ed69621f10f9ead0f28e3008c10ddb2845e57830e7594920893e231
+6e6d2eab109589ff3e1401
\ No newline at end of file
diff --git a/examples/cxlcomponent-media.json b/examples/cxlcomponent-media.json
index e372ea5..3823363 100644
--- a/examples/cxlcomponent-media.json
+++ b/examples/cxlcomponent-media.json
@@ -1,54 +1,54 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 1782998683,
- "recordLength": 281,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 0,
+ "name": "Recoverable"
},
- "timestamp": "0824-03-07T08:00:57+00:00",
- "timestampIsPrecise": false
+ "recordLength": 251,
+ "timestamp": "5348-04-04T14:00:08+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 653448036,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": false,
- "latentError": true,
- "overflow": true,
- "primary": false,
- "propagated": true,
- "reset": true,
- "resourceNotAccessible": false
- },
- "fruID": "88fff81e-2fa1-a063-831c-78680078fbb1",
- "fruText": "3kgwZANc\"\\[g^",
- "revision": {
- "major": 84,
- "minor": 255
- },
- "sectionLength": 81,
"sectionOffset": 200,
+ "sectionLength": 51,
+ "revision": {
+ "major": 207,
+ "minor": 65
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": true,
+ "reset": true,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": true,
+ "overflow": false
+ },
"sectionType": {
"data": "fbcd0a77-c260-417f-85a9-088b1621eba6",
"type": "CXL General Media Component Error"
},
+ "fruID": "af251022-6d46-42ce-d961-a16eab413385",
+ "fruText": ".Jv7G>XiEV97UK1xm]>",
"severity": {
"code": 2,
"name": "Corrected"
@@ -57,20 +57,21 @@
],
"sections": [
{
+ "message": "A CXL Component Error occurred",
"CxlComponent": {
- "cxlComponentEventLog": {
- "data": "Q9vLabVsgm1OTx6gQBobz/tvY3CxzaYPTzcYDaqTpu1ucVYj3dmQLCiuzGjI5zfDVg=="
- },
+ "length": 51,
"deviceID": {
- "busNumber": 84,
- "deviceID": 31740,
- "deviceNumber": 225,
- "functionNumber": 143,
- "segmentNumber": 30100,
- "slotNumber": 3368,
- "vendorID": 61521
+ "vendorID": 54846,
+ "deviceID": 8598,
+ "functionNumber": 241,
+ "deviceNumber": 15,
+ "busNumber": 158,
+ "segmentNumber": 4013,
+ "slotNumber": 7269
},
- "length": 81
+ "cxlComponentEventLog": {
+ "data": "DnWUkgiT4jFubS6rEJWJ\/z4UAQ=="
+ }
}
}
]
diff --git a/examples/cxlprotocol.cperhex b/examples/cxlprotocol.cperhex
index 23551f6..1c82d56 100644
--- a/examples/cxlprotocol.cperhex
+++ b/examples/cxlprotocol.cperhex
@@ -1,13 +1,12 @@
-435045520000ffffffff01000000000003000000880100003200050002099158
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-c0d8752400000000040000000000000000000000000000000000000000000000
-c8000000c00000009ad803004b000000b4efb980b552e34da77768784b771048
-df422781646537fe3d3386899e72aa4500000000112e40267d1771234b526620
-2555284148493c003d000000000000000000000000000000e154947542000000
-829009be737a9943dbcb68b5000000004f1ea0401a1bcffb6f6370b1cda60f4f
-37180daa93a6ed6e715623ddd9902c28aecc68c8e737c3569b330868da17b711
-2fc4bbc26aa830dbff54b8d8e4e40093b0695b9731001b00000000000d5a3d3c
-1ef8ff88a12f63a0831c78680078fbb1e15648827536bdc82c61f439bb3276da
-2a7562cba4c66b28e2e390e25c8b933de1dcbf57127d1f3fde13789945ee7370
-63d63b089ca7307e
\ No newline at end of file
+435045520000ffffffff0100000000000300000063010000410014001105
+794200000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000
+000000000000576fad0e0000000004000000000000000000000000000000
+0000000000000000c80000009b00000021610300fa000000b4efb980b552
+e34da77768784b771048be08963c55787fd0a6f2888993c6322403000000
+24287b474442297c4f717e357c46414c452832003d000000000000000000
+0000000000007cd0b30f75000000b6717d29a065b75ab241205000000000
+c1541d7c1514260638e960904294dccfffb7571c457c8f8ab8a218a212c4
+b818d8ffddb3c906b82c98974d7690ed94f72cfc824d6aca528cba01147c
+ac18c88a0778d00e010026000000000095cfedff20aca42a137defbea30c
+62b8869d6cf8b9bfbecfd6feef842e2b8fe39918d471b18735
\ No newline at end of file
diff --git a/examples/cxlprotocol.json b/examples/cxlprotocol.json
index c6b467d..4458e9e 100644
--- a/examples/cxlprotocol.json
+++ b/examples/cxlprotocol.json
@@ -1,18 +1,5 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 611702976,
- "recordLength": 392,
"revision": {
"major": 0,
"minor": 0
@@ -22,57 +9,72 @@
"code": 0,
"name": "Recoverable"
},
- "timestamp": "5891-09-02T05:00:32+00:00",
- "timestampIsPrecise": false
+ "recordLength": 355,
+ "timestamp": "4279-05-11T14:00:41+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 246247255,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": true,
- "latentError": false,
- "overflow": false,
- "primary": true,
- "propagated": true,
- "reset": false,
- "resourceNotAccessible": false
- },
- "fruID": "812742df-6564-fe37-3d33-86899e72aa45",
- "revision": {
- "major": 216,
- "minor": 154
- },
- "sectionLength": 192,
"sectionOffset": 200,
+ "sectionLength": 155,
+ "revision": {
+ "major": 97,
+ "minor": 33
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": true,
+ "reset": false,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": true,
+ "overflow": true
+ },
"sectionType": {
"data": "80b9efb4-52b5-4de3-a777-68784b771048",
"type": "CXL Protocol Error"
},
+ "fruID": "3c9608be-7855-d07f-a6f2-888993c63224",
+ "fruText": "$({GDB)|Oq~5|FALE(2",
"severity": {
- "code": 0,
- "name": "Recoverable"
+ "code": 3,
+ "name": "Informational"
}
}
],
"sections": [
{
+ "message": "A CXL Protocol Error occurred",
"CxlProtocol": {
"agentType": {
- "name": "CXL 1.1 Device",
- "value": 0
+ "value": 0,
+ "name": "CXL 1.1 Device"
},
- "capabilityStructure": "b2Nwsc2mD083GA2qk6btbnFWI93ZkCworsxoyOc3w1abMwho2he3ES/Eu8JqqDDb/1S42OTkAJOwaVuX",
- "cxlDVSEC": "DVo9PB74/4ihL2Oggxx4aAB4+7HhVkiCdTa9yCxh9Dm7MnbaKnViy6TGayji45DiXA==",
"deviceID": {
- "classCode": 52187,
- "deviceID": 48649,
- "slotNumber": 5805,
- "subsystemDeviceID": 17305,
- "subsystemVendorID": 31347,
- "vendorID": 36994
+ "vendorID": 29110,
+ "deviceID": 10621,
+ "subsystemVendorID": 26016,
+ "subsystemDeviceID": 23223,
+ "classCode": 16818,
+ "slotNumber": 2564
},
- "deviceSerial": 18144751223266352719,
- "dvsecLength": 49
+ "deviceSerial": 443063695851738305,
+ "capabilityStructure": "OOlgkEKU3M\/\/t1ccRXyPiriiGKISxLgY2P\/ds8kGuCyYl012kO2U9yz8gk1qylKMugEUfKwYyIoHeNAO",
+ "dvsecLength": 1,
+ "cxlDVSEC": "lQ=="
}
}
]
diff --git a/examples/dmargeneric.cperhex b/examples/dmargeneric.cperhex
index ed2a1fe..6c9e35b 100644
--- a/examples/dmargeneric.cperhex
+++ b/examples/dmargeneric.cperhex
@@ -1,8 +1,8 @@
-435045520000ffffffff01000100000003000000e8000000140008000902
-305600000000000000000000000000000000000000000000000000000000
+435045520000ffffffff01000000000003000000e8000000420022000703
+821600000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-00000000000069e7b1210000000004000000000000000000000000000000
-0000000000000000c80000002000000070b103000f000000f7fe515b9dc7
-34448f1baa62de3e2c6468c8e737c3569b330868da17b7112fc403000000
-2a6d7753305e6c7a6e4a4955000000000000000071dbd0600501010219b7
-e2cdb151f0fc00000000000000000000000000000000
\ No newline at end of file
+000000000000291aa6570000000004000000000000000000000000000000
+0000000000000000c80000002000000025f8030079000000f7fe515b9dc7
+34448f1baa62de3e2c6452b085f991efe5ee3c14f2fb97a3e24e00000000
+6b49597947752d7132356c20786061416a26470069bfdbcb0600000199d0
+5263ebb1fec500000000000000000000000000000000
\ No newline at end of file
diff --git a/examples/dmargeneric.json b/examples/dmargeneric.json
index 8ca653d..9f10d23 100644
--- a/examples/dmargeneric.json
+++ b/examples/dmargeneric.json
@@ -1,83 +1,84 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 565307241,
- "recordLength": 232,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 1,
- "name": "Fatal"
+ "code": 0,
+ "name": "Recoverable"
},
- "timestamp": "5630-02-09T08:00:14+00:00",
- "timestampIsPrecise": false
+ "recordLength": 232,
+ "timestamp": "1682-03-07T22:00:42+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1470503465,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": true,
- "latentError": false,
- "overflow": false,
- "primary": true,
- "propagated": false,
- "reset": true,
- "resourceNotAccessible": false
- },
- "fruID": "37e7c868-56c3-339b-0868-da17b7112fc4",
- "fruText": "*mwS0^lznJIU",
- "revision": {
- "major": 177,
- "minor": 112
- },
- "sectionLength": 32,
"sectionOffset": 200,
+ "sectionLength": 32,
+ "revision": {
+ "major": 248,
+ "minor": 37
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": false,
+ "reset": false,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": true,
+ "overflow": false
+ },
"sectionType": {
"data": "5b51fef7-c79d-4434-8f1b-aa62de3e2c64",
"type": "DMAr Generic"
},
+ "fruID": "f985b052-ef91-eee5-3c14-f2fb97a3e24e",
+ "fruText": "kIYyGu-q25l x`aAj&G",
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 0,
+ "name": "Recoverable"
}
}
],
"sections": [
{
+ "message": "A DMAr Generic Error occurred",
"GenericDmar": {
+ "requesterID": 49001,
+ "segmentNumber": 52187,
+ "faultReason": {
+ "value": 6,
+ "description": "Invalid read or write access.",
+ "name": "Invalid Read\/Write"
+ },
"accessType": {
- "name": "DMA Read",
- "value": 1
+ "value": 0,
+ "name": "DMA Write"
},
"addressType": {
- "name": "Translation Request",
- "value": 1
+ "value": 0,
+ "name": "Untranslated Request"
},
"architectureType": {
- "name": "Unknown (Reserved)",
- "value": 2
+ "value": 1,
+ "name": "IOMMU"
},
- "deviceAddress": 18226157516073645849,
- "faultReason": {
- "description": "DMA request to access an address beyond the device address width.",
- "name": "DMA Address Out of Bounds",
- "value": 5
- },
- "requesterID": 56177,
- "segmentNumber": 24784
+ "deviceAddress": 14267036294098112665
}
}
]
diff --git a/examples/dmariommu.cperhex b/examples/dmariommu.cperhex
index 62a3c3d..13552c5 100644
--- a/examples/dmariommu.cperhex
+++ b/examples/dmariommu.cperhex
@@ -1,12 +1,12 @@
-435045520000ffffffff0100000000000300000058010000580012001501
-735600000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100020000000300000058010000590008002501
+130100000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000bd3d77150000000004000000000000000000000000000000
-0000000000000000c8000000900000006b28030090000000e1846f03377f
-8c42a79e575fdfaa84ec737063d63b089ca7307e8ac060e64bf403000000
-2023344922575d634c23754224746b0000000000710000000000000019b7
-e2cdb151f0fc7b8fe1549475426900000000000000009943dbcb69b56c82
-6d4e4f1ea0401a1b00000000000000000000000000000000ed6e715623dd
-d9902c28aecc68c8e737c3569b330868da17b7112fc4bbc26aa830dbff54
-b8d8e4e40093b0695b97a01fee3b52f6a32c0d5a3d3c1ef8ff88a12f63a0
-831c78680078fbb1e15648827536
\ No newline at end of file
+000000000000c3ac073f0000000004000000000000000000000000000000
+0000000000000000c80000009000000037e90300bf000000e1846f03377f
+8c42a79e575fdfaa84ec9bde06a41e7336eee754d70609c1edf303000000
+6c793d3f6b2c485540484c465756366a58675c004000000000000000dcb5
+234cb191517d998fa7dd3efe8b0d000000000000000079be4963f19318a1
+58f48c5de5519e5f00000000000000000000000000000000b2bd17bf138e
+b311f9f82d84bc186b4bed97e1aa1d5dc86822a9690f732f76d545e45a4f
+1b9481ef365411744b5e23c2511dc319d66d095bfaac81102bb0c34a0de1
+a49de7892f68fc3d0d8da1b4aa14
\ No newline at end of file
diff --git a/examples/dmariommu.json b/examples/dmariommu.json
index 9bbc92c..27c8132 100644
--- a/examples/dmariommu.json
+++ b/examples/dmariommu.json
@@ -1,54 +1,54 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 360136125,
- "recordLength": 344,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 0,
- "name": "Recoverable"
+ "code": 2,
+ "name": "Corrected"
},
- "timestamp": "5673-01-15T12:00:58+00:00",
- "timestampIsPrecise": false
+ "recordLength": 344,
+ "timestamp": "0113-01-25T08:00:59+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1057467587,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": false,
- "latentError": false,
- "overflow": true,
- "primary": false,
- "propagated": false,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "d6637073-083b-a79c-307e-8ac060e64bf4",
- "fruText": " #4I\"W]cL#uB$tk",
- "revision": {
- "major": 40,
- "minor": 107
- },
- "sectionLength": 144,
"sectionOffset": 200,
+ "sectionLength": 144,
+ "revision": {
+ "major": 233,
+ "minor": 55
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": true,
+ "reset": true,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": false,
+ "overflow": true
+ },
"sectionType": {
"data": "036f84e1-7f37-428c-a79e-575fdfaa84ec",
"type": "IOMMU Specific DMAr"
},
+ "fruID": "a406de9b-731e-ee36-e754-d70609c1edf3",
+ "fruText": "ly=?k,HU@HLFWV6jXg\\",
"severity": {
"code": 3,
"name": "Informational"
@@ -57,18 +57,19 @@
],
"sections": [
{
+ "message": "A IOMMU Specific DMAr Error occurred",
"IommuDmar": {
- "controlRegister": 18226157516073645849,
- "deviceTableEntry": "7W5xViPd2ZAsKK7MaMjnN8NWmzMIaNoXtxEvxLvCaqg=",
- "eventLogEntry": "mUPby2m1bIJtTk8eoEAaGw==",
- "pageTableEntry_Level1": 3924185897530143227,
- "pageTableEntry_Level2": 8647026149635104867,
- "pageTableEntry_Level3": 3432175023993797693,
- "pageTableEntry_Level4": 6488891720834628590,
- "pageTableEntry_Level5": 2278987830320468736,
- "pageTableEntry_Level6": 16493546021549234992,
- "revision": 113,
- "statusRegister": 7584754002385014651
+ "revision": 64,
+ "controlRegister": 9030158918527202780,
+ "statusRegister": 976153290216017817,
+ "eventLogEntry": "eb5JY\/GTGKFY9Ixd5VGeXw==",
+ "deviceTableEntry": "sr0XvxOOsxH5+C2EvBhrS+2X4aodXchoIqlpD3MvdtU=",
+ "pageTableEntry_Level6": 17258238092076835909,
+ "pageTableEntry_Level5": 13989128545705743414,
+ "pageTableEntry_Level4": 6559895098564484433,
+ "pageTableEntry_Level3": 5387343278272261370,
+ "pageTableEntry_Level2": 7507370731725185293,
+ "pageTableEntry_Level1": 1489201232748559868
}
}
]
diff --git a/examples/dmarvtd.cperhex b/examples/dmarvtd.cperhex
index c70c22f..ee3b101 100644
--- a/examples/dmarvtd.cperhex
+++ b/examples/dmarvtd.cperhex
@@ -1,12 +1,12 @@
-435045520000ffffffff0100000000000300000058010000580012001501
-735600000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100010000000300000058010000260015002303
+681300000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000bd3d77150000000004000000000000000000000000000000
-0000000000000000c8000000900000006b28030090000000371d7671b232
-cd45a7d0b0fedd93e8cf737063d63b089ca7307e8ac060e64bf403000000
-2023344922575d634c23754224746b000000000071dbd0603225daa119b7
-e2cdb151f0fc7b8fe15494754269365d829009be737a9943dbcb00000000
-000000000000000000f06f6370b1cda60f4f00000daa9306ed6e715623dd
-d9902c28aecc68c8e737c3569b330868da17b7112fc4bbc26aa830dbff54
-b8d8e4e40093b0695b97a01fee3b52f6a32c0d5a3d3c1ef8ff88a12f63a0
-831c78680078fbb1e15648827536
\ No newline at end of file
+0000000000007f9e810f0000000004000000000000000000000000000000
+0000000000000000c8000000900000007f28030040000000371d7671b232
+cd45a7d0b0fedd93e8cf66b0fec181576adb70eb504094d2671f00000000
+485274712c6c36207629322c7232225174443900ef59e0bbef699b6a0045
+04e3deb9af364b8b82c237bae2aedca94c45910c700dee65c03400000000
+00000000000000000060913f1544bc0b28420020c3817002274c467f805a
+889c1e669eaf431a8d8da31e4564fe1f2a750e39b3e8496224eb178a90b1
+5239be359b81623672377a34bfd06f75a6c398bbbb873267a26747d7c9b1
+6100c18b4f2d050da66904966cb4
\ No newline at end of file
diff --git a/examples/dmarvtd.json b/examples/dmarvtd.json
index d7daf6b..357a835 100644
--- a/examples/dmarvtd.json
+++ b/examples/dmarvtd.json
@@ -1,93 +1,94 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 360136125,
- "recordLength": 344,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 0,
- "name": "Recoverable"
+ "code": 1,
+ "name": "Fatal"
},
- "timestamp": "5673-01-15T12:00:58+00:00",
- "timestampIsPrecise": false
+ "recordLength": 344,
+ "timestamp": "1368-03-23T15:00:26+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 260152959,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": false,
- "latentError": false,
- "overflow": true,
- "primary": false,
- "propagated": false,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "d6637073-083b-a79c-307e-8ac060e64bf4",
- "fruText": " #4I\"W]cL#uB$tk",
+ "sectionOffset": 200,
+ "sectionLength": 144,
"revision": {
"major": 40,
- "minor": 107
+ "minor": 127
},
- "sectionLength": 144,
- "sectionOffset": 200,
+ "flags": {
+ "primary": false,
+ "containmentWarning": false,
+ "reset": false,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": false,
+ "latentError": false,
+ "propagated": true,
+ "overflow": false
+ },
"sectionType": {
"data": "71761d37-32b2-45cd-a7d0-b0fedd93e8cf",
- "type": "Intel VT for Directed I/O Specific DMAr"
+ "type": "Intel VT for Directed I\/O Specific DMAr"
},
+ "fruID": "c1feb066-5781-db6a-70eb-504094d2671f",
+ "fruText": "HRtq,l6 v)2,r2\"QtD9",
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 0,
+ "name": "Recoverable"
}
}
],
"sections": [
{
+ "message": "A VT-d DMAr Error occurred",
"VtdDmar": {
- "capabilityRegister": 18226157516073645849,
- "contextEntry": "w1abMwho2he3ES/Eu8JqqA==",
- "extendedCapabilityRegister": 7584754002385014651,
+ "version": 239,
+ "revision": 89,
+ "oemID": 117215729794016,
+ "capabilityRegister": 3940572565915059456,
+ "extendedCapabilityRegister": 12601839455985371979,
+ "globalCommandRegister": 1162652124,
+ "globalStatusRegister": 225447057,
+ "faultStatusRegister": 885024238,
"faultRecord": {
- "addressType": 0,
+ "faultInformation": 206451584006422,
+ "sourceIdentifier": 16936,
+ "privelegeModeRequested": true,
"executePermissionRequested": false,
- "faultInformation": 2934438007027455,
- "faultReason": 13,
"pasidPresent": false,
- "pasidValue": 431018,
- "privelegeModeRequested": false,
- "sourceIdentifier": 20239,
+ "faultReason": 195,
+ "pasidValue": 159873,
+ "addressType": 0,
"type": {
- "name": "Write Request",
- "value": 0
+ "value": 0,
+ "name": "Write Request"
}
},
- "faultStatusRegister": 3420144537,
- "globalCommandRegister": 2424462646,
- "globalStatusRegister": 2054405641,
- "oemID": 177958299001040,
- "pageTableEntry_Level1": 3924185897530143227,
- "pageTableEntry_Level2": 8647026149635104867,
- "pageTableEntry_Level3": 3432175023993797693,
- "pageTableEntry_Level4": 6488891720834628590,
- "pageTableEntry_Level5": 2278987830320468736,
- "pageTableEntry_Level6": 16493546021549234992,
- "revision": 219,
- "rootEntry": "7W5xViPd2ZAsKK7MaMjnNw==",
- "version": 113
+ "rootEntry": "J0xGf4BaiJweZp6vQxqNjQ==",
+ "contextEntry": "ox5FZP4fKnUOObPoSWIk6w==",
+ "pageTableEntry_Level6": 3872595756914346519,
+ "pageTableEntry_Level5": 3781395800809177499,
+ "pageTableEntry_Level4": 13517769401254793407,
+ "pageTableEntry_Level3": 15512481388714690491,
+ "pageTableEntry_Level2": 3264981915918250441,
+ "pageTableEntry_Level1": 13000931170008304901
}
}
]
diff --git a/examples/firmware.cperhex b/examples/firmware.cperhex
index 9c529fb..5d810d5 100644
--- a/examples/firmware.cperhex
+++ b/examples/firmware.cperhex
@@ -1,8 +1,8 @@
-435045520000ffffffff01000300000003000000e8000000130011003006
-410300000000000000000000000000000000000000000000000000000000
+435045520000ffffffff01000300000003000000e8000000110017000904
+652700000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000435b8e310000000004000000000000000000000000000000
-0000000000000000c800000020000000fb6f0300b1000000962a2181ed09
-964994718d729c8e69ed28aecc68c8e737c3569b330868da17b703000000
-60252a6d7753305e6c7a6e00000000000000000002020000000000000000
-0000000000007b8fe15494754269365d829009be737a
\ No newline at end of file
+000000000000afa8044c0000000004000000000000000000000000000000
+0000000000000000c800000020000000b742030010000000962a2181ed09
+964994718d729c8e69ede6a99de1cb23acbf66e7dac1e23305a601000000
+32526374215561514034376e73283032385d240000020000000000000000
+000000000000672c78ed9480bd48bfca5dc5a0619384
\ No newline at end of file
diff --git a/examples/firmware.json b/examples/firmware.json
index 0139905..447db1f 100644
--- a/examples/firmware.json
+++ b/examples/firmware.json
@@ -1,18 +1,5 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 831413059,
- "recordLength": 232,
"revision": {
"major": 0,
"minor": 0
@@ -22,49 +9,63 @@
"code": 3,
"name": "Informational"
},
- "timestamp": "0341-06-30T11:00:13+00:00",
- "timestampIsPrecise": false
+ "recordLength": 232,
+ "timestamp": "2765-04-09T17:00:11+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1275373743,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": false,
- "latentError": true,
- "overflow": true,
- "primary": true,
- "propagated": false,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "68ccae28-e7c8-c337-569b-330868da17b7",
- "fruText": "`%*mwS0^lzn",
- "revision": {
- "major": 111,
- "minor": 251
- },
- "sectionLength": 32,
"sectionOffset": 200,
+ "sectionLength": 32,
+ "revision": {
+ "major": 66,
+ "minor": 183
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": false,
+ "reset": false,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": true,
+ "latentError": false,
+ "propagated": false,
+ "overflow": false
+ },
"sectionType": {
"data": "81212a96-09ed-4996-9471-8d729c8e69ed",
"type": "Firmware Error Record Reference"
},
+ "fruID": "e19da9e6-23cb-bfac-66e7-dac1e23305a6",
+ "fruText": "2Rct!UaQ@47ns(028]$",
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 1,
+ "name": "Fatal"
}
}
],
"sections": [
{
+ "message": "A Firmware Error occurred",
"Firmware": {
"errorRecordType": {
- "name": "SOC Firmware Error Record (Type2)",
- "value": 2
+ "value": 0,
+ "name": "IPF SAL Error Record"
},
+ "revision": 2,
"recordID": 0,
- "recordIDGUID": "54e18f7b-7594-6942-365d-829009be737a",
- "revision": 2
+ "recordIDGUID": "ed782c67-8094-48bd-bfca-5dc5a0619384"
}
}
]
diff --git a/examples/generic.cperhex b/examples/generic.cperhex
index c9bc970..7e855cf 100644
--- a/examples/generic.cperhex
+++ b/examples/generic.cperhex
@@ -1,14 +1,14 @@
-435045520000ffffffff0100010000000300000088010000060010002905
-511600000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100020000000300000088010000120011001906
+157700000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000c7c9301d0000000004000000000000000000000000000000
-0000000000000000c8000000c0000000891003003c000000adcc7698b447
-db4bb65e16f193c4f3db3f31bb02440035ce1072b64c1644205002000000
-4c204c49322133797c5a456d382f2f2f220000005515000000000000c000
-2b0001000000e65ae1c721bab0aa00000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000001f53254682d5a058
-00000000000000000235981282d39eff000000000000000078054dfadaee
-5275
\ No newline at end of file
+00000000000067458b6b0000000004000000000000000000000000000000
+0000000000000000c8000000c0000000a7de03007b000000adcc7698b447
+db4bb65e16f193c4f3db4aa041a21ecfbf8da31161de0165ab0401000000
+3a6d4f343d5a764d445e6276553b6527527273005515000000000000e809
+b7a40565000061d221c1161f8345614a315c762a79216a2b775561227371
+222f635c7c534b4560353f4061547e5146545260387d6e47763f47672c2f
+79636b324c6437637432456442354832734c7d35535379684e3c32606643
+3d777c777c685a532a243b3e3d274c215852442d46654f4a7c3b347a7048
+2b687b613632452376524269343970416f553d54530099c08d566c15bfdd
+82a1a6533daca4a2b7c68492422d958d11a0ccca2a01e9d33e42c8eef457
+75e3
\ No newline at end of file
diff --git a/examples/generic.json b/examples/generic.json
index 91ce386..0a92595 100644
--- a/examples/generic.json
+++ b/examples/generic.json
@@ -1,81 +1,82 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 489736647,
- "recordLength": 392,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 1,
- "name": "Fatal"
+ "code": 2,
+ "name": "Corrected"
},
- "timestamp": "1651-05-29T10:00:06+00:00",
- "timestampIsPrecise": false
+ "recordLength": 392,
+ "timestamp": "7715-06-19T11:00:12+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1804289383,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": true,
- "latentError": true,
- "overflow": false,
- "primary": false,
- "propagated": false,
- "reset": true,
- "resourceNotAccessible": true
- },
- "fruID": "02bb313f-0044-ce35-1072-b64c16442050",
- "fruText": "L LI2!3y|ZEm8///\"",
- "revision": {
- "major": 16,
- "minor": 137
- },
- "sectionLength": 192,
"sectionOffset": 200,
+ "sectionLength": 192,
+ "revision": {
+ "major": 222,
+ "minor": 167
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": true,
+ "reset": false,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": true,
+ "overflow": false
+ },
"sectionType": {
"data": "9876ccad-47b4-4bdb-b65e-16f193c4f3db",
"type": "Processor Generic"
},
+ "fruID": "a241a04a-cf1e-8dbf-a311-61de0165ab04",
+ "fruText": ":mO4=ZvMD^bvU;e'Rrs",
"severity": {
- "code": 2,
- "name": "Corrected"
+ "code": 1,
+ "name": "Fatal"
}
}
],
"sections": [
{
+ "message": "A Generic Processor Error occurred",
"GenericProcessor": {
- "cpuVersionInfo": 12299535236598946534,
+ "processorType": {
+ "value": 232,
+ "name": "Unknown (Reserved)"
+ },
"errorType": {
- "name": "Unknown (Reserved)",
- "value": 43
+ "value": 183,
+ "name": "Unknown (Reserved)"
},
"flags": {
- "corrected": false,
- "overflow": false,
+ "restartable": true,
"preciseIP": false,
- "restartable": true
+ "overflow": true,
+ "corrected": false
},
- "instructionIP": 8454082074797475192,
- "processorID": 6386339027110679327,
- "processorType": {
- "name": "Unknown (Reserved)",
- "value": 192
- },
- "requestorID": 18419392081603081474
+ "cpuVersionInfo": 5008881393156084321,
+ "processorID": 15978513557986590873,
+ "requestorID": 10202110294826993335,
+ "instructionIP": 16390103128374526526
}
}
]
diff --git a/examples/ia32x64.cperhex b/examples/ia32x64.cperhex
index 8ab1ff9..e39ade0 100644
--- a/examples/ia32x64.cperhex
+++ b/examples/ia32x64.cperhex
@@ -1,37 +1,31 @@
-435045520000ffffffff0100010000000300000050040000120008000306
-192600000000000000000000000000000000000000000000000000000000
+435045520000ffffffff010001000000030000009c030000050009000509
+250500000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000dc3fe02e0000000004000000000000000000000000000000
-0000000000000000c800000088030000c35003009a000000b0a03edc44a1
-9747b95b53fa242b6e1dc3beb8f61f0403e3551075ef5b8618ca00000000
-653e6e43765d3a767666315c64000000000000000e040000000000000000
-000000000000f5f02acb531cb93a2826be5c8638198d4d056fbd5299c917
-04ae8803d8fdefcd00000000000000000000000000000000f50157a5efe3
-de43ac72249b573fad2c1500000000000000ff00df3f0000000000000000
-00000000dc843441b106cee200000000000000008d8b03cbc551580ab3f8
-f31cb1c5a249aa595eef92ffa63c1500000000000000ff07dfff07000000
-0000000000000000f90a25297ca6a1050000000000000000f7f639ac4435
-e08535b506fc1f5e62459f250a3b9adb63c31500000000000000ff00df3f
-00000000000000000000000094d83f48fef11e2e000000000000000028c8
-91761e561c950300f40070c836af1135a12f6377855ce3b717dbfe3fa390
-b5c2e6d1578f85ff35b95da682945593c9f6c22c6d488950ffa02bfedfcf
-8e94917465e803eae739a445df26d934b9a22b7bce98c357e9c3f714c1d6
-e34f6a74c3d05dc6ba44ff5e89de8462133d043eb9d3d67c2abf3f22d400
-f8b74f632c123389d9edcdd84c57b7d0b9ca0ebe08c791de43bb9e83dd72
-83d629d33955e56cdebe59ac0000000076bc18847a204b0bfe8ec79c11a4
-0e957a3868b38d4d1f6c0c7918a31e1bf194d709185229635d27f224c403
-c9d298430a00f7984e16045a8f1cfdae37ee420ef75b6020bebe47b0e20b
-b4abde4cefe84de6809bfc84f58ca0f23ad7e07ce6d7d746f79604004000
-92284781109467912f641524f0b6162a8df6a673cd7ebac414be025aa54c
-5538749cb9853021165f852b8375e1999f6f8f45e25cc39c20d75b223200
-6f8738e323f26853137eb298aa350d8b06002000b9b579d98cd4fbbed56a
-450d4e68ffb6bb12356daadfa2b76a706365cd5542860abb5f96905b5565
-c59a72130300f400ff2c2fdecee6483f4aad0c9fef93a9abf23f3b4d94a0
-132f12263284f0f009ef1c38cdeb1e162a68c33607b3c9b05ebcf0990984
-391cb34b43e5d033d6d923f211f0dd2f060798ca3e9f7d0750dbc34074cd
-c4ade978f82c5dc86033a18326b27303e27a0b7a444919c150699c14a910
-e16ebdcae6b5f7437e57771fda9dd24da0b4c7ab2e0bf447cc45b168595a
-783ac83504aeebfbf26900000000065a7aa60e41523c4d4684198b3582e4
-8ffa1e583023061b1ef88471610c9d6767170e755960b2a6a636bf326b41
-16fa3c35526c58598776510be7b317851a7e9c28f4f588a69b2fdc5b6147
-9c7741d8ac944404edcb7b3ed662f1eee70c6c84346079bd
\ No newline at end of file
+00000000000074f8953a0000000004000000000000000000000000000000
+0000000000000000c8000000d40200004d4f0300e1000000b0a03edc44a1
+9747b95b53fa242b6e1d6efdb04be9ef5d3e5619b5a9bd70fe3202000000
+7455456f6663392e403847465c402d766e32740006040000000000000874
+8c182bc0f366e28ab9b54b411b721de479a7b15adbfbb58063ce91d242bb
+c92a4e3a420e42b20000000000000000000000000000000035b506fc1f5e
+62459f250a3b9adb63c31500000000000000ff00df3f00000000215b2a70
+3616a207f45fb9764c5a6e80fe31b1c37686b17d501889844eb0daa80000
+40009f8c6ac4ad9d210da7894ee90331e9544ea4e3dab8452dd6a29bbbbf
+b91ea32fea3c12ad6c86609e294a7714e588660b1d3991ebb972cf218779
+8bcf8ffa698925bdc5088b3dde83d02e25d60000a000a25e9bd1f1d04253
+fb0a266ba8121d62e1f7e2b2d7b9d3b91a95ecf62a68b12f5c45ab78c9ca
+ca75b6c0d0b20683d41baccbd3e98356b49f76e1468c0215cedabd0cdf2e
+4a3cc0e7bef28de3f92a45ea6632e7367696df10dc4506af5efddfc42304
+cf03fc8a138c49e6537fe0c1af95596a5946fb7a3c347329eda0ff2237be
+18b505cc5958c4ba3dcae26688c567b4b81994622c13b5698cbb36429122
+7a02159d7e6c70caedb3e3b28600010040005aacefbef807e7fe6816932f
+df9b69957070170eecb53d8c26fca4563adb357c67594ede376c508f2f18
+c92423fd3a716ad80374871e75f5be679b16f1a8e7ba529f9a9933433ad6
+fe121cd10300f400176385f459b9dc6f5df1e12ceac3bf200d26d3d62081
+e062b439041a97ec725f27842a8df0d746c41ac3fb66c4dcdd7ffdfef669
+e3348fb886caab118ad2bdecb6fedce407366422262b3ba5776442d51eda
+ba5adf0b696a2531d562c9697a218071162aa496db509b66f23fb240bb81
+62119fe7bf19d34cfc4975898dc3f663c83d1fb55d154b7c558c90be6b0f
+3a53b22ad52b58f0fe850000000057cc86281a9894b81d51dc1ae17cdced
+867ffa9c7643e977d01e7bf4aa192f868f794f66cf9f9b0302f2e6e39147
+3758d89886d4cabf63813f323837173f7fb33658adb36c82a4555aca3469
+3adf9784edf04c41307db1599b0cb2e6b4393703fba167c1
\ No newline at end of file
diff --git a/examples/ia32x64.json b/examples/ia32x64.json
index c0dc0b4..59c1892 100644
--- a/examples/ia32x64.json
+++ b/examples/ia32x64.json
@@ -1,18 +1,5 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 786448348,
- "recordLength": 1104,
"revision": {
"major": 0,
"minor": 0
@@ -22,253 +9,175 @@
"code": 1,
"name": "Fatal"
},
- "timestamp": "2619-06-03T08:00:12+00:00",
- "timestampIsPrecise": false
+ "recordLength": 924,
+ "timestamp": "0525-09-05T09:00:05+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 982906996,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": true,
- "latentError": false,
- "overflow": true,
- "primary": false,
- "propagated": false,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "f6b8bec3-041f-e303-5510-75ef5b8618ca",
- "fruText": "e>nCv]:vvf1\\d",
- "revision": {
- "major": 80,
- "minor": 195
- },
- "sectionLength": 904,
"sectionOffset": 200,
+ "sectionLength": 724,
+ "revision": {
+ "major": 79,
+ "minor": 77
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": false,
+ "reset": false,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": false,
+ "latentError": true,
+ "propagated": true,
+ "overflow": true
+ },
"sectionType": {
"data": "dc3ea0b0-a144-4797-b95b-53fa242b6e1d",
- "type": "IA32/X64"
+ "type": "IA32\/X64"
},
+ "fruID": "4bb0fd6e-efe9-3e5d-5619-b5a9bd70fe32",
+ "fruText": "tUEofc9.@8GF\\@-vn2t",
"severity": {
- "code": 0,
- "name": "Recoverable"
+ "code": 2,
+ "name": "Corrected"
}
}
],
"sections": [
{
+ "message": "An IA32\/x64 Processor Error occurred",
"Ia32x64Processor": {
- "cpuidInfo": {
- "eax": 4231444471107743989,
- "ebx": 10167219783498343976,
- "ecx": 1714069713835722061,
- "edx": 14839358401423126020
- },
- "processorContextInfo": [
- {
- "mmRegisterAddress": 6666866091276449041,
- "msrAddress": 2939603056,
- "registerArray": {
- "cr0": 7791031151369926778,
- "cr1": 10732389205399861516,
- "cr2": 2836532369435396567,
- "cr3": 4870874757794637042,
- "cr4": 6486333890149941258,
- "cr8": 1027645587920329871,
- "cs": 54915,
- "ds": 54057,
- "eip": 10740702556876934910,
- "es": 27877,
- "fs": 48862,
- "gdtr_0": 12702330997818022903,
- "gdtr_1": 16784718855480282082,
- "gs": 44121,
- "idtr_0": 10157170755079562829,
- "idtr_1": 15557259267923440288,
- "ldtr": 18135,
- "r10": 4468763883724922505,
- "r11": 2467901310026306489,
- "r12": 1309530785698021588,
- "r13": 6290641158500092211,
- "r14": 14341921984101339319,
- "r15": 8276916407946698385,
- "r8": 8388605095910118647,
- "r9": 6845265527609086147,
- "rax": 10422244326495467491,
- "rbp": 11725461212100511140,
- "rbx": 18412280258920628917,
- "rcx": 10616554985453631797,
- "rdi": 4172560882286818449,
- "rdx": 5803249228583204553,
- "rflags": 813779868244819062,
- "rsi": 10704721925255176447,
- "rsp": 14116911004563438379,
- "ss": 21817,
- "tr": 38647
- },
- "registerArraySize": 244,
- "registerContextType": {
- "name": "64-bit Mode Execution Context",
- "value": 3
- }
- },
- {
- "mmRegisterAddress": 2600094515342054416,
- "msrAddress": 2168924306,
- "registerArray": {
- "data": "8LYWKo32pnPNfrrEFL4CWqVMVTh0nLmFMCEWX4Urg3XhmZ9vj0XiXMOcINdbIjIAb4c44yPyaFMTfrKYqjUNiw=="
- },
- "registerArraySize": 64,
- "registerContextType": {
- "name": "FXSave Context",
- "value": 4
- }
- },
- {
- "mmRegisterAddress": 956287962150851724,
- "msrAddress": 3648632249,
- "registerArray": {
- "data": "Tmj/trsSNW2q36K3anBjZc1VQoYKu1+WkFtVZcWachM="
- },
- "registerArraySize": 32,
- "registerContextType": {
- "name": "64-bit Mode Debug Registers",
- "value": 6
- }
- },
- {
- "mmRegisterAddress": 11460725686151997134,
- "msrAddress": 3727633663,
- "registerArray": {
- "cr0": 1947282579428145807,
- "cr1": 7466137369906051102,
- "cr2": 12011769093482747751,
- "cr3": 18020662887638316710,
- "cr4": 8540893454640756028,
- "cr8": 9086721535022402385,
- "cs": 23129,
- "ds": 14968,
- "eip": 16465782059164780109,
- "es": 44548,
- "fs": 64491,
- "gdtr_0": 3430518648344946844,
- "gdtr_1": 15582867698774793180,
- "gs": 27122,
- "idtr_0": 4502416471326233772,
- "idtr_1": 9542015900777013974,
- "ldtr": 24628,
- "r10": 8854643612808807329,
- "r11": 7588777686466853387,
- "r12": 14608954679185970332,
- "r13": 2267377137222137318,
- "r14": 12378060701444513242,
- "r15": 7543887594505112366,
- "r8": 12521358763183299408,
- "r9": 3702179196210542825,
- "rax": 5565112076041032687,
- "rbp": 3449176849503214038,
- "rbx": 9525718021383102612,
- "rcx": 16991298666059395312,
- "rdi": 3733736168285740089,
- "rdx": 12900339870520186398,
- "rflags": 4346608121544333830,
- "rsi": 9514304947028406473,
- "rsp": 539762622390077190,
- "ss": 13768,
- "tr": 48505
- },
- "registerArraySize": 244,
- "registerContextType": {
- "name": "64-bit Mode Execution Context",
- "value": 3
- }
- }
- ],
+ "processorErrorInfoNum": 1,
"processorContextInfoNum": 4,
+ "cpuidInfo": {
+ "eax": 8222237338122160866,
+ "ebx": 18148198842485040157,
+ "ecx": 13493578957230145717,
+ "edx": 12844844764822907593
+ },
"processorErrorInfo": [
{
- "checkInfo": {
- "level": 7,
- "operation": {
- "name": "Eviction",
- "value": 7
- },
- "overflow": true,
- "preciseIP": true,
- "processorContextCorrupt": true,
- "restartableIP": true,
- "transactionType": {
- "name": "Unknown (Reserved)",
- "value": 3
- },
- "uncorrected": true
- },
- "instructionPointer": 745435648286231437,
- "requestorID": 16343007456147047644,
- "type": {
- "guid": "a55701f5-e3ef-43de-ac72-249b573fad2c",
- "name": "Cache Check Error"
- }
- },
- {
- "checkInfo": {
- "addressSpace": {
- "name": "Other Transaction",
- "value": 3
- },
- "level": 7,
- "operation": {
- "name": "Eviction",
- "value": 7
- },
- "overflow": true,
- "participationType": {
- "name": "Generic",
- "value": 3
- },
- "preciseIP": true,
- "processorContextCorrupt": true,
- "restartableIP": true,
- "timedOut": true,
- "transactionType": {
- "name": "Unknown (Reserved)",
- "value": 3
- },
- "uncorrected": true
- },
- "instructionPointer": 9646768970891130615,
- "requestorID": 405788493636504313,
- "type": {
- "guid": "1cf3f8b3-c5b1-49a2-aa59-5eef92ffa63c",
- "name": "Bus Check Error"
- }
- },
- {
- "checkInfo": {
- "level": 7,
- "operation": {
- "name": "Eviction",
- "value": 7
- },
- "overflow": true,
- "preciseIP": true,
- "processorContextCorrupt": true,
- "restartableIP": true,
- "transactionType": {
- "name": "Unknown (Reserved)",
- "value": 3
- },
- "uncorrected": true
- },
- "instructionPointer": 10744557499837433896,
- "requestorID": 3323359649482135700,
"type": {
"guid": "fc06b535-5e1f-4562-9f25-0a3b9adb63c3",
"name": "TLB Check Error"
- }
+ },
+ "checkInfo": {
+ "transactionType": {
+ "value": 3,
+ "name": "Unknown (Reserved)"
+ },
+ "operation": {
+ "value": 7,
+ "name": "Eviction"
+ },
+ "level": 7,
+ "processorContextCorrupt": true,
+ "uncorrected": true,
+ "preciseIP": true,
+ "restartableIP": true,
+ "overflow": true
+ },
+ "requestorID": 9254433568748822516,
+ "instructionPointer": 12167231194572331088
}
],
- "processorErrorInfoNum": 3
+ "processorContextInfo": [
+ {
+ "registerContextType": {
+ "value": 0,
+ "name": "Unclassified Data"
+ },
+ "registerArraySize": 64,
+ "msrAddress": 3295317151,
+ "mmRegisterAddress": 16811525809593490861,
+ "registerArray": {
+ "data": "AzHpVE6k49q4RS3Wopu7v7keoy\/qPBKtbIZgnilKdxTliGYLHTmR67lyzyGHeYvPj\/ppiSW9xQiLPd6D0C4l1g=="
+ }
+ },
+ {
+ "registerContextType": {
+ "value": 0,
+ "name": "Unclassified Data"
+ },
+ "registerArraySize": 160,
+ "msrAddress": 3516620450,
+ "mmRegisterAddress": 7720870685723250929,
+ "registerArray": {
+ "data": "qBIdYuH34rLXudO5GpXs9iposS9cRat4ycrKdbbA0LIGg9QbrMvT6YNWtJ924UaMAhXO2r0M3y5KPMDnvvKN4\/kqRepmMuc2dpbfENxFBq9e\/d\/EIwTPA\/yKE4xJ5lN\/4MGvlVlqWUb7ejw0cyntoP8iN74YtQXMWVjEuj3K4maIxWe0uBmUYiwTtWmMuzZCkSJ6AhWdfmxwyu2z47KGAA=="
+ }
+ },
+ {
+ "registerContextType": {
+ "value": 1,
+ "name": "MSR Registers"
+ },
+ "registerArraySize": 64,
+ "msrAddress": 3203378266,
+ "mmRegisterAddress": 3428108381568043000,
+ "registerArray": {
+ "data": "35tplXBwFw7stT2MJvykVjrbNXxnWU7eN2xQjy8YySQj\/TpxatgDdIcedfW+Z5sW8ajnulKfmpkzQzrW\/hIc0Q=="
+ }
+ },
+ {
+ "registerContextType": {
+ "value": 3,
+ "name": "64-bit Mode Execution Context"
+ },
+ "registerArraySize": 244,
+ "msrAddress": 4102382359,
+ "mmRegisterAddress": 3234131391039715673,
+ "registerArray": {
+ "rax": 15479758182028395498,
+ "rbx": 1874686791808745760,
+ "rcx": 10172088013009644695,
+ "rdx": 7420739330752567280,
+ "rsi": 7635570582978682052,
+ "rdi": 1273333999633118435,
+ "rbp": 16491335997133279882,
+ "rsp": 11906157482669782535,
+ "r8": 6537777635043468407,
+ "r9": 7121652422525127647,
+ "r10": 3032736194212030921,
+ "r11": 4607858186015970980,
+ "r12": 16690077858839347378,
+ "r13": 9904904303440763327,
+ "r14": 13051218176022856589,
+ "r15": 13731629562638046557,
+ "cs": 3947,
+ "ds": 21306,
+ "ss": 10930,
+ "es": 11221,
+ "fs": 61528,
+ "gs": 34302,
+ "rflags": 13300422837648411735,
+ "eip": 17139711588125397277,
+ "cr0": 8640511536805871494,
+ "cr1": 9668975147024588496,
+ "cr2": 259977116627466639,
+ "cr3": 6356628090976137730,
+ "cr4": 9323506531456948440,
+ "cr8": 12934126023774581311,
+ "gdtr_0": 6171200792786982966,
+ "gdtr_1": 9554350576455961178,
+ "idtr_0": 6463084586460836077,
+ "idtr_1": 231717354960194715,
+ "ldtr": 41467,
+ "tr": 49511
+ }
+ }
+ ]
}
}
]
diff --git a/examples/memory.cperhex b/examples/memory.cperhex
index 4cccced..fb46cb9 100644
--- a/examples/memory.cperhex
+++ b/examples/memory.cperhex
@@ -1,10 +1,10 @@
-435045520000ffffffff0100030000000300000018010000570008000703
-240800000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100020000000300000018010000190001001701
+329900000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-0000000000009b66466a0000000004000000000000000000000000000000
-0000000000000000c800000050000000ff540300e40000001411bca5646f
-de4eb8633e83ed7c83b11ef8ff88a12f63a0831c78680078fbb102000000
-336b67775a414e63225c5b675e0000000000000055552700000000000013
-6200000000000000000000000000365d829009be737a0000dbcb00006c82
-00004f1e00001a1b00000000000000000f4f37180daa93a6000000000000
-00000320000068c8e737
\ No newline at end of file
+000000000000fb065a720000000004000000000000000000000000000000
+0000000000000000c800000050000000a97203000b0000001411bca5646f
+de4eb8633e83ed7c83b17d6e474cb944ab3e6f241438848ed43c00000000
+2b712460347047782753364077597c356770210055552700000000000010
+6b00000000002a7ed950091e2d63a68e2594f5e041977598e5d9314780cd
+54fb6e612b6bbe058d10e43955af54ba8694bcde1531b84482c0606fbab4
+9eb500c0ce568d137c52
\ No newline at end of file
diff --git a/examples/memory.json b/examples/memory.json
index aa02d59..707e1fb 100644
--- a/examples/memory.json
+++ b/examples/memory.json
@@ -1,96 +1,97 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 1782998683,
- "recordLength": 280,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 2,
+ "name": "Corrected"
},
- "timestamp": "0824-03-07T08:00:57+00:00",
- "timestampIsPrecise": false
+ "recordLength": 280,
+ "timestamp": "9932-01-17T01:00:19+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1918502651,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": false,
- "latentError": true,
- "overflow": true,
- "primary": false,
- "propagated": true,
- "reset": true,
- "resourceNotAccessible": false
- },
- "fruID": "88fff81e-2fa1-a063-831c-78680078fbb1",
- "fruText": "3kgwZANc\"\\[g^",
- "revision": {
- "major": 84,
- "minor": 255
- },
- "sectionLength": 80,
"sectionOffset": 200,
+ "sectionLength": 80,
+ "revision": {
+ "major": 114,
+ "minor": 169
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": true,
+ "reset": false,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": false,
+ "latentError": false,
+ "propagated": false,
+ "overflow": false
+ },
"sectionType": {
"data": "a5bc1114-6f64-4ede-b863-3e83ed7c83b1",
"type": "Platform Memory"
},
+ "fruID": "4c476e7d-44b9-3eab-6f24-1438848ed43c",
+ "fruText": "+q$`4pGx'S6@wY|5gp!",
"severity": {
- "code": 2,
- "name": "Corrected"
+ "code": 0,
+ "name": "Recoverable"
}
}
],
"sections": [
{
+ "message": "A Unknown Memory Error occurred",
"Memory": {
- "bank": {
- "value": 33388
- },
- "bitPosition": 6938,
- "card": 52187,
- "cardSmbiosHandle": 51304,
"errorStatus": {
- "addressSignal": false,
+ "errorType": {
+ "value": 16,
+ "description": "Error detected in the bus.",
+ "name": "ERR_BUS"
+ },
+ "addressSignal": true,
"controlSignal": true,
"dataSignal": false,
+ "detectedByResponder": true,
"detectedByRequester": false,
- "detectedByResponder": false,
- "errorType": {
- "description": "Access to a memory address which is not mapped to any component.",
- "name": "ERR_UNIMPL",
- "value": 19
- },
"firstError": true,
"overflowDroppedLogs": true
},
- "extended": {
- "chipIdentification": 1,
- "rowBit16": false,
- "rowBit17": false
+ "bank": {
+ "value": 52608
},
"memoryErrorType": {
- "name": "Multi-bit ECC",
- "value": 3
+ "value": 0,
+ "name": "Unknown"
},
- "moduleSmbiosHandle": 14311,
- "physicalAddressMask": 8823605043237379382,
- "responderID": 12003124405090078479,
- "row": 7759
+ "extended": {
+ "rowBit16": false,
+ "rowBit17": false,
+ "chipIdentification": 6
+ },
+ "cardSmbiosHandle": 5005,
+ "moduleSmbiosHandle": 21116,
+ "physicalAddressMask": 10899239918570409638,
+ "card": 55781,
+ "row": 24942,
+ "bitPosition": 1470,
+ "responderID": 4951761760294835334
}
}
]
diff --git a/examples/memory2.cperhex b/examples/memory2.cperhex
index 8965ab9..9ce6c1e 100644
--- a/examples/memory2.cperhex
+++ b/examples/memory2.cperhex
@@ -1,10 +1,10 @@
-435045520000ffffffff0100000000000300000028010000320004003009
-289200000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100010000000300000028010000370016003005
+194400000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-00000000000054b3d9380000000004000000000000000000000000000000
-0000000000000000c800000060000000f6a303005a000000fc04ec61e648
-13d825c98daa44750b125648827536bdc82c61f439bb3276da2a03000000
-5e76533e6b6f5d59316f4e00000000000000000057550500000000000018
-6200000000007b8fe15494754269365d829009be737a0000dbcb00006c82
-00000000a0401a1b0000000070b1cda6000000000d000100000000000000
-00002c28aecc68c8e7370000000000000000b7112fc400000000
\ No newline at end of file
+000000000000898c39470000000004000000000000000000000000000000
+0000000000000000c80000006000000003640300c1000000fc04ec61e648
+13d825c98daa44750b124bace0f830d6075b2e4c8262eaf7f4aa01000000
+35762a24776835682d2b705d412e56782b68600055550500000000000013
+5600000000001b10b306653dca8c3a9104f7e572369bdb101de7b4733b92
+ea19adf8dc69fb2fc0de3cfbc05847174c7452467d060100acd822448771
+6b75fe1733b77e62b6816145ee1e0e4a5dce567acf77db67e808
\ No newline at end of file
diff --git a/examples/memory2.json b/examples/memory2.json
index 5213cf3..88f7003 100644
--- a/examples/memory2.json
+++ b/examples/memory2.json
@@ -1,93 +1,94 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 953791316,
- "recordLength": 296,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 0,
- "name": "Recoverable"
+ "code": 1,
+ "name": "Fatal"
},
- "timestamp": "9228-09-30T04:00:32+00:00",
- "timestampIsPrecise": false
+ "recordLength": 296,
+ "timestamp": "4419-05-30T16:00:37+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1194953865,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": true,
- "latentError": false,
- "overflow": false,
- "primary": false,
- "propagated": true,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "75824856-bd36-2cc8-61f4-39bb3276da2a",
- "fruText": "^vS>ko]Y1oN",
- "revision": {
- "major": 163,
- "minor": 246
- },
- "sectionLength": 96,
"sectionOffset": 200,
+ "sectionLength": 96,
+ "revision": {
+ "major": 100,
+ "minor": 3
+ },
+ "flags": {
+ "primary": true,
+ "containmentWarning": false,
+ "reset": false,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": false,
+ "latentError": false,
+ "propagated": true,
+ "overflow": true
+ },
"sectionType": {
"data": "61ec04fc-48e6-d813-25c9-8daa44750b12",
"type": "Platform Memory 2"
},
+ "fruID": "f8e0ac4b-d630-5b07-2e4c-8262eaf7f4aa",
+ "fruText": "5v*$wh5h-+p]A.Vx+h`",
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 1,
+ "name": "Fatal"
}
}
],
"sections": [
{
+ "message": "An Unknown Memory Error occurred at address 0x8CCA3D6506B3101B",
"Memory2": {
- "bank": {
- "value": 33388
- },
- "card": 52187,
- "cardSmbiosHandle": 3291419063,
- "chipID": 13,
"errorStatus": {
+ "errorType": {
+ "value": 19,
+ "description": "Access to a memory address which is not mapped to any component.",
+ "name": "ERR_UNIMPL"
+ },
"addressSignal": false,
"controlSignal": true,
- "dataSignal": false,
- "detectedByRequester": false,
+ "dataSignal": true,
"detectedByResponder": false,
- "errorType": {
- "description": "Detection of a PATH_ERROR.",
- "name": "ERR_ERROR",
- "value": 24
- },
- "firstError": true,
+ "detectedByRequester": true,
+ "firstError": false,
"overflowDroppedLogs": true
},
- "physicalAddress": 7584754002385014651,
- "physicalAddressHex": "0x6942759454E18F7B",
- "physicalAddressMask": 8823605043237379382,
- "rank": 2798498160,
- "responderID": 4028408744142317612,
- "row": 454705312,
+ "bank": {
+ "value": 37435
+ },
"status": {
- "state": "Uncorrected",
- "value": 1
- }
+ "value": 1,
+ "state": "Uncorrected"
+ },
+ "physicalAddress": 10144988614718853147,
+ "physicalAddressHex": "0x8CCA3D6506B3101B",
+ "physicalAddressMask": 11184253056638554426,
+ "card": 59165,
+ "row": 805005788,
+ "rank": 390551744,
+ "chipID": 125,
+ "responderID": 9346766373033023486,
+ "cardSmbiosHandle": 2010085974
}
}
]
diff --git a/examples/nvidia.cperhex b/examples/nvidia.cperhex
index 34bcbb6..51a0b3d 100644
--- a/examples/nvidia.cperhex
+++ b/examples/nvidia.cperhex
@@ -1,11 +1,11 @@
-435045520000ffffffff0100030000000300000048010000150001000309
-284800000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100030000000300000048010000140013001210
+578800000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000a08dc9540000000004000000000000000000000000000000
-0000000000000000c800000080000000c82c030039000000f244526d1227
-ec11bea7cb3fdb95c7863de1dcbf57127d1f3fde13789945ee7302000000
-3229753e346f5438566f27202334000000000000504349652d4450430000
-0000000000007b8fe15400750600365d829009be737a9943dbcb69b56c82
-6d4e4f1ea0401a1bcffb6f6370b1cda60f4f37180daa93a6ed6e715623dd
-d9902c28aecc68c8e737c3569b330868da17b7112fc4bbc26aa830dbff54
-b8d8e4e40093b0695b97a01fee3b52f6a32c0d5a3d3c1ef8ff88a12f
\ No newline at end of file
+000000000000ec084a1c0000000004000000000000000000000000000000
+0000000000000000c800000080000000821c03009e000000f244526d1227
+ec11bea7cb3fdb95c786abc15be880d8f33b28c11246ed4db96901000000
+5233507c2a6444453d2c6a734222466e343f59004853532d425553590000
+000000000000bd7b486503d60600122f9f234a3ad5c94732ae0285cccf1b
+8406dbb841aa6986cc5993851c2aa5c7af36e4819be7a5dd183dd674339b
+0595f9c78e33271b94f510b0d40288695d02e144d88bb197bcce3ca900af
+e394c2edb3cce6ffb999cc8f0a82dcb5aca4de202e21a8826eabfcf1
\ No newline at end of file
diff --git a/examples/nvidia.json b/examples/nvidia.json
index a2826a1..fce2def 100644
--- a/examples/nvidia.json
+++ b/examples/nvidia.json
@@ -1,18 +1,5 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 1422495136,
- "recordLength": 328,
"revision": {
"major": 0,
"minor": 0
@@ -22,78 +9,92 @@
"code": 3,
"name": "Informational"
},
- "timestamp": "4828-09-03T01:00:15+00:00",
- "timestampIsPrecise": false
+ "recordLength": 328,
+ "timestamp": "8857-10-12T13:00:14+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 474613996,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": true,
- "latentError": true,
- "overflow": false,
- "primary": true,
- "propagated": false,
- "reset": false,
- "resourceNotAccessible": true
- },
- "fruID": "bfdce13d-1257-1f7d-3fde-13789945ee73",
- "fruText": "2)u>4oT8Vo' #4",
- "revision": {
- "major": 44,
- "minor": 200
- },
- "sectionLength": 128,
"sectionOffset": 200,
+ "sectionLength": 128,
+ "revision": {
+ "major": 28,
+ "minor": 130
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": true,
+ "reset": true,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": false,
+ "propagated": false,
+ "overflow": true
+ },
"sectionType": {
"data": "6d5244f2-2712-11ec-bea7-cb3fdb95c786",
"type": "NVIDIA"
},
+ "fruID": "e85bc1ab-d880-3bf3-28c1-1246ed4db969",
+ "fruText": "R3P|*dDE=,jsB\"Fn4?Y",
"severity": {
- "code": 2,
- "name": "Corrected"
+ "code": 1,
+ "name": "Fatal"
}
}
],
"sections": [
{
+ "message": "A Informational HSS-BUSY NVIDIA Error occurred on CPU 214",
"Nvidia": {
- "errorInstance": 21729,
- "errorType": 36731,
- "instanceBase": 8823605043237379382,
+ "signature": "HSS-BUSY",
+ "severity": {
+ "code": 3,
+ "name": "Informational"
+ },
+ "errorType": 31677,
+ "errorInstance": 25928,
+ "socket": 214,
"registerCount": 6,
+ "instanceBase": 14543594661762510610,
"registers": [
{
- "address": 9398085988411720601,
- "value": 1952944444865990253
+ "address": 2004045230850847303,
+ "value": 9685459672887920260
},
{
- "address": 12019458076784458703,
- "value": 12003124405090078479
+ "address": 14385950886693394892,
+ "value": 15971426308624496303
},
{
- "address": 10437616755251703533,
- "value": 4028408744142317612
+ "address": 10738159531840650520,
+ "value": 17695798691028191225
},
{
- "address": 1718800592230110915,
- "value": 12135726257609314743
+ "address": 170408393793908752,
+ "value": 14896948456245970145
},
{
- "address": 16493546021549234992,
- "value": 2278987830320468736
+ "address": 17132419638085331260,
+ "value": 10361825866813983923
},
{
- "address": 6488891720834628590,
- "value": 3432175023993797693
+ "address": 2368511515735917066,
+ "value": 17437000348398526766
}
- ],
- "severity": {
- "code": 0,
- "name": "Recoverable"
- },
- "signature": "PCIe-DPC",
- "socket": 117
+ ]
}
}
]
diff --git a/examples/nvidia_cmet_info.json b/examples/nvidia_cmet_info.json
index 4c3c892..072cce8 100644
--- a/examples/nvidia_cmet_info.json
+++ b/examples/nvidia_cmet_info.json
@@ -55,6 +55,7 @@
],
"sections": [
{
+ "message": "A Informational CMET-INFO NVIDIA Error occurred on CPU 0",
"Nvidia": {
"signature": "CMET-INFO",
"severity": {
diff --git a/examples/pcibus.cperhex b/examples/pcibus.cperhex
index 64ae4d1..900ee4e 100644
--- a/examples/pcibus.cperhex
+++ b/examples/pcibus.cperhex
@@ -1,10 +1,10 @@
-435045520000ffffffff0100000000000300000010010000100004001608
-927600000000000000000000000000000000000000000000000000000000
+435045520000ffffffff0100010000000300000010010000480011002705
+063800000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-000000000000ae8a8f560000000004000000000000000000000000000000
-0000000000000000c8000000480000002fc403006a000000633975c5843b
-9540bf78eddad3f9c9dd52f6a32c0d5a3d3c1ef8ff88a12f63a002000000
-482056516a336b67775a414e000000000000000055010000000000000011
-6200000000000000e1540000000000000000000000009943dbcb69b56c82
-0000000000000000cffb6f6370b1cda60000000000000000ed6e715623dd
-d990
\ No newline at end of file
+0000000000001377e67d0000000004000000000000000000000000000000
+0000000000000000c80000004800000031c9030086000000633975c5843b
+9540bf78eddad3f9c9dd6a9010d38e0bd98a3441ef3c7c1268b100000000
+7e3b274e7e784d55577e726b33615c386f6c510055010000000000000013
+2900000000000000ef3b000000008a5a7a65f75a0178c70d4368d1051754
+00000000000000007ccf35b3667e12d3e3a453fd66de249ea025c250d571
+3c57
\ No newline at end of file
diff --git a/examples/pcibus.json b/examples/pcibus.json
index 4bdbcfa..89677df 100644
--- a/examples/pcibus.json
+++ b/examples/pcibus.json
@@ -1,85 +1,86 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 1452247726,
- "recordLength": 272,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 0,
- "name": "Recoverable"
+ "code": 1,
+ "name": "Fatal"
},
- "timestamp": "7692-08-16T04:00:10+00:00",
- "timestampIsPrecise": false
+ "recordLength": 272,
+ "timestamp": "3806-05-27T11:00:48+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 2112255763,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": true,
- "latentError": true,
- "overflow": false,
- "primary": false,
- "propagated": true,
- "reset": false,
- "resourceNotAccessible": false
- },
- "fruID": "2ca3f652-5a0d-3c3d-1ef8-ff88a12f63a0",
- "fruText": "H VQj3kgwZAN",
- "revision": {
- "major": 196,
- "minor": 47
- },
- "sectionLength": 72,
"sectionOffset": 200,
+ "sectionLength": 72,
+ "revision": {
+ "major": 201,
+ "minor": 49
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": true,
+ "reset": true,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": false,
+ "latentError": false,
+ "propagated": false,
+ "overflow": true
+ },
"sectionType": {
"data": "c5753963-3b84-4095-bf78-eddad3f9c9dd",
- "type": "PCI/PCI-X Bus"
+ "type": "PCI\/PCI-X Bus"
},
+ "fruID": "d310906a-0b8e-8ad9-3441-ef3c7c1268b1",
+ "fruText": "~;'N~xMUW~rk3a\\8olQ",
"severity": {
- "code": 2,
- "name": "Corrected"
+ "code": 0,
+ "name": "Recoverable"
}
}
],
"sections": [
{
+ "message": "A PCI\/PCI-X Bus Error occurred",
"PciBus": {
- "busData": 9398085988411720601,
- "busID": {
- "busNumber": 225,
- "segmentNumber": 84
- },
- "busRequestorID": 12019458076784458703,
- "busRequestorIDHex": "0xA6CDB170636FFBCF",
"errorStatus": {
- "addressSignal": false,
- "controlSignal": true,
- "dataSignal": false,
- "detectedByRequester": false,
- "detectedByResponder": false,
"errorType": {
- "description": "Virtual address not found on IO-TLB or IO-PDIR.",
- "name": "ERR_MAP",
- "value": 17
+ "value": 19,
+ "description": "Access to a memory address which is not mapped to any component.",
+ "name": "ERR_UNIMPL"
},
+ "addressSignal": true,
+ "controlSignal": false,
+ "dataSignal": false,
+ "detectedByResponder": true,
+ "detectedByRequester": false,
"firstError": true,
- "overflowDroppedLogs": true
+ "overflowDroppedLogs": false
},
- "targetID": 10437616755251703533
+ "busID": {
+ "busNumber": 239,
+ "segmentNumber": 59
+ },
+ "busData": 6059318220605820359,
+ "busRequestorID": 15209357871141998460,
+ "busRequestorIDHex": "0xD3127E66B335CF7C",
+ "targetID": 6286024340899243424
}
}
]
diff --git a/examples/pcidev.cperhex b/examples/pcidev.cperhex
index 5a98497..573a4f9 100644
--- a/examples/pcidev.cperhex
+++ b/examples/pcidev.cperhex
@@ -1,10 +1,11 @@
-435045520000ffffffff01000300000003000000300100004200200027043651
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-69f9400800000000040000000000000000000000000000000000000000000000
-c800000068000000f8ff03002f00000085465eeb66ca6947b6a226068b001326
-61f439bb3276da2a7562cba4c66b28e202000000160d6f1c5d59316f041c4e73
-760f723c144d450015000000000000000017310000000000e15494754269365d
-829009000000000001000000030000004f1ea0401a1bcffb6f6370b1cda60f4f
-37180daa93a6ed6e715623ddd9902c28aecc68c8e737c3569b330868da17b711
-2fc4bbc26aa830dbff54b8d8e4e40093
\ No newline at end of file
+435045520000ffffffff0100000000000300000040010000110021002204
+079700000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000
+000000000000be8d0d2b0000000004000000000000000000000000000000
+0000000000000000c8000000780000000c460300f600000085465eeb66ca
+6947b6a226068b001326f52a89af14b6cb0e826a37a2e235cdd002000000
+232e7d3f324d3b2b7a706276614b2a432642300015000000000000000009
+740000000000843cd4a9ab74c5f6ebe56300000000000200000003000000
+77368a4ad47c1dff5fbca22ae8b0b0eb0170ccf39b46ea181699651fa1ae
+77a31f89529bc2962eb681971bf9f407c0ffb202045d81e2fe11f68ec2a6
+0f9de61ba1ad4b84f2264b0cd49b45f81ab71aa1
\ No newline at end of file
diff --git a/examples/pcidev.json b/examples/pcidev.json
index a1bb2aa..61e73bb 100644
--- a/examples/pcidev.json
+++ b/examples/pcidev.json
@@ -1,53 +1,54 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 138475881,
- "recordLength": 304,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 3,
- "name": "Informational"
+ "code": 0,
+ "name": "Recoverable"
},
- "timestamp": "5136-04-27T20:00:42+00:00",
- "timestampIsPrecise": false
+ "recordLength": 320,
+ "timestamp": "9707-04-22T21:00:11+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 722308542,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": true,
- "errorThresholdExceeded": true,
- "latentError": true,
- "overflow": false,
- "primary": true,
- "propagated": false,
- "reset": true,
- "resourceNotAccessible": false
- },
- "fruID": "bb39f461-7632-2ada-7562-cba4c66b28e2",
- "revision": {
- "major": 255,
- "minor": 248
- },
- "sectionLength": 104,
"sectionOffset": 200,
+ "sectionLength": 120,
+ "revision": {
+ "major": 70,
+ "minor": 12
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": true,
+ "reset": true,
+ "errorThresholdExceeded": false,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": true,
+ "overflow": true
+ },
"sectionType": {
"data": "eb5e4685-ca66-4769-b6a2-26068b001326",
- "type": "PCI Component/Device"
+ "type": "PCI Component\/Device"
},
+ "fruID": "af892af5-b614-0ecb-826a-37a2e235cdd0",
+ "fruText": "#.}?2M;+zpbvaK*C&B0",
"severity": {
"code": 2,
"name": "Corrected"
@@ -56,38 +57,43 @@
],
"sections": [
{
+ "message": "A PCI\/PCI-X Device Error occurred",
"PciComponent": {
"errorStatus": {
- "addressSignal": true,
- "controlSignal": false,
- "dataSignal": false,
- "detectedByRequester": true,
- "detectedByResponder": false,
"errorType": {
- "description": "Detection of a protocol error.",
- "name": "ERR_PROTOCOL",
- "value": 23
+ "value": 9,
+ "description": "Overflow or underflow of internal queue.",
+ "name": "ERR_FLOW"
},
+ "addressSignal": false,
+ "controlSignal": false,
+ "dataSignal": true,
+ "detectedByResponder": false,
+ "detectedByRequester": true,
"firstError": true,
- "overflowDroppedLogs": false
+ "overflowDroppedLogs": true
},
- "memoryNumber": 1,
+ "memoryNumber": 2,
"registerDataPairs": [
{
- "firstHalf": 18144751223266352719,
- "secondHalf": 5696955456022405999
+ "firstHalf": 18382986505221715575,
+ "secondHalf": 16983268706008349791
},
{
- "firstHalf": 7993228066795886647,
- "secondHalf": 2894847925884769905
+ "firstHalf": 1795325037084700673,
+ "secondHalf": 11779075357450541334
},
{
- "firstHalf": 6251902176359664814,
- "secondHalf": 1276515246198502299
+ "firstHalf": 13127595726405273887,
+ "secondHalf": 18428738423932819329
},
{
- "firstHalf": 15794309069675414575,
- "secondHalf": 10592717995115042047
+ "firstHalf": 1296722787968484018,
+ "secondHalf": 2010466974215343862
+ },
+ {
+ "firstHalf": 885844574751927713,
+ "secondHalf": 11608792315963218900
}
]
}
diff --git a/examples/pcie.json b/examples/pcie.json
index ead449e..44f16f0 100644
--- a/examples/pcie.json
+++ b/examples/pcie.json
@@ -56,6 +56,7 @@
],
"sections": [
{
+ "message": "A PCIe Error occurred",
"Pcie": {
"aerInfo": {
"advanced_error_capabilities_and_control": {
diff --git a/examples/unknown.cperhex b/examples/unknown.cperhex
index 42fda91..4b75d7a 100644
--- a/examples/unknown.cperhex
+++ b/examples/unknown.cperhex
@@ -1,11 +1,7 @@
-435045520000ffffffff0100020000000300000039010000520006000502
-004700000000000000000000000000000000000000000000000000000000
+435045520000ffffffff01000300000003000000ca000000270016001608
+343500000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
-00000000000052084c290000000004000000000000000000000000000000
-0000000000000000c800000071000000831c030000000000e15648827536
-bdc82c61f439bb3276da2a7562cba4c66b28e2e390e25c8b933d02000000
-6f4e7376723c4d452d2920322900000000000000dbd0603225daa119b7e2
-cdb151f0fc7b8fe15494754269365d829009be737a9943dbcb69b56c826d
-4e4f1ea0401a1bcffb6f6370b1cda60f4f37180daa93a6ed6e715623ddd9
-902c28aecc68c8e737c3569b330868da17b7112fc4bbc26aa830dbff54b8
-d8e4e40093b0695b97a01fee3b
\ No newline at end of file
+000000000000ff7dac520000000004000000000000000000000000000000
+0000000000000000c800000002000000b6f20300bc0000007064c282a3d9
+9d37acc02c9ce424d4ead6f85196781fe9816ebae1f3239cf1a100000000
+38742e48422852274d784456603678635c6474008435
\ No newline at end of file
diff --git a/examples/unknown.json b/examples/unknown.json
index 22cecb3..b8a91c6 100644
--- a/examples/unknown.json
+++ b/examples/unknown.json
@@ -1,64 +1,64 @@
{
"header": {
- "creatorID": "00000000-0000-0000-0000-000000000000",
- "flags": {
- "name": "HW_ERROR_FLAGS_SIMULATED",
- "value": 4
- },
- "notificationType": {
- "guid": "00000000-0000-0000-0000-000000000000",
- "type": "Unknown"
- },
- "persistenceInfo": 0,
- "platformID": "00000000-0000-0000-0000-000000000000",
- "recordID": 692848722,
- "recordLength": 313,
"revision": {
"major": 0,
"minor": 0
},
"sectionCount": 1,
"severity": {
- "code": 2,
- "name": "Corrected"
+ "code": 3,
+ "name": "Informational"
},
- "timestamp": "4700-02-05T06:00:52+00:00",
- "timestampIsPrecise": false
+ "recordLength": 202,
+ "timestamp": "3534-08-16T16:00:27+00:00",
+ "timestampIsPrecise": false,
+ "platformID": "00000000-0000-0000-0000-000000000000",
+ "creatorID": "00000000-0000-0000-0000-000000000000",
+ "notificationType": {
+ "guid": "00000000-0000-0000-0000-000000000000",
+ "type": "Unknown"
+ },
+ "recordID": 1387036159,
+ "flags": {
+ "value": 4,
+ "name": "HW_ERROR_FLAGS_SIMULATED"
+ },
+ "persistenceInfo": 0
},
"sectionDescriptors": [
{
- "flags": {
- "containmentWarning": false,
- "errorThresholdExceeded": false,
- "latentError": false,
- "overflow": false,
- "primary": false,
- "propagated": false,
- "reset": false,
- "resourceNotAccessible": false
- },
- "fruID": "cb62752a-c6a4-286b-e2e3-90e25c8b933d",
- "fruText": "oNsvr<ME-) 2)",
- "revision": {
- "major": 28,
- "minor": 131
- },
- "sectionLength": 113,
"sectionOffset": 200,
+ "sectionLength": 2,
+ "revision": {
+ "major": 242,
+ "minor": 182
+ },
+ "flags": {
+ "primary": false,
+ "containmentWarning": false,
+ "reset": true,
+ "errorThresholdExceeded": true,
+ "resourceNotAccessible": true,
+ "latentError": true,
+ "propagated": false,
+ "overflow": true
+ },
"sectionType": {
- "data": "824856e1-3675-c8bd-2c61-f439bb3276da",
+ "data": "82c26470-d9a3-379d-acc0-2c9ce424d4ea",
"type": "Unknown"
},
+ "fruID": "9651f8d6-1f78-81e9-6eba-e1f3239cf1a1",
+ "fruText": "8t.HB(R'MxDV`6xc\\dt",
"severity": {
- "code": 2,
- "name": "Corrected"
+ "code": 0,
+ "name": "Recoverable"
}
}
],
"sections": [
{
"Unknown": {
- "data": "29BgMiXaoRm34s2xUfD8e4/hVJR1Qmk2XYKQCb5zeplD28tptWyCbU5PHqBAGhvP+29jcLHNpg9PNxgNqpOm7W5xViPd2ZAsKK7MaMjnN8NWmzMIaNoXtxEvxLvCaqgw2/9UuNjk5ACTsGlbl6Af7js="
+ "data": "hDU="
}
}
]
diff --git a/include/libcper/Cper.h b/include/libcper/Cper.h
index c4643c6..b3333d3 100644
--- a/include/libcper/Cper.h
+++ b/include/libcper/Cper.h
@@ -58,6 +58,17 @@
#define EFI_UINT64_HEX_STRING_LEN 19
///
+/// Length of a single line description for the entire section.
+///
+#define SECTION_DESC_STRING_SIZE 512
+
+///
+/// Length of the description of certain fields within the section.
+///
+#define EFI_ERROR_DESCRIPTION_STRING_LEN 64
+#define EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN 128
+
+///
/// The timestamp correlates to the time when the error information was collected
/// by the system software and may not necessarily represent the time of the error
/// event. The timestamp contains the local time in BCD format.
diff --git a/include/libcper/sections/cper-section-ampere.h b/include/libcper/sections/cper-section-ampere.h
index b03f2da..c3fb610 100644
--- a/include/libcper/sections/cper-section-ampere.h
+++ b/include/libcper/sections/cper-section-ampere.h
@@ -5,7 +5,8 @@
#include <json.h>
#include <libcper/Cper.h>
-json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_ampere_to_cper(json_object *section, FILE *out);
#endif
diff --git a/include/libcper/sections/cper-section-arm.h b/include/libcper/sections/cper-section-arm.h
index c0af80f..2ec5084 100644
--- a/include/libcper/sections/cper-section-arm.h
+++ b/include/libcper/sections/cper-section-arm.h
@@ -133,7 +133,8 @@
"sctlr_el3", "sp_el3", "spsr_el3", "tcr_el3", \
"tpidr_el3", "ttbr0_el3" }
-json_object *cper_section_arm_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_arm_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_arm_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-ccix-per.h b/include/libcper/sections/cper-section-ccix-per.h
index 256954c..8716c5e 100644
--- a/include/libcper/sections/cper-section-ccix-per.h
+++ b/include/libcper/sections/cper-section-ccix-per.h
@@ -24,7 +24,8 @@
UINT16 Reserved;
} __attribute__((packed, aligned(1))) EFI_CCIX_PER_LOG_DATA;
-json_object *cper_section_ccix_per_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_ccix_per_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_ccix_per_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-cxl-component.h b/include/libcper/sections/cper-section-cxl-component.h
index 3e3eb5c..ead0e9b 100644
--- a/include/libcper/sections/cper-section-cxl-component.h
+++ b/include/libcper/sections/cper-section-cxl-component.h
@@ -35,8 +35,8 @@
UINT64 DeviceSerial;
} __attribute__((packed, aligned(1))) EFI_CXL_COMPONENT_EVENT_HEADER;
-json_object *cper_section_cxl_component_to_ir(const UINT8 *section,
- UINT32 size);
+json_object *cper_section_cxl_component_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_cxl_component_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-cxl-protocol.h b/include/libcper/sections/cper-section-cxl-protocol.h
index f707003..f74cc4d 100644
--- a/include/libcper/sections/cper-section-cxl-protocol.h
+++ b/include/libcper/sections/cper-section-cxl-protocol.h
@@ -63,7 +63,8 @@
UINT32 Reserved;
} __attribute__((packed, aligned(1))) EFI_CXL_PROTOCOL_ERROR_DATA;
-json_object *cper_section_cxl_protocol_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_cxl_protocol_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_cxl_protocol_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-dmar-generic.h b/include/libcper/sections/cper-section-dmar-generic.h
index 3376dd5..d38b79c 100644
--- a/include/libcper/sections/cper-section-dmar-generic.h
+++ b/include/libcper/sections/cper-section-dmar-generic.h
@@ -43,7 +43,8 @@
#define DMAR_GENERIC_ERROR_ARCH_TYPES_KEYS (int[]){ 0x0, 0x1 }
#define DMAR_GENERIC_ERROR_ARCH_TYPES_VALUES (const char *[]){ "VT-d", "IOMMU" }
-json_object *cper_section_dmar_generic_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_dmar_generic_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_dmar_generic_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-dmar-iommu.h b/include/libcper/sections/cper-section-dmar-iommu.h
index 5bee4d4..ac33a60 100644
--- a/include/libcper/sections/cper-section-dmar-iommu.h
+++ b/include/libcper/sections/cper-section-dmar-iommu.h
@@ -9,7 +9,8 @@
#include <json.h>
#include <libcper/Cper.h>
-json_object *cper_section_dmar_iommu_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_dmar_iommu_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_dmar_iommu_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-dmar-vtd.h b/include/libcper/sections/cper-section-dmar-vtd.h
index 3d248d1..9de31f1 100644
--- a/include/libcper/sections/cper-section-dmar-vtd.h
+++ b/include/libcper/sections/cper-section-dmar-vtd.h
@@ -28,7 +28,8 @@
UINT64 Resv3 : 1;
} EFI_VTD_FAULT_RECORD;
-json_object *cper_section_dmar_vtd_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_dmar_vtd_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_dmar_vtd_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-firmware.h b/include/libcper/sections/cper-section-firmware.h
index 87614dc..5e8fb28 100644
--- a/include/libcper/sections/cper-section-firmware.h
+++ b/include/libcper/sections/cper-section-firmware.h
@@ -15,7 +15,8 @@
"SOC Firmware Error Record (Type1 Legacy)", \
"SOC Firmware Error Record (Type2)" }
-json_object *cper_section_firmware_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_firmware_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_firmware_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-generic.h b/include/libcper/sections/cper-section-generic.h
index bc7c112..3bf608b 100644
--- a/include/libcper/sections/cper-section-generic.h
+++ b/include/libcper/sections/cper-section-generic.h
@@ -39,7 +39,8 @@
#define GENERIC_FLAGS_BITFIELD_NAMES \
(const char *[]){ "restartable", "preciseIP", "overflow", "corrected" }
-json_object *cper_section_generic_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_generic_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_generic_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-ia32x64.h b/include/libcper/sections/cper-section-ia32x64.h
index b3a1233..b879845 100644
--- a/include/libcper/sections/cper-section-ia32x64.h
+++ b/include/libcper/sections/cper-section-ia32x64.h
@@ -77,7 +77,8 @@
UINT64 Reserved[2];
} EFI_IA32_X64_CPU_ID;
-json_object *cper_section_ia32x64_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_ia32x64_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_ia32x64_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-ipf.h b/include/libcper/sections/cper-section-ipf.h
index 0541d65..a7ad80f 100644
--- a/include/libcper/sections/cper-section-ipf.h
+++ b/include/libcper/sections/cper-section-ipf.h
@@ -65,7 +65,8 @@
UINT64 Frs[256];
} EFI_IPF_PSI_STATIC;
-json_object *cper_section_ipf_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_ipf_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
#ifdef __cplusplus
}
diff --git a/include/libcper/sections/cper-section-memory.h b/include/libcper/sections/cper-section-memory.h
index e8536dd..ca3045b 100644
--- a/include/libcper/sections/cper-section-memory.h
+++ b/include/libcper/sections/cper-section-memory.h
@@ -76,9 +76,11 @@
"bankAddressValid" }
json_object *cper_section_platform_memory_to_ir(const UINT8 *section,
- UINT32 size);
+ UINT32 size,
+ char **desc_string);
json_object *cper_section_platform_memory2_to_ir(const UINT8 *section,
- UINT32 size);
+ UINT32 size,
+ char **desc_string);
void ir_section_memory_to_cper(json_object *section, FILE *out);
void ir_section_memory2_to_cper(json_object *section, FILE *out);
diff --git a/include/libcper/sections/cper-section-nvidia.h b/include/libcper/sections/cper-section-nvidia.h
index 59ac492..8d62eb4 100644
--- a/include/libcper/sections/cper-section-nvidia.h
+++ b/include/libcper/sections/cper-section-nvidia.h
@@ -20,7 +20,8 @@
sizeof(channel_disable_reason_dict) /
sizeof(channel_disable_reason_dict[0]);
-json_object *cper_section_nvidia_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_nvidia_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_nvidia_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-pci-bus.h b/include/libcper/sections/cper-section-pci-bus.h
index 906af48..85f37c2 100644
--- a/include/libcper/sections/cper-section-pci-bus.h
+++ b/include/libcper/sections/cper-section-pci-bus.h
@@ -26,7 +26,8 @@
"Address Parity Error", \
"Command Parity Error" }
-json_object *cper_section_pci_bus_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_pci_bus_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_pci_bus_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-pci-dev.h b/include/libcper/sections/cper-section-pci-dev.h
index cb6321c..0a588a1 100644
--- a/include/libcper/sections/cper-section-pci-dev.h
+++ b/include/libcper/sections/cper-section-pci-dev.h
@@ -47,7 +47,8 @@
} __attribute__((packed, aligned(1))) EFI_PCI_PCIX_DEVICE_ERROR_DATA;
-json_object *cper_section_pci_dev_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_pci_dev_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_pci_dev_to_cper(json_object *section, FILE *out);
#ifdef __cplusplus
diff --git a/include/libcper/sections/cper-section-pcie.h b/include/libcper/sections/cper-section-pcie.h
index b96de88..24b58f2 100644
--- a/include/libcper/sections/cper-section-pcie.h
+++ b/include/libcper/sections/cper-section-pcie.h
@@ -37,7 +37,8 @@
const char *name;
};
-json_object *cper_section_pcie_to_ir(const UINT8 *section, UINT32 size);
+json_object *cper_section_pcie_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string);
void ir_section_pcie_to_cper(json_object *section, FILE *out);
/*
diff --git a/include/libcper/sections/cper-section.h b/include/libcper/sections/cper-section.h
index 41f9397..32dd0bd 100644
--- a/include/libcper/sections/cper-section.h
+++ b/include/libcper/sections/cper-section.h
@@ -15,7 +15,7 @@
EFI_GUID *Guid;
const char *ReadableName;
const char *ShortName;
- json_object *(*ToIR)(const UINT8 *, UINT32);
+ json_object *(*ToIR)(const UINT8 *, UINT32, char **);
void (*ToCPER)(json_object *, FILE *);
} CPER_SECTION_DEFINITION;
diff --git a/sections/cper-section-ampere.c b/sections/cper-section-ampere.c
index 5755fa1..8b1bedc 100644
--- a/sections/cper-section-ampere.c
+++ b/sections/cper-section-ampere.c
@@ -4,10 +4,23 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-ampere.h>
#include <libcper/log.h>
+#include <string.h>
//Converts the given processor-generic CPER section into JSON IR.
-json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "An Ampere Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to Ampere description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: Ampere description string truncated\n");
+ }
+
if (size < sizeof(EFI_AMPERE_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-arm.c b/sections/cper-section-arm.c
index 8cce3c4..d360d18 100644
--- a/sections/cper-section-arm.c
+++ b/sections/cper-section-arm.c
@@ -13,10 +13,12 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-arm.h>
#include <libcper/log.h>
+#include <string.h>
//Private pre-definitions.
json_object *
-cper_arm_error_info_to_ir(EFI_ARM_ERROR_INFORMATION_ENTRY *error_info);
+cper_arm_error_info_to_ir(EFI_ARM_ERROR_INFORMATION_ENTRY *error_info,
+ char **err_info_desc_i);
json_object *
cper_arm_processor_context_to_ir(EFI_ARM_CONTEXT_INFORMATION_HEADER *header,
const UINT8 **cur_pos, UINT32 *remaining_size);
@@ -45,8 +47,21 @@
void ir_arm_unknown_register_to_cper(json_object *registers, FILE *out);
//Converts the given processor-generic CPER section into JSON IR.
-json_object *cper_section_arm_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_arm_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ int outstr_len = 0;
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "An ARM Processor Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to ARM description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: ARM description string truncated: %s\n",
+ *desc_string);
+ }
+
const UINT8 *cur_pos = section;
UINT32 remaining_size = size;
@@ -96,6 +111,29 @@
sock = (mpidr_eli1 & ARM_SOCK_MASK) >> 32;
json_object_object_add(section_ir, "affinity3",
json_object_new_uint64(sock));
+ char *node_desc_str = malloc(EFI_ERROR_DESCRIPTION_STRING_LEN);
+ outstr_len = snprintf(node_desc_str,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " on CPU %ld", sock);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to node description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Node description string truncated: %s\n",
+ node_desc_str);
+ } else {
+ if (strlen(node_desc_str) + strlen(*desc_string) <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, node_desc_str,
+ outstr_len);
+ } else {
+ cper_print_log(
+ "Error: Node description string too long, not added to description string: %s\n",
+ node_desc_str);
+ }
+ }
+ free(node_desc_str);
}
json_object_object_add(section_ir, "midrEl1",
@@ -128,11 +166,47 @@
"Invalid CPER file: Invalid processor error info num.\n");
return NULL;
}
+ strncat(*desc_string, "; Error Type(s): {",
+ EFI_ERROR_DESCRIPTION_STRING_LEN);
+ char *err_info_desc_i =
+ malloc(EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN);
+ size_t err_info_desc_i_len = 0;
for (int i = 0; i < record->ErrInfoNum; i++) {
- json_object_array_add(error_info_array,
- cper_arm_error_info_to_ir(cur_error));
+ json_object_array_add(
+ error_info_array,
+ cper_arm_error_info_to_ir(cur_error, &err_info_desc_i));
+ err_info_desc_i_len = strlen(err_info_desc_i);
+ if (err_info_desc_i_len > 0 &&
+ strlen(*desc_string) + err_info_desc_i_len <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, err_info_desc_i,
+ err_info_desc_i_len);
+ } else {
+ cper_print_log(
+ "Error: Error info description string too long, not added to description string: %s\n",
+ err_info_desc_i);
+ }
cur_error++;
+ if (i == record->ErrInfoNum - 1) {
+ if (strlen(*desc_string) + 2 <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, "}", 2);
+ } else {
+ cper_print_log(
+ "Error: Description string too long, not added '}'to description string: %s\n",
+ *desc_string);
+ }
+ break;
+ }
+ if (strlen(*desc_string) + 3 < SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, ", ", 3);
+ } else {
+ cper_print_log(
+ "Error: Description string too long, not added ',' to description string: %s\n",
+ *desc_string);
+ }
}
+ free(err_info_desc_i);
cur_pos += (UINT32)(record->ErrInfoNum *
sizeof(EFI_ARM_ERROR_INFORMATION_ENTRY));
@@ -213,9 +287,11 @@
//Converts a single ARM Process Error Information structure into JSON IR.
json_object *
-cper_arm_error_info_to_ir(EFI_ARM_ERROR_INFORMATION_ENTRY *error_info)
+cper_arm_error_info_to_ir(EFI_ARM_ERROR_INFORMATION_ENTRY *error_info,
+ char **err_info_desc_i)
{
json_object *error_info_ir = json_object_new_object();
+ int outstr_len = 0;
//Version, length.
json_object_object_add(error_info_ir, "version",
@@ -260,16 +336,51 @@
json_object *error_subinfo = NULL;
switch (error_info->Type) {
case ARM_ERROR_INFORMATION_TYPE_CACHE: //Cache
- case ARM_ERROR_INFORMATION_TYPE_TLB: //TLB
error_subinfo = cper_arm_cache_tlb_error_to_ir(
(EFI_ARM_CACHE_ERROR_STRUCTURE *)&error_info
->ErrorInformation,
error_info);
+ const char *cache_error_desc = "Cache Error";
+ if (strlen(cache_error_desc) >=
+ EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Cache Error Description too long %s\n",
+ cache_error_desc);
+ } else {
+ strncpy(*err_info_desc_i, cache_error_desc,
+ strlen(cache_error_desc) + 1);
+ }
+ break;
+ case ARM_ERROR_INFORMATION_TYPE_TLB: //TLB
+ error_subinfo = cper_arm_cache_tlb_error_to_ir(
+ (EFI_ARM_CACHE_ERROR_STRUCTURE *)&error_info
+ ->ErrorInformation,
+ error_info);
+ const char *tlb_error_desc = "TLB Error";
+ if (strlen(tlb_error_desc) >=
+ EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: TLB Error Description too long %s\n",
+ tlb_error_desc);
+ } else {
+ strncpy(*err_info_desc_i, tlb_error_desc,
+ strlen(tlb_error_desc) + 1);
+ }
break;
case ARM_ERROR_INFORMATION_TYPE_BUS: //Bus
error_subinfo = cper_arm_bus_error_to_ir(
(EFI_ARM_BUS_ERROR_STRUCTURE *)&error_info
->ErrorInformation);
+ const char *bus_error_desc = "Bus Error";
+ if (strlen(bus_error_desc) >=
+ EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Bus Error Description too long %s\n",
+ bus_error_desc);
+ } else {
+ strncpy(*err_info_desc_i, bus_error_desc,
+ strlen(bus_error_desc) + 1);
+ }
break;
default:
@@ -284,19 +395,68 @@
}
//Virtual fault address, physical fault address.
+ char *fault_address_desc = malloc(EFI_ERROR_DESCRIPTION_STRING_LEN);
if (isvalid_prop_to_ir(&ui16Type, 3)) {
+ outstr_len = snprintf(fault_address_desc,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " at Virtual Addr=0x%llX",
+ error_info->VirtualFaultAddress);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to fault address description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Virtual fault address description string truncated: %s\n",
+ fault_address_desc);
+ } else {
+ if (strlen(fault_address_desc) +
+ strlen(*err_info_desc_i) <
+ EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN) {
+ strncat(*err_info_desc_i, fault_address_desc,
+ outstr_len);
+ } else {
+ cper_print_log(
+ "Error: Virtual fault address description string too long, not added to description string: %s\n",
+ fault_address_desc);
+ }
+ }
json_object_object_add(
error_info_ir, "virtualFaultAddress",
json_object_new_uint64(
error_info->VirtualFaultAddress));
}
if (isvalid_prop_to_ir(&ui16Type, 4)) {
+ outstr_len = snprintf(fault_address_desc,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " Physical Addr=0x%llX",
+ error_info->PhysicalFaultAddress);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to physical fault address description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Physical fault address description string truncated: %s\n",
+ fault_address_desc);
+ } else {
+ if (strlen(fault_address_desc) +
+ strlen(*err_info_desc_i) <
+ EFI_ERROR_INFORMATION_DESCRIPTION_STRING_LEN) {
+ strncat(*err_info_desc_i, fault_address_desc,
+ outstr_len);
+ } else {
+ cper_print_log(
+ "Error:Physical fault address description string too long, not added to description string: %s\n",
+ fault_address_desc);
+ }
+ }
json_object_object_add(
error_info_ir, "physicalFaultAddress",
json_object_new_uint64(
error_info->PhysicalFaultAddress));
}
+ free(fault_address_desc);
+
return error_info_ir;
}
diff --git a/sections/cper-section-ccix-per.c b/sections/cper-section-ccix-per.c
index a8a5310..4f41a28 100644
--- a/sections/cper-section-ccix-per.c
+++ b/sections/cper-section-ccix-per.c
@@ -12,10 +12,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-ccix-per.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single CCIX PER log CPER section into JSON IR.
-json_object *cper_section_ccix_per_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_ccix_per_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A CCIX PER Log Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to CCIX PER Log description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: CCIX PER Log description string truncated\n");
+ }
+
if (size < sizeof(EFI_CCIX_PER_LOG_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-cxl-component.c b/sections/cper-section-cxl-component.c
index c4e8169..39255eb 100644
--- a/sections/cper-section-cxl-component.c
+++ b/sections/cper-section-cxl-component.c
@@ -11,10 +11,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-cxl-component.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single CXL component error CPER section into JSON IR.
-json_object *cper_section_cxl_component_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_cxl_component_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A CXL Component Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to CXL Component description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: CXL Component description string truncated\n");
+ }
+
if (size < sizeof(EFI_CXL_COMPONENT_EVENT_HEADER)) {
return NULL;
}
diff --git a/sections/cper-section-cxl-protocol.c b/sections/cper-section-cxl-protocol.c
index 6ae5325..6e69153 100644
--- a/sections/cper-section-cxl-protocol.c
+++ b/sections/cper-section-cxl-protocol.c
@@ -11,10 +11,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-cxl-protocol.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single CXL protocol error CPER section into JSON IR.
-json_object *cper_section_cxl_protocol_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_cxl_protocol_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A CXL Protocol Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to CXL protocol description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: CXL protocol description string truncated\n");
+ }
+
if (size < sizeof(EFI_CXL_PROTOCOL_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-dmar-generic.c b/sections/cper-section-dmar-generic.c
index d75647e..4605cd8 100644
--- a/sections/cper-section-dmar-generic.c
+++ b/sections/cper-section-dmar-generic.c
@@ -10,10 +10,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-dmar-generic.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single generic DMAr CPER section into JSON IR.
-json_object *cper_section_dmar_generic_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_dmar_generic_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A DMAr Generic Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to DMAr Generic description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: DMAr Generic description string truncated\n");
+ }
+
if (size < sizeof(EFI_DMAR_GENERIC_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-dmar-iommu.c b/sections/cper-section-dmar-iommu.c
index df22ce0..6d3df8f 100644
--- a/sections/cper-section-dmar-iommu.c
+++ b/sections/cper-section-dmar-iommu.c
@@ -12,10 +12,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-dmar-iommu.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single IOMMU specific DMAr CPER section into JSON IR.
-json_object *cper_section_dmar_iommu_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_dmar_iommu_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A IOMMU Specific DMAr Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to IOMMU Specific DMAr description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: IOMMU Specific DMAr description string truncated\n");
+ }
+
if (size < sizeof(EFI_IOMMU_DMAR_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-dmar-vtd.c b/sections/cper-section-dmar-vtd.c
index fcbce18..0b82bf6 100644
--- a/sections/cper-section-dmar-vtd.c
+++ b/sections/cper-section-dmar-vtd.c
@@ -12,10 +12,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-dmar-vtd.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single VT-d specific DMAr CPER section into JSON IR.
-json_object *cper_section_dmar_vtd_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_dmar_vtd_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A VT-d DMAr Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to VT-d DMAr description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: VT-d DMAr description string truncated\n");
+ }
+
if (size < sizeof(EFI_DIRECTED_IO_DMAR_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-firmware.c b/sections/cper-section-firmware.c
index b88d69e..f16b0dd 100644
--- a/sections/cper-section-firmware.c
+++ b/sections/cper-section-firmware.c
@@ -10,10 +10,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-firmware.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single firmware CPER section into JSON IR.
-json_object *cper_section_firmware_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_firmware_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A Firmware Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to Firmware description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: Firmware description string truncated\n");
+ }
+
if (size < sizeof(EFI_FIRMWARE_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-generic.c b/sections/cper-section-generic.c
index 8117419..0bbe40e 100644
--- a/sections/cper-section-generic.c
+++ b/sections/cper-section-generic.c
@@ -12,10 +12,23 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-generic.h>
#include <libcper/log.h>
+#include <string.h>
//Converts the given processor-generic CPER section into JSON IR.
-json_object *cper_section_generic_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_generic_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A Generic Processor Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to Generic description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: Generic description string truncated\n");
+ }
+
if (size < sizeof(EFI_PROCESSOR_GENERIC_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-ia32x64.c b/sections/cper-section-ia32x64.c
index 85f03a4..81d1248 100644
--- a/sections/cper-section-ia32x64.c
+++ b/sections/cper-section-ia32x64.c
@@ -12,6 +12,7 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-ia32x64.h>
#include <libcper/log.h>
+#include <string.h>
//Private pre-definitions.
json_object *cper_ia32x64_processor_error_info_to_ir(
@@ -45,8 +46,21 @@
//////////////////
//Converts the IA32/x64 error section described in the given descriptor into intermediate format.
-json_object *cper_section_ia32x64_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_ia32x64_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "An IA32/x64 Processor Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to IA32/x64 description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: IA32/x64 description string truncated\n");
+ }
+
if (size < sizeof(EFI_IA32_X64_PROCESSOR_ERROR_RECORD)) {
return NULL;
}
diff --git a/sections/cper-section-ipf.c b/sections/cper-section-ipf.c
index fb9243e..2029a22 100644
--- a/sections/cper-section-ipf.c
+++ b/sections/cper-section-ipf.c
@@ -10,14 +10,27 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-ipf.h>
#include <libcper/log.h>
+#include <string.h>
json_object *cper_ipf_mod_error_read_array(EFI_IPF_MOD_ERROR_INFO **cur_error,
int num_to_read);
json_object *cper_ipf_mod_error_to_ir(EFI_IPF_MOD_ERROR_INFO *mod_error);
//Converts a single Intel IPF error CPER section into JSON IR.
-json_object *cper_section_ipf_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_ipf_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "An IPF Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to IPF description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: IPF description string truncated\n");
+ }
+
if (size < sizeof(EFI_IPF_ERROR_INFO_HEADER)) {
return NULL;
}
diff --git a/sections/cper-section-memory.c b/sections/cper-section-memory.c
index 347039a..95eac67 100644
--- a/sections/cper-section-memory.c
+++ b/sections/cper-section-memory.c
@@ -10,11 +10,14 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-memory.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single memory error CPER section into JSON IR.
json_object *cper_section_platform_memory_to_ir(const UINT8 *section,
- UINT32 size)
+ UINT32 size, char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
if (size < sizeof(EFI_PLATFORM_MEMORY_ERROR_DATA)) {
return NULL;
}
@@ -52,14 +55,32 @@
json_object_object_add(section_ir, "bank", bank);
//Memory error type.
+ const char *mem_type_str = NULL;
if (isvalid_prop_to_ir(&ui64Type, 14)) {
json_object *memory_error_type = integer_to_readable_pair(
memory_error->ErrorType, 16, MEMORY_ERROR_TYPES_KEYS,
MEMORY_ERROR_TYPES_VALUES, "Unknown (Reserved)");
json_object_object_add(section_ir, "memoryErrorType",
memory_error_type);
+ mem_type_str = json_object_get_string(
+ json_object_object_get(memory_error_type, "name"));
}
-
+ if (mem_type_str != NULL) {
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A %s Memory Error occurred",
+ mem_type_str);
+ } else {
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "An Unknown Memory Error occurred");
+ }
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to Memory description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: Memory description string truncated: %s\n",
+ *desc_string);
+ }
//"Extended" row/column indication field + misc.
// Review this
if (isvalid_prop_to_ir(&ui64Type, 18)) {
@@ -105,6 +126,30 @@
memory_error->PhysicalAddress);
json_object_object_add(section_ir, "physicalAddressHex",
json_object_new_string(hexstring_buf));
+ char physical_address_desc[EFI_ERROR_DESCRIPTION_STRING_LEN];
+ outstr_len = snprintf(physical_address_desc,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " at address 0x%016llX",
+ memory_error->PhysicalAddress);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to physical address description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Physical address description string truncated: %s\n",
+ physical_address_desc);
+ } else {
+ if (strlen(physical_address_desc) +
+ strlen(*desc_string) <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, physical_address_desc,
+ outstr_len);
+ } else {
+ cper_print_log(
+ "Error: Memory description string too long, not added to description string: %s\n",
+ physical_address_desc);
+ }
+ }
}
if (isvalid_prop_to_ir(&ui64Type, 2)) {
json_object_object_add(
@@ -116,7 +161,29 @@
json_object_object_add(
section_ir, "node",
json_object_new_uint64(memory_error->Node));
+ char node_desc[EFI_ERROR_DESCRIPTION_STRING_LEN];
+ outstr_len = snprintf(node_desc,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " at node %d", memory_error->Node);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to node description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Node description string truncated: %s\n",
+ node_desc);
+ } else {
+ if (strlen(node_desc) + strlen(*desc_string) <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, node_desc, outstr_len);
+ } else {
+ cper_print_log(
+ "Error: Memory description string too long, not added to description string: %s\n",
+ node_desc);
+ }
+ }
}
+
if (isvalid_prop_to_ir(&ui64Type, 4)) {
json_object_object_add(
section_ir, "card",
@@ -173,8 +240,12 @@
//Converts a single memory error 2 CPER section into JSON IR.
json_object *cper_section_platform_memory2_to_ir(const UINT8 *section,
- UINT32 size)
+ UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+
if (size < sizeof(EFI_PLATFORM_MEMORY2_ERROR_DATA)) {
return NULL;
}
@@ -212,14 +283,32 @@
json_object_object_add(section_ir, "bank", bank);
//Memory error type.
+ const char *mem_type_str = NULL;
if (isvalid_prop_to_ir(&ui64Type, 13)) {
json_object *memory_error_type = integer_to_readable_pair(
memory_error->MemErrorType, 16, MEMORY_ERROR_TYPES_KEYS,
MEMORY_ERROR_TYPES_VALUES, "Unknown (Reserved)");
json_object_object_add(section_ir, "memoryErrorType",
memory_error_type);
+ mem_type_str = json_object_get_string(
+ json_object_object_get(memory_error_type, "name"));
}
-
+ if (mem_type_str != NULL) {
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A %s Memory Error occurred",
+ mem_type_str);
+ } else {
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "An Unknown Memory Error occurred");
+ }
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to Memory2 description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: Memory2 description string truncated: %s\n",
+ *desc_string);
+ }
//Status.
if (isvalid_prop_to_ir(&ui64Type, 14)) {
json_object *status = json_object_new_object();
@@ -240,6 +329,30 @@
json_object_object_add(
section_ir, "physicalAddress",
json_object_new_uint64(memory_error->PhysicalAddress));
+ char physical_address_desc[EFI_ERROR_DESCRIPTION_STRING_LEN];
+ outstr_len = snprintf(physical_address_desc,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " at address 0x%016llX",
+ memory_error->PhysicalAddress);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to physical address description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Physical address description string truncated: %s\n",
+ physical_address_desc);
+ } else {
+ if (strlen(physical_address_desc) +
+ strlen(*desc_string) <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, physical_address_desc,
+ outstr_len);
+ } else {
+ cper_print_log(
+ "Error: Memory2 description string too long, not added to description string: %s\n",
+ physical_address_desc);
+ }
+ }
}
char hexstring_buf[EFI_UINT64_HEX_STRING_LEN];
@@ -258,6 +371,27 @@
json_object_object_add(
section_ir, "node",
json_object_new_uint64(memory_error->Node));
+ char node_desc[EFI_ERROR_DESCRIPTION_STRING_LEN];
+ outstr_len = snprintf(node_desc,
+ EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " on node %d", memory_error->Node);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to node description string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log(
+ "Error: Node description string truncated: %s\n",
+ node_desc);
+ } else {
+ if (strlen(node_desc) + strlen(*desc_string) <
+ SECTION_DESC_STRING_SIZE) {
+ strncat(*desc_string, node_desc, outstr_len);
+ } else {
+ cper_print_log(
+ "Error: Memory2 description string too long, not added to description string: %s\n",
+ node_desc);
+ }
+ }
}
if (isvalid_prop_to_ir(&ui64Type, 4)) {
json_object_object_add(
diff --git a/sections/cper-section-nvidia.c b/sections/cper-section-nvidia.c
index b633396..c75bf8a 100644
--- a/sections/cper-section-nvidia.c
+++ b/sections/cper-section-nvidia.c
@@ -11,6 +11,7 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-nvidia.h>
#include <libcper/log.h>
+#include <string.h>
void parse_cmet_info(EFI_NVIDIA_REGISTER_DATA *regPtr, UINT8 NumberRegs,
size_t size, json_object *section_ir)
@@ -110,9 +111,15 @@
};
//Converts a single NVIDIA CPER section into JSON IR.
-json_object *cper_section_nvidia_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_nvidia_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ char *property_desc = malloc(EFI_ERROR_DESCRIPTION_STRING_LEN);
+
if (size < sizeof(EFI_NVIDIA_ERROR_DATA)) {
+ free(property_desc);
+ *desc_string = NULL;
return NULL;
}
@@ -120,15 +127,27 @@
json_object *section_ir = json_object_new_object();
- add_untrusted_string(section_ir, "signature", nvidia_error->Signature,
- sizeof(nvidia_error->Signature));
+ const char *signature = nvidia_error->Signature;
+ add_untrusted_string(section_ir, "signature", signature,
+ strlen(signature));
json_object *severity = json_object_new_object();
json_object_object_add(severity, "code",
json_object_new_uint64(nvidia_error->Severity));
+ const char *severity_name = severity_to_string(nvidia_error->Severity);
json_object_object_add(severity, "name",
- json_object_new_string(severity_to_string(
- nvidia_error->Severity)));
+ json_object_new_string(severity_name));
+ int outstr_len = 0;
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A %s %s NVIDIA Error occurred", severity_name,
+ signature);
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: Description string truncated: %s\n",
+ *desc_string);
+ }
json_object_object_add(section_ir, "severity", severity);
json_object_object_add(section_ir, "errorType",
@@ -138,6 +157,26 @@
json_object_new_int(nvidia_error->ErrorInstance));
json_object_object_add(section_ir, "socket",
json_object_new_int(nvidia_error->Socket));
+
+ outstr_len = snprintf(property_desc, EFI_ERROR_DESCRIPTION_STRING_LEN,
+ " on CPU %d", nvidia_error->Socket);
+ if (outstr_len < 0) {
+ cper_print_log("Error: Could not write to property string\n");
+ } else if (outstr_len > EFI_ERROR_DESCRIPTION_STRING_LEN) {
+ cper_print_log("Error: Property string truncated: %s\n",
+ property_desc);
+ }
+
+ int property_desc_len = strlen(property_desc);
+ strncat(*desc_string, property_desc, property_desc_len);
+ // We still want to get as much info as possible, just warn about truncation
+ if (property_desc_len + strlen(*desc_string) >=
+ SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: Description string truncated: %s\n",
+ *desc_string);
+ }
+ free(property_desc);
+
json_object_object_add(section_ir, "registerCount",
json_object_new_int(nvidia_error->NumberRegs));
json_object_object_add(
diff --git a/sections/cper-section-pci-bus.c b/sections/cper-section-pci-bus.c
index 60840e7..a593aeb 100644
--- a/sections/cper-section-pci-bus.c
+++ b/sections/cper-section-pci-bus.c
@@ -11,10 +11,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-pci-bus.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single PCI/PCI-X bus CPER section into JSON IR.
-json_object *cper_section_pci_bus_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_pci_bus_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A PCI/PCI-X Bus Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to PCI/PCI-X Bus description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: PCI/PCI-X Bus description string truncated\n");
+ }
+
if (size < sizeof(EFI_PCI_PCIX_BUS_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-pci-dev.c b/sections/cper-section-pci-dev.c
index 359e56e..b034d5f 100644
--- a/sections/cper-section-pci-dev.c
+++ b/sections/cper-section-pci-dev.c
@@ -10,10 +10,24 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-pci-dev.h>
#include <libcper/log.h>
+#include <string.h>
//Converts a single PCI/PCI-X device CPER section into JSON IR.
-json_object *cper_section_pci_dev_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_pci_dev_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A PCI/PCI-X Device Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to PCI/PCI-X Device description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log(
+ "Error: PCI/PCI-X Device description string truncated\n");
+ }
+
if (size < sizeof(EFI_PCI_PCIX_DEVICE_ERROR_DATA)) {
return NULL;
}
diff --git a/sections/cper-section-pcie.c b/sections/cper-section-pcie.c
index e39dafd..ee00a02 100644
--- a/sections/cper-section-pcie.c
+++ b/sections/cper-section-pcie.c
@@ -12,6 +12,7 @@
#include <libcper/cper-utils.h>
#include <libcper/sections/cper-section-pcie.h>
#include <libcper/log.h>
+#include <string.h>
json_object *pcie_capability_to_ir(EFI_PCIE_ERROR_DATA *pcie_error);
json_object *pcie_aer_to_ir(EFI_PCIE_ERROR_DATA *pcie_error);
@@ -293,8 +294,20 @@
}
//Converts a single PCIe CPER section into JSON IR.
-json_object *cper_section_pcie_to_ir(const UINT8 *section, UINT32 size)
+json_object *cper_section_pcie_to_ir(const UINT8 *section, UINT32 size,
+ char **desc_string)
{
+ int outstr_len = 0;
+ *desc_string = malloc(SECTION_DESC_STRING_SIZE);
+ outstr_len = snprintf(*desc_string, SECTION_DESC_STRING_SIZE,
+ "A PCIe Error occurred");
+ if (outstr_len < 0) {
+ cper_print_log(
+ "Error: Could not write to PCIe description string\n");
+ } else if (outstr_len > SECTION_DESC_STRING_SIZE) {
+ cper_print_log("Error: PCIe description string truncated\n");
+ }
+
if (size < sizeof(EFI_PCIE_ERROR_DATA)) {
return NULL;
}
diff --git a/specification/json/cper-json-full-log.json b/specification/json/cper-json-full-log.json
index 91c2829..6e76255 100644
--- a/specification/json/cper-json-full-log.json
+++ b/specification/json/cper-json-full-log.json
@@ -22,9 +22,13 @@
"type": ["object", "null"],
"minProperties": 1,
"maxProperties": 1,
- "required": [],
+ "required": ["message"],
"additionalProperties": false,
"properties": {
+ "message": {
+ "type": "string",
+ "description": "A human readable message describing the error. This is not stable between versions."
+ },
"GenericProcessor": {
"$ref": "./sections/cper-generic-processor.json"
},
diff --git a/specification/json/cper-json-section-log.json b/specification/json/cper-json-section-log.json
index 225e3e6..5f733e5 100644
--- a/specification/json/cper-json-section-log.json
+++ b/specification/json/cper-json-section-log.json
@@ -11,10 +11,15 @@
},
"section": {
"type": "object",
- "minProperties": 1,
- "maxProperties": 1,
+ "minProperties": 2,
+ "maxProperties": 2,
+ "required": ["message"],
"additionalProperties": false,
"properties": {
+ "message": {
+ "type": "string",
+ "description": "A human readable message describing the error. This is not stable between versions."
+ },
"GenericProcessor": {
"$ref": "./sections/cper-generic-processor.json"
},
diff --git a/tests/ir-tests.c b/tests/ir-tests.c
index 3c3ed19..82dad70 100644
--- a/tests/ir-tests.c
+++ b/tests/ir-tests.c
@@ -620,6 +620,7 @@
int main()
{
if (GEN_EXAMPLES) {
+ cper_create_examples("generic");
cper_create_examples("arm");
cper_create_examples("ia32x64");
cper_create_examples("memory");
diff --git a/tests/test-utils.c b/tests/test-utils.c
index 1b2adac..c473978 100644
--- a/tests/test-utils.c
+++ b/tests/test-utils.c
@@ -159,8 +159,10 @@
json_object_object_foreach(ref_obj, key, val)
{
+ // Use json_object_get to increment ref count properly
+ json_object *val_copy = json_object_get(val);
json_object_object_add(jsonSchema, key,
- json_object_get(val));
+ val_copy);
}
json_object_object_del(jsonSchema, "$ref");
@@ -207,6 +209,7 @@
} else {
schema_file = "cper-json-full-log.json";
}
+ printf("start schema_validate_from_file\n");
int size = strlen(schema_file) + 1 + strlen(LIBCPER_JSON_SPEC) + 1;
char *schema_path = malloc(size);
snprintf(schema_path, size, "%s/%s", LIBCPER_JSON_SPEC, schema_file);
@@ -218,14 +221,14 @@
free(schema_path);
return 0;
}
-
+ printf("end iterate_make_required_props\n");
if (iterate_make_required_props(schema, all_valid_bits) < 0) {
cper_print_log("Failed to make required props\n");
json_object_put(schema);
free(schema_path);
return -1;
}
-
+ printf("start jdac_validate\n");
int err = jdac_validate(to_test, schema);
if (err == JDAC_ERR_VALID) {
cper_print_log("validation ok\n");
@@ -233,15 +236,15 @@
free(schema_path);
return 1;
}
-
+ printf("end jdac_validate\n");
cper_print_log("validate failed %d: %s\n", err, jdac_errorstr(err));
- cper_print_log("schema: \n%s\n",
- json_object_to_json_string_ext(schema,
- JSON_C_TO_STRING_PRETTY));
- cper_print_log("to_test: \n%s\n",
- json_object_to_json_string_ext(to_test,
- JSON_C_TO_STRING_PRETTY));
+ // cper_print_log("schema: \n%s\n",
+ // json_object_to_json_string_ext(schema,
+ // JSON_C_TO_STRING_PRETTY));
+ // cper_print_log("to_test: \n%s\n",
+ // json_object_to_json_string_ext(to_test,
+ // JSON_C_TO_STRING_PRETTY));
json_object_put(schema);
free(schema_path);
return 0;