Add ARM JSON to specification.
diff --git a/sections/cper-section-arm.c b/sections/cper-section-arm.c
index 4c5ce36..da5d533 100644
--- a/sections/cper-section-arm.c
+++ b/sections/cper-section-arm.c
@@ -32,7 +32,7 @@
//Number of error info and context info structures, and length.
json_object_object_add(section_ir, "errorInfoNum", json_object_new_int(record->ErrInfoNum));
json_object_object_add(section_ir, "contextInfoNum", json_object_new_int(record->ContextInfoNum));
- json_object_object_add(section_ir, "sectionLength", json_object_new_int(record->SectionLength));
+ json_object_object_add(section_ir, "sectionLength", json_object_new_uint64(record->SectionLength));
//Error affinity.
json_object* error_affinity = json_object_new_object();
@@ -46,13 +46,13 @@
json_object_object_add(section_ir, "midrEl1", json_object_new_uint64(record->MIDR_EL1));
//Whether the processor is running, and the state of it if so.
- json_object_object_add(section_ir, "running", json_object_new_boolean(record->RunningState));
+ json_object_object_add(section_ir, "running", json_object_new_boolean(record->RunningState & 0b1));
if (record->RunningState >> 31)
{
//Bit 32 of running state is on, so PSCI state information is included.
//This can't be made human readable, as it is unknown whether this will be the pre-PSCI 1.0 format
//or the newer Extended StateID format.
- json_object_object_add(section_ir, "psciState", json_object_new_int(record->PsciState));
+ json_object_object_add(section_ir, "psciState", json_object_new_uint64(record->PsciState));
}
//Processor error structures.
@@ -68,8 +68,14 @@
//Processor context structures.
//The current position is moved within the processing, as it is a dynamic size structure.
void* cur_pos = (void*)cur_error;
- EFI_ARM_CONTEXT_INFORMATION_HEADER* header = (EFI_ARM_CONTEXT_INFORMATION_HEADER*)cur_error;
- json_object* processor_context = cper_arm_processor_context_to_ir(header, &cur_pos);
+ json_object* context_info_array = json_object_new_array();
+ for (int i=0; i<record->ContextInfoNum; i++)
+ {
+ EFI_ARM_CONTEXT_INFORMATION_HEADER* header = (EFI_ARM_CONTEXT_INFORMATION_HEADER*)cur_pos;
+ json_object* processor_context = cper_arm_processor_context_to_ir(header, &cur_pos);
+ json_object_array_add(context_info_array, processor_context);
+ }
+ json_object_object_add(section_ir, "contextInfo", context_info_array);
//Is there any vendor-specific information following?
if (cur_pos < section + record->SectionLength)
@@ -229,7 +235,7 @@
//Memory access attributes.
//todo: find the specification of these in the ARM ARM
- //...
+ json_object_object_add(bus_error_ir, "memoryAttributes", json_object_new_int(bus_error->MemoryAddressAttributes));
//Access Mode
json_object* access_mode = json_object_new_object();
@@ -303,6 +309,7 @@
free(encoded);
break;
}
+ json_object_object_add(context_ir, "registerArray", register_array);
//Set the current position to after the processor context structure.
*cur_pos = (UINT8*)(*cur_pos) + header->RegisterArraySize;
diff --git a/sections/cper-section-arm.h b/sections/cper-section-arm.h
index a283efd..609eb2b 100644
--- a/sections/cper-section-arm.h
+++ b/sections/cper-section-arm.h
@@ -15,7 +15,7 @@
"precisePCValid", "restartablePCValid"}
#define ARM_BUS_ERROR_VALID_BITFIELD_NAMES (const char*[]) \
{"transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "correctedValid", \
- "precisePCValid", "restartablePCValid", "participationTypeValid", "timeOutValid", "addressSpaceValid", \
+ "precisePCValid", "restartablePCValid", "participationTypeValid", "timedOutValid", "addressSpaceValid", \
"memoryAttributesValid", "accessModeValid"}
#define ARM_ERROR_TRANSACTION_TYPES_KEYS (int []){0, 1, 2}
#define ARM_ERROR_TRANSACTION_TYPES_VALUES (const char*[]){"Instruction", "Data Access", "Generic"}
diff --git a/sections/cper-section-ia32x64.c b/sections/cper-section-ia32x64.c
index f65f4f4..df238aa 100644
--- a/sections/cper-section-ia32x64.c
+++ b/sections/cper-section-ia32x64.c
@@ -101,9 +101,9 @@
json_object_object_add(error_info_ir, "checkInfo", checkInformation);
//Target, requestor, and responder identifiers.
- json_object_object_add(error_info_ir, "targetIdentifier", json_object_new_uint64(error_info->TargetId));
- json_object_object_add(error_info_ir, "requestorIdentifier", json_object_new_uint64(error_info->RequestorId));
- json_object_object_add(error_info_ir, "responderIdentifier", json_object_new_uint64(error_info->ResponderId));
+ json_object_object_add(error_info_ir, "targetAddressID", json_object_new_uint64(error_info->TargetId));
+ json_object_object_add(error_info_ir, "requestorID", json_object_new_uint64(error_info->RequestorId));
+ json_object_object_add(error_info_ir, "responderID", json_object_new_uint64(error_info->ResponderId));
json_object_object_add(error_info_ir, "instructionPointer", json_object_new_uint64(error_info->InstructionIP));
return error_info_ir;
@@ -202,7 +202,7 @@
json_object* ms_check_ir = json_object_new_object();
//Validation bits.
- json_object* validation = bitfield_to_ir(ms_check->ValidFields, 6, IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
+ json_object* validation = bitfield_to_ir(ms_check->ValidFields, 6, IA32X64_CHECK_INFO_MS_CHECK_VALID_BITFIELD_NAMES);
json_object_object_add(ms_check_ir, "validationBits", validation);
//Error type (operation that caused the error).
@@ -274,31 +274,31 @@
json_object* cper_ia32x64_register_32bit_to_ir(EFI_CONTEXT_IA32_REGISTER_STATE* registers)
{
json_object* ia32_registers = json_object_new_object();
- json_object_object_add(ia32_registers, "eax", json_object_new_int(registers->Eax));
- json_object_object_add(ia32_registers, "ebx", json_object_new_int(registers->Ebx));
- json_object_object_add(ia32_registers, "ecx", json_object_new_int(registers->Ecx));
- json_object_object_add(ia32_registers, "edx", json_object_new_int(registers->Edx));
- json_object_object_add(ia32_registers, "esi", json_object_new_int(registers->Esi));
- json_object_object_add(ia32_registers, "edi", json_object_new_int(registers->Edi));
- json_object_object_add(ia32_registers, "ebp", json_object_new_int(registers->Ebp));
- json_object_object_add(ia32_registers, "esp", json_object_new_int(registers->Esp));
- json_object_object_add(ia32_registers, "cs", json_object_new_int(registers->Cs));
- json_object_object_add(ia32_registers, "ds", json_object_new_int(registers->Ds));
- json_object_object_add(ia32_registers, "ss", json_object_new_int(registers->Ss));
- json_object_object_add(ia32_registers, "es", json_object_new_int(registers->Es));
- json_object_object_add(ia32_registers, "fs", json_object_new_int(registers->Fs));
- json_object_object_add(ia32_registers, "gs", json_object_new_int(registers->Gs));
- json_object_object_add(ia32_registers, "eflags", json_object_new_int(registers->Eflags));
- json_object_object_add(ia32_registers, "eip", json_object_new_int(registers->Eip));
- json_object_object_add(ia32_registers, "cr0", json_object_new_int(registers->Cr0));
- json_object_object_add(ia32_registers, "cr1", json_object_new_int(registers->Cr1));
- json_object_object_add(ia32_registers, "cr2", json_object_new_int(registers->Cr2));
- json_object_object_add(ia32_registers, "cr3", json_object_new_int(registers->Cr3));
- json_object_object_add(ia32_registers, "cr4", json_object_new_int(registers->Cr4));
+ json_object_object_add(ia32_registers, "eax", json_object_new_uint64(registers->Eax));
+ json_object_object_add(ia32_registers, "ebx", json_object_new_uint64(registers->Ebx));
+ json_object_object_add(ia32_registers, "ecx", json_object_new_uint64(registers->Ecx));
+ json_object_object_add(ia32_registers, "edx", json_object_new_uint64(registers->Edx));
+ json_object_object_add(ia32_registers, "esi", json_object_new_uint64(registers->Esi));
+ json_object_object_add(ia32_registers, "edi", json_object_new_uint64(registers->Edi));
+ json_object_object_add(ia32_registers, "ebp", json_object_new_uint64(registers->Ebp));
+ json_object_object_add(ia32_registers, "esp", json_object_new_uint64(registers->Esp));
+ json_object_object_add(ia32_registers, "cs", json_object_new_uint64(registers->Cs));
+ json_object_object_add(ia32_registers, "ds", json_object_new_uint64(registers->Ds));
+ json_object_object_add(ia32_registers, "ss", json_object_new_uint64(registers->Ss));
+ json_object_object_add(ia32_registers, "es", json_object_new_uint64(registers->Es));
+ json_object_object_add(ia32_registers, "fs", json_object_new_uint64(registers->Fs));
+ json_object_object_add(ia32_registers, "gs", json_object_new_uint64(registers->Gs));
+ json_object_object_add(ia32_registers, "eflags", json_object_new_uint64(registers->Eflags));
+ json_object_object_add(ia32_registers, "eip", json_object_new_uint64(registers->Eip));
+ json_object_object_add(ia32_registers, "cr0", json_object_new_uint64(registers->Cr0));
+ json_object_object_add(ia32_registers, "cr1", json_object_new_uint64(registers->Cr1));
+ json_object_object_add(ia32_registers, "cr2", json_object_new_uint64(registers->Cr2));
+ json_object_object_add(ia32_registers, "cr3", json_object_new_uint64(registers->Cr3));
+ json_object_object_add(ia32_registers, "cr4", json_object_new_uint64(registers->Cr4));
json_object_object_add(ia32_registers, "gdtr", json_object_new_uint64(registers->Gdtr[0] + ((UINT64)registers->Gdtr[1] << 32)));
json_object_object_add(ia32_registers, "idtr", json_object_new_uint64(registers->Idtr[0] + ((UINT64)registers->Idtr[1] << 32)));
- json_object_object_add(ia32_registers, "ldtr", json_object_new_int(registers->Ldtr));
- json_object_object_add(ia32_registers, "tr", json_object_new_int(registers->Tr));
+ json_object_object_add(ia32_registers, "ldtr", json_object_new_uint64(registers->Ldtr));
+ json_object_object_add(ia32_registers, "tr", json_object_new_uint64(registers->Tr));
return ia32_registers;
}
diff --git a/sections/cper-section-ia32x64.h b/sections/cper-section-ia32x64.h
index 51af428..238117d 100644
--- a/sections/cper-section-ia32x64.h
+++ b/sections/cper-section-ia32x64.h
@@ -5,12 +5,15 @@
#include "../edk/Cper.h"
#define IA32X64_PROCESSOR_ERROR_VALID_BITFIELD_NAMES (const char*[]) \
- {"checkInfoValid", "targetAddressIdentifierValid", "requestorIdentifierValid", "responderIdentifierValid", \
+ {"checkInfoValid", "targetAddressIDValid", "requestorIDValid", "responderIDValid", \
"instructionPointerValid"}
#define IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES (const char*[]) \
{"transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "uncorrectedValid" \
- "preciseIPValid", "restartableIPValid", "overflowValid", "participationTypeValid", "timeOutValid" \
+ "preciseIPValid", "restartableIPValid", "overflowValid", "participationTypeValid", "timedOutValid" \
"addressSpaceValid"}
+#define IA32X64_CHECK_INFO_MS_CHECK_VALID_BITFIELD_NAMES (const char*[]) \
+ {"errorTypeValid", "processorContextCorruptValid", "uncorrectedValid", "preciseIPValid", "restartableIPValid", \
+ "overflowValid"}
#define IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS (int []){0, 1, 2}
#define IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES (const char*[]){"Instruction", "Data Access", "Generic"}
#define IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS (int []){0, 1, 2, 3, 4, 5, 6, 7, 8}
diff --git a/specification/cper-json-specification.tex b/specification/cper-json-specification.tex
index 082f636..5d338ce 100644
--- a/specification/cper-json-specification.tex
+++ b/specification/cper-json-specification.tex
@@ -347,17 +347,888 @@
\label{subsection:ia32x64processorerrorinfostructure}
This structure describes a single IA32/x64 Processor Error Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
\jsontable{table:ia32x64processorerrorinfostructure}
-todo & todo & todo.\\
+type & string & A GUID indicating the type of processor error defined in this structure. See \texttt{edk/Cper.h} in the library repository for the defined GUID values.\\
\hline
+validationBits & object & An IA32/x64 Processor Error Info Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorinfovalidationstructure}.\\
+\hline
+checkInfo & object & Check information structure for this error. One of the structures defined in Subsections \ref{subsection:ia32x64processorerrorcheckinfocachetlbstructure}, \ref{subsection:ia32x64processorerrorcheckinfobusstructure}, or \ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}. Which section is placed here is dependent on the \texttt{type} field.\\
+\hline
+targetAddressID & uint64 & Identifies the target address associated with the error.\\
+\hline
+requestorID & uint64 & Identifies the requestor associated with the error.\\
+\hline
+responderID & uint64 & Identifies the responder associated with the error.\\
+\hline
+instructionPointer & uint64 & Identifies the instruction executing when the error occurred.\\
\jsontableend{IA32/x64 Processor Error Info structure field table.}
+% IA32/x64 Processor Error Info Validation structure.
+\subsection{IA32/x64 Processor Error Info Validation Structure}
+\label{subsection:ia32x64processorerrorinfovalidationstructure}
+This structure describes a single IA32/x64 Processor Error Info structure's valid fields, as a set of boolean values.
+\jsontable{table:ia32x64processorerrorinfovalidationstructure}
+checkInfoValid & boolean & Whether the "checkInfo" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
+\hline
+targetAddressIDValid & boolean & Whether the "targetAddressID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
+\hline
+requestorIDValid & boolean & Whether the "requestorID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
+\hline
+responderIDValid & boolean & Whether the "responderID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
+\hline
+instructionPointerValid & boolean & Whether the "instructionPointer" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
+\hline
+\jsontableend{IA32/x64 Processor Error Info Validation structure field table.}
+
+% IA32/x64 Processor Error Check Info (Cache/TLB Error)
+\subsection{IA32/x64 Processor Error Check Info (Cache/TLB Error) Structure}
+\label{subsection:ia32x64processorerrorcheckinfocachetlbstructure}
+This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a cache or TLB error.
+The GUIDs for cache and TLB error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
+\jsontable{table:ia32x64processorerrorcheckinfocachetlbstructure}
+validationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
+\hline
+transactionType.value & uint64 & The raw value of the type of cache/TLB error that occurred.\\
+transactionType.name & string & The human readable name, if available, of the type of cache/TLB error that occurred.\\
+\hline
+operation.value & uint64 & The raw value of the type of cache/TLB operation that caused the error.\\
+operation.name & string & The human readable name, if available, of the type of cache/TLB operation that caused the error.\\
+\hline
+level & uint64 & The cache/TLB level at which the error occurred.\\
+\hline
+processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
+\hline
+uncorrected & boolean & Whether the error remained uncorrected.\\
+\hline
+preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
+\hline
+restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
+\hline
+overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
+\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB Error) structure field table.}
+
+% IA32/x64 Processor Error Check Info (Bus Error)
+\subsection{IA32/x64 Processor Error Check Info (Bus Error) Structure}
+\label{subsection:ia32x64processorerrorcheckinfobusstructure}
+This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a bus error.
+The GUID for bus error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
+\jsontable{table:ia32x64processorerrorcheckinfobusstructure}
+validationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
+\hline
+transactionType.value & uint64 & The raw value of the type of bus error that occurred.\\
+transactionType.name & string & The human readable name, if available, of the type of bus error that occurred.\\
+\hline
+operation.value & uint64 & The raw value of the type of bus operation that caused the error.\\
+operation.name & string & The human readable name, if available, of the type of bus operation that caused the error.\\
+\hline
+level & uint64 & The bus heirarchy level at which the error occurred.\\
+\hline
+processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
+\hline
+uncorrected & boolean & Whether the error remained uncorrected.\\
+\hline
+preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
+\hline
+restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
+\hline
+overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
+\hline
+participationType.value & uint64 & The raw value of the type of participation.\\
+participationType.name & string & The human readable name, if available, of the type of participation.\\
+\hline
+timedOut & boolean & Whether the request timed out.\\
+\hline
+addressSpace.value & uint64 & The raw value of the address space the error was in.\\
+addressSpace.name & string & The human readable name, if available, of the address space the error was in.\\
+\jsontableend{IA32/x64 Processor Error Check Info (Bus Error) structure field table.}
+
+% IA32/x64 Processor Error Check Info (MS Check Error)
+\subsection{IA32/x64 Processor Error Check Info (MS Check Error) Structure}
+\label{subsection:ia32x64processorerrorcheckinfomscheckstructure}
+This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from an MS check error.
+The GUID for MS check check info structures can be found in the library repository's \texttt{edk/Cper.h}.
+\jsontable{table:ia32x64processorerrorcheckinfomscheckstructure}
+validationBits & object & An IA32/x64 Processor Error Check Info (MS Check) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}.\\
+\hline
+errorType.value & uint64 & The raw value of the type of operation that caused the error.\\
+errorType.name & string & The human readable name, if available, of the type of operation that caused the error.\\
+\hline
+processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
+\hline
+uncorrected & boolean & Whether the error remained uncorrected.\\
+\hline
+preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
+\hline
+restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
+\hline
+overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
+\jsontableend{IA32/x64 Processor Error Check Info (MS Check Error) structure field table.}
+
+% IA32/x64 Processor Error Check Info Validation structure.
+\subsection{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation Structure}
+\label{subsection:ia32x64processorerrorcheckinfovalidationstructure}
+This structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for cache, TLB and bus errors, as a set of boolean values.
+\jsontable{table:ia32x64processorerrorcheckinfovalidationstructure}
+transactionTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info structure is valid.\\
+\hline
+operationValid & boolean & Whether the "operation" field in a Processor Error Check Info structure is valid.\\
+\hline
+levelValid & boolean & Whether the "level" field in a Processor Error Check Info structure is valid.\\
+\hline
+processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info structure is valid.\\
+\hline
+uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info structure is valid.\\
+\hline
+preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info structure is valid.\\
+\hline
+restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info structure is valid.\\
+\hline
+overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info structure is valid.\\
+\hline
+participationTypeValid & boolean (\textbf{optional}) & Whether the "participationType" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
+\hline
+timedOutValid & boolean (\textbf{optional}) & Whether the "timeOut" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
+\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure field table.}
+
+% IA32/x64 Processor Error Check Info (MS Check) Validation structure.
+\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure}
+\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}
+This structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for MS check errors, as a set of boolean values.
+\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure}
+errorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
+\hline
+processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
+\hline
+uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
+\hline
+preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
+\hline
+restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
+\hline
+overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
+\jsontableend{IA32/x64 Processor Error Check Info (MS Check) Validation structure field table.}
+
% IA32/x64 Processor Context Info structure.
\subsection{IA32/x64 Processor Context Info Structure}
\label{subsection:ia32x64processorcontextinfostructure}
This structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
\jsontable{table:ia32x64processorcontextinfostructure}
-todo & todo & todo.\\
+registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
+registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
\hline
+registerArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\
+\hline
+msrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\
+\hline
+mmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\
+\hline
+registerArray & object & Register data, formatted as object fields. If the \texttt{registerContextType.value} field has the value "2" or "3", this takes the structure of Subsections \ref{subsection:ia32x64ia32registerstatestructure} and \ref{subsection:ia32x64x64registerstatestructure} respectively. If the value is any other, it takes the form of the structure defined in Subsection \ref{subsection:ia32x64unformattedregisterstatestructure}.\\
\jsontableend{IA32/x64 Processor Context Info structure field table.}
+% IA32/x64 IA32 Register State structure
+\subsection{IA32/x64 IA32 Register State Structure}
+\label{subsection:ia32x64ia32registerstatestructure}
+This structure describes a single IA32/x64 IA32 register state, which is contained in IA32/x64 Processor Context Info structures (\ref{subsection:ia32x64processorcontextinfostructure}) when \texttt{registerContextType.value} has the value "2".
+\jsontable{table:ia32x64ia32registerstatestructure}
+eax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+ebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+ecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+edx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+esi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+edi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+ebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+esp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+cs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+ds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+ss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+es & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+fs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+gs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+eflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+eip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+cr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+cr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+cr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+cr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+cr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\hline
+gdtr & uint64 & The GDTR register.\\
+\hline
+idtr & uint64 & The IDTR register.\\
+\hline
+ldtr & uint64 & The LDTR register.\\
+\hline
+tr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
+\jsontableend{IA32/x64 IA32 Register State structure field table.}
+
+% IA32/x64 x64 Register State structure
+\subsection{IA32/x64 x64 Register State Structure}
+\label{subsection:ia32x64x64registerstatestructure}
+This structure describes a single IA32/x64 x64 register state, which is contained in IA32/x64 Processor Context Info structures (\ref{subsection:ia32x64processorcontextinfostructure}) when \texttt{registerContextType.value} has the value "3".
+\jsontable{table:ia32x64x64registerstatestructure}
+rax & uint64 & The RAX register.\\
+\hline
+rbx & uint64 & The RBX register.\\
+\hline
+rcx & uint64 & The RCX register.\\
+\hline
+rdx & uint64 & The RDX register.\\
+\hline
+rsi & uint64 & The RSI register.\\
+\hline
+rdi & uint64 & The RDI register.\\
+\hline
+rbp & uint64 & The RBP register.\\
+\hline
+rsp & uint64 & The RSP register.\\
+\hline
+r8 & uint64 & The R8 register.\\
+\hline
+r9 & uint64 & The R9 register.\\
+\hline
+r10 & uint64 & The R10 register.\\
+\hline
+r11 & uint64 & The R11 register.\\
+\hline
+r12 & uint64 & The R12 register.\\
+\hline
+r13 & uint64 & The R13 register.\\
+\hline
+r14 & uint64 & The R14 register.\\
+\hline
+r15 & uint64 & The R15 register.\\
+\hline
+cs & uint64 & The CS register.\\
+\hline
+ds & uint64 & The DS register.\\
+\hline
+ss & uint64 & The SS register.\\
+\hline
+es & uint64 & The ES register.\\
+\hline
+fs & uint64 & The FS register.\\
+\hline
+gs & uint64 & The GS register.\\
+\hline
+rflags & uint64 & The RFLAGS register.\\
+\hline
+eip & uint64 & The EIP register.\\
+\hline
+cr0 & uint64 & The CR0 register.\\
+\hline
+cr1 & uint64 & The CR1 register.\\
+\hline
+cr2 & uint64 & The CR2 register.\\
+\hline
+cr3 & uint64 & The CR3 register.\\
+\hline
+cr4 & uint64 & The CR4 register.\\
+\hline
+cr8 & uint64 & The CR8 register.\\
+\hline
+gdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\
+\hline
+gdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\
+\hline
+idtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\
+\hline
+idtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\
+\hline
+ldtr & uint64 & The LDTR register.\\
+\hline
+tr & uint64 & The TR register.\\
+\jsontableend{IA32/x64 x64 Register State structure field table.}
+
+% IA32/x64 IA32 Register State structure
+\subsection{IA32/x64 Unformatted Register State Structure}
+\label{subsection:ia32x64unformattedregisterstatestructure}
+This structure describes a single IA32/x64 unformatted register state, which is contained in IA32/x64 Processor Context Info structures (\ref{subsection:ia32x64processorcontextinfostructure}) when\\\texttt{registerContextType.value} has a value other than "2" or "3".
+\jsontable{table:ia32x64unformattedregisterstatestructure}
+data & string & A base64-formatted binary representation of the register array.\\
+\jsontableend{IA32/x64 Unformatted Register State structure field table.}
+
+% ARM processor error section.
+\section{ARM Processor Error Section}
+\label{section:armprocessorerrorsection}
+This section describes the JSON format for a single ARM Processor Error Section from a CPER record. The GUID used for ARM Processor Error Sections is \texttt{\{ 0xe19e3d16, 0xbc11, 0x11e4, \{ 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 \}\}}.
+\jsontable{table:armprocessorerrorsection}
+validationBits & object & An ARM Processor Error Validation structure, as defined in Subsection .\\
+\hline
+errorInfoNum & int & The number of error info structures attached to this error.\\
+\hline
+contextInfoNum & int & The number of context info structures attached to this error.\\
+\hline
+sectionLength & uint64 & The total size (in bytes) of this error section.\\
+\hline
+errorAffinity.value & int & The raw value of the error affinity for this error.\\
+errorAffinity.type & string & The human readable type of the error affinity for this error. All values are vendor defined, so specific names cannot be provided.\\
+\hline
+mpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\
+\hline
+midrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\
+\hline
+running & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\
+\hline
+psciState & uint64 (\textbf{optional}) & The PSCI state of the processor. Only \textbf{optionally} included when the "running" field is false. Cannot be made human readable, as this could either be in the pre-PSCI 1.0 format, or the newer "Extended StateID" format. For more information, see the ARM PSCI specification.\\
+\hline
+errorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\
+\hline
+contextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\
+\hline
+vendorSpecificInfo.data & string & A base64-encoded binary representation of any attached vendor specific information.\\
+\jsontableend{ARM Processor Error structure field table.}
+
+% ARM Processor Error Validation structure
+\subsection{ARM Processor Error Validation Structure}
+\label{subsection:armprocessorerrorvalidationstructure}
+This structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields.
+\jsontable{table:armprocessorerrorvalidationstructure}
+mpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
+\hline
+errorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
+\hline
+runningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
+\hline
+vendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\
+\jsontableend{ARM Processor Error Validation structure field table.}
+
+% ARM Processor Error Info structure
+\subsection{ARM Processor Error Info Structure}
+\label{subsection:armprocessorerrorinfostructure}
+This structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
+\jsontable{table:armprocessorerrorinfostructure}
+version & int & The version of the structure that is implemented.\\
+\hline
+length & int & The length of the structure, in bytes. For version 0, this is 32.\\
+\hline
+validationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\
+\hline
+errorType.value & uint64 & The raw value of the error type this error info describes.\\
+errorType.name & string & The human readable name, if available, of the error type this error info describes.\\
+\hline
+multipleError.value & int & If the value of this field is 2 or greater, the raw value of the number of errors that occurred. Otherwise, the raw value of the multiple error status.\\
+multipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\
+\hline
+flags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\
+\hline
+errorInformation & object & An error information structure, as defined in one of Subsections \ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} or \ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}. Which structure this is depends on the \texttt{errorType.value} field.\\
+\hline
+virtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\
+\hline
+physicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\
+\jsontableend{ARM Processor Error Info structure field table.}
+
+% ARM Processor Error Info Validation structure
+\subsection{ARM Processor Error Info Validation Structure}
+\label{subsection:armprocessorerrorinfovalidationstructure}
+This structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
+\jsontable{table:armprocessorerrorinfovalidationstructure}
+multipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
+\hline
+flagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
+\hline
+errorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
+\hline
+virtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
+\hline
+physicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
+\jsontableend{ARM Processor Error Info Validation structure field table.}
+
+% ARM Processor Error Info Validation structure
+\subsection{ARM Processor Error Info Flags Structure}
+\label{subsection:armprocessorerrorinfoflagsstructure}
+This structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
+\jsontable{table:armprocessorerrorinfoflagsstructure}
+firstErrorCaptured & boolean & Whether this is the first error captured.\\
+\hline
+lastErrorCaptured & boolean & Whether this is the last error captured.\\
+\hline
+propagated & boolean & Whether the error has propagated.\\
+\hline
+overflow & boolean & Whether error buffer overflow was detected. This is usually from multiple errors occurring in a short timespan, and indicates loss of error data.\\
+\jsontableend{ARM Processor Error Info Flags structure field table.}
+
+% ARM Processor Error Info Error Information (Cache/TLB) structure
+\subsection{ARM Processor Error Info Cache/TLB Information Structure}
+\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}
+This structure describes cache/TLB error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
+\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure}
+validationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\
+\hline
+transactionType.value & uint64 & The raw value of the type of cache/TLB error.\\
+transactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\
+\hline
+operation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\
+operation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\
+\hline
+level & int & The cache/TLB level that the error occurred at.\\
+\hline
+processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
+\hline
+corrected & boolean & Whether the error was corrected.\\
+\hline
+precisePC & boolean & Whether the program counter is directly associated with the error.\\
+\hline
+restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
+\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.}
+
+% ARM Processor Error Info Error Information (Cache/TLB) validation structure
+\subsection{ARM Processor Error Info Cache/TLB Validation Structure}
+\label{subsection:armprocessorerrorinfocachetlbvalidationstructure}
+This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}), as a set of boolean fields.
+\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure}
+transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\hline
+operationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\hline
+levelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\hline
+processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\hline
+correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\hline
+precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\hline
+restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
+\jsontableend{ARM Processor Error Info Cache/TLB Validation structure field table.}
+
+% ARM Processor Error Info Error Information (Bus) structure
+\subsection{ARM Processor Error Info Bus Information Structure}
+\label{subsection:armprocessorerrorinfoerrorinformationbusstructure}
+This structure describes bus error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
+\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure}
+validationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\
+\hline
+transactionType.value & uint64 & The raw value of the type of bus error.\\
+transactionType.name & string & The human readable name, if available, of the type of bus error.\\
+\hline
+operation.value & uint64 & The raw value of the bus operation that caused the error.\\
+operation.name & string & The human readable name, if available, of the bus operation that caused the error.\\
+\hline
+level & int & The affinity level that the bus error occurred at.\\
+\hline
+processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
+\hline
+corrected & boolean & Whether the error was corrected.\\
+\hline
+precisePC & boolean & Whether the program counter is directly associated with the error.\\
+\hline
+restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
+\hline
+timedOut & boolean & Whether the request timed out.\\
+\hline
+participationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\
+participationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\
+\hline
+addressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\
+addressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\
+\hline
+memoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\
+\hline
+accessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\
+accessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\
+\jsontableend{ARM Processor Error Info Bus Information structure field table.}
+
+% ARM Processor Error Info Error Information (Bus) validation structure
+\subsection{ARM Processor Error Info Bus Validation Structure}
+\label{subsection:armprocessorerrorinfobusvalidationstructure}
+This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}), as a set of boolean fields.
+\jsontable{table:armprocessorerrorinfobusvalidationstructure}
+transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+operationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+levelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+participationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+timedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+addressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+memoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\hline
+accessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
+\jsontableend{ARM Processor Error Info Bus Validation structure field table.}
+
+% ARM Processor Context Info structure
+\subsection{ARM Processor Context Info Structure}
+\label{subsection:armprocessorcontextinfostructure}
+This structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
+\jsontable{table:armprocessorcontextinfostructure}
+registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
+registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
+\hline
+registerArraySize & uint64 & The size of the attached register array, in bytes.\\
+\hline
+registerArray & object & The attached register array, with registers encoded as object fields. Structured as shown in one of subsections \ref{subsection:armaarch32gprstructure}, \ref{subsection:armaarch32el1contextregistersstructure}, \ref{subsection:armaarch32el2contextregistersstructure}, \ref{subsection:armaarch32secureregistersstructure}, \ref{subsection:armaarch64gprstructure}, \ref{subsection:armaarch64el1contextregistersstructure}, \ref{subsection:armaarch64el2contextregistersstructure}, \ref{subsection:armaarch64el3contextregistersstructure}, \ref{subsection:armmiscregistersstructure} or \ref{subsection:armunknownregistersstructure}. Type of structure depends on the \texttt{registerContextType.value} field.\\
+\jsontableend{ARM Processor Context Info structure field table.}
+
+% ARM AARCH32 General Purpose Registers structure
+\subsection{ARM AARCH32 General Purpose Registers Structure}
+\label{subsection:armaarch32gprstructure}
+This structure describes the register array for AARCH32 GPRs as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 0.
+\jsontable{table:armaarch32gprstructure}
+r0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+r15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\jsontableend{ARM AARCH32 General Purpose Registers structure field table.}
+
+% ARM AARCH32 EL1 Context Registers structure
+\subsection{ARM AARCH32 EL1 Context Registers Structure}
+\label{subsection:armaarch32el1contextregistersstructure}
+This structure describes the register array for AARCH32 EL1 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 1.
+\jsontable{table:armaarch32el1contextregistersstructure}
+dfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+dfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+ifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+isr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+mair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+mair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+midr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+mpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+nmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+prrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+sctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+tpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+tpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+tpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+ttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+ttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+ttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+dacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.}
+
+% ARM AARCH32 EL2 Context Registers structure
+\subsection{ARM AARCH32 EL2 Context Registers Structure}
+\label{subsection:armaarch32el2contextregistersstructure}
+This structure describes the register array for AARCH32 EL2 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 2.
+\jsontable{table:armaarch32el2contextregistersstructure}
+elr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+hsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+htcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+htpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+httbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+vtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+vttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+dacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.}
+
+% ARM AARCH32 Secure Registers structure
+\subsection{ARM AARCH32 Secure Registers Structure}
+\label{subsection:armaarch32secureregistersstructure}
+This structure describes the register array for AARCH32 secure registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 3.
+\jsontable{table:armaarch32secureregistersstructure}
+sctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\hline
+spsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
+\jsontableend{ARM AARCH32 Secure Registers structure field table.}
+
+% ARM AARCH64 General Purpose Registers structure
+\subsection{ARM AARCH64 General Purpose Registers Structure}
+\label{subsection:armaarch64gprstructure}
+This structure describes the register array for AARCH64 GPRs as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 4.
+\jsontable{table:armaarch64gprstructure}
+x0 & uint64 & Register X0.\\
+\hline
+x1 & uint64 & Register X1.\\
+\hline
+x2 & uint64 & Register X2.\\
+\hline
+x3 & uint64 & Register X3.\\
+\hline
+x4 & uint64 & Register X4.\\
+\hline
+x5 & uint64 & Register X5.\\
+\hline
+x6 & uint64 & Register X6.\\
+\hline
+x7 & uint64 & Register X7.\\
+\hline
+x8 & uint64 & Register X8.\\
+\hline
+x9 & uint64 & Register X9.\\
+\hline
+x10 & uint64 & Register X10.\\
+\hline
+x11 & uint64 & Register X11.\\
+\hline
+x12 & uint64 & Register X12.\\
+\hline
+x13 & uint64 & Register X13.\\
+\hline
+x14 & uint64 & Register X14.\\
+\hline
+x15 & uint64 & Register X15.\\
+\hline
+x16 & uint64 & Register X16.\\
+\hline
+x17 & uint64 & Register X17.\\
+\hline
+x18 & uint64 & Register X18.\\
+\hline
+x19 & uint64 & Register X19.\\
+\hline
+x20 & uint64 & Register X20.\\
+\hline
+x21 & uint64 & Register X21.\\
+\hline
+x22 & uint64 & Register X22.\\
+\hline
+x23 & uint64 & Register X23.\\
+\hline
+x24 & uint64 & Register X24.\\
+\hline
+x25 & uint64 & Register X25.\\
+\hline
+x26 & uint64 & Register X26.\\
+\hline
+x27 & uint64 & Register X27.\\
+\hline
+x28 & uint64 & Register X28.\\
+\hline
+x29 & uint64 & Register X29.\\
+\hline
+x30 & uint64 & Register X30.\\
+\hline
+sp & uint64 & Register SP.\\
+\jsontableend{ARM AARCH64 General Purpose Registers structure field table.}
+
+% ARM AARCH64 EL1 Context Registers structure
+\subsection{ARM AARCH64 EL1 Context Registers Structure}
+\label{subsection:armaarch64el1contextregistersstructure}
+This structure describes the register array for AARCH64 EL1 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 5.
+\jsontable{table:armaarch64el1contextregistersstructure}
+elr\_el1 & uint64 & Register ELR (EL1).\\
+\hline
+esr\_el1 & uint64 & Register ESR (EL1).\\
+\hline
+far\_el1 & uint64 & Register FAR (EL1).\\
+\hline
+isr\_el1 & uint64 & Register ISR (EL1).\\
+\hline
+mair\_el1 & uint64 & Register MAIR (EL1).\\
+\hline
+midr\_el1 & uint64 & Register MIDR (EL1).\\
+\hline
+mpidr\_el1 & uint64 & Register MPIDR (EL1).\\
+\hline
+sctlr\_el1 & uint64 & Register SCTLR (EL1).\\
+\hline
+sp\_el0 & uint64 & Register SP (EL0).\\
+\hline
+sp\_el1 & uint64 & Register SP (EL1).\\
+\hline
+spsr\_el1 & uint64 & Register SPSR (EL1).\\
+\hline
+tcr\_el1 & uint64 & Register TCR (EL1).\\
+\hline
+tpidr\_el0 & uint64 & Register TPIDR (EL0).\\
+\hline
+tpidr\_el1 & uint64 & Register TPIDR (EL1).\\
+\hline
+tpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\
+\hline
+ttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\
+\hline
+ttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\
+\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.}
+
+% ARM AARCH64 EL2 Context Registers structure
+\subsection{ARM AARCH64 EL2 Context Registers Structure}
+\label{subsection:armaarch64el2contextregistersstructure}
+This structure describes the register array for AARCH64 EL2 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 6.
+\jsontable{table:armaarch64el2contextregistersstructure}
+elr\_el2 & uint64 & Register ELR (EL2).\\
+\hline
+esr\_el2 & uint64 & Register ESR (EL2).\\
+\hline
+far\_el2 & uint64 & Register FAR (EL2).\\
+\hline
+hacr\_el2 & uint64 & Register HACR (EL2).\\
+\hline
+hcr\_el2 & uint64 & Register HCR (EL2).\\
+\hline
+hpfar\_el2 & uint64 & Register HPFAR (EL2).\\
+\hline
+mair\_el2 & uint64 & Register MAIR (EL2).\\
+\hline
+sctlr\_el2 & uint64 & Register SCTLR (EL2).\\
+\hline
+sp\_el2 & uint64 & Register SP (EL2).\\
+\hline
+spsr\_el2 & uint64 & Register SPSR (EL2).\\
+\hline
+tcr\_el2 & uint64 & Register TCR (EL2).\\
+\hline
+tpidr\_el2 & uint64 & Register TPIDR (EL2).\\
+\hline
+ttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\
+\hline
+vtcr\_el2 & uint64 & Register VTCR (EL2).\\
+\hline
+vttbr\_el2 & uint64 & Register VTTBR (EL2).\\
+\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.}
+
+% ARM AARCH64 EL3 Context Registers structure
+\subsection{ARM AARCH64 EL3 Context Registers Structure}
+\label{subsection:armaarch64el3contextregistersstructure}
+This structure describes the register array for AARCH64 EL3 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 7.
+\jsontable{table:armaarch64el3contextregistersstructure}
+elr\_el3 & uint64 & Register ELR (EL3).\\
+\hline
+esr\_el3 & uint64 & Register ESR (EL3).\\
+\hline
+far\_el3 & uint64 & Register FAR (EL3).\\
+\hline
+mair\_el3 & uint64 & Register MAIR (EL3).\\
+\hline
+sctlr\_el3 & uint64 & Register SCTLR (EL3).\\
+\hline
+sp\_el3 & uint64 & Register SP (EL3).\\
+\hline
+spsr\_el3 & uint64 & Register SPSR (EL3).\\
+\hline
+tcr\_el3 & uint64 & Register TCR (EL3).\\
+\hline
+tpidr\_el3 & uint64 & Register TPIDR (EL3).\\
+\hline
+ttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\
+\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.}
+
+% ARM AARCH64 Miscellaneous Registers structure
+\subsection{ARM AARCH64 Miscellaneous Registers Structure}
+\label{subsection:armmiscregistersstructure}
+This structure describes the register array for miscellaneous ARM registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 8.
+\jsontable{table:armmiscregistersstructure}
+mrsEncoding.op2 & uint64 & MRS Encoding OP2.\\
+\hline
+mrsEncoding.crm & uint64 & MRS Encoding CRm.\\
+\hline
+mrsEncoding.crn & uint64 & MRS Encoding CRn.\\
+\hline
+mrsEncoding.op1 & uint64 & MRS Encoding Op1.\\
+\hline
+mrsEncoding.o0 & uint64 & MRS Encoding O0.\\
+\hline
+value & uint64 & Value of the single register.\\
+\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.}
+
+% ARM AARCH64 Unknown Registers structure
+\subsection{ARM AARCH64 Unknown Registers Structure}
+\label{subsection:armunknownregistersstructure}
+This structure describes the register array for unknown ARM registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has any value other than 0-8 (inclusive).
+\jsontable{table:armunknownregistersstructure}
+data & string & A base64 representation of the unknown binary register array data.\\
+\jsontableend{ARM AARCH64 Unknown Registers structure field table.}
+
+
\end{document}
\ No newline at end of file