Add memory error/memory error 2 sections.
diff --git a/cper-utils.c b/cper-utils.c
index 07d549f..88d7aad 100644
--- a/cper-utils.c
+++ b/cper-utils.c
@@ -31,7 +31,7 @@
     json_object_object_add(error_status_ir, "detectedByResponder", json_object_new_boolean(error_status->DetectedByResponder));
     json_object_object_add(error_status_ir, "detectedByRequester", json_object_new_boolean(error_status->DetectedByRequester));
     json_object_object_add(error_status_ir, "firstError", json_object_new_boolean(error_status->FirstError));
-    json_object_object_add(error_status_ir, "overflowNotLogged", json_object_new_boolean(error_status->OverflowNotLogged));
+    json_object_object_add(error_status_ir, "overflowDroppedLogs", json_object_new_boolean(error_status->OverflowNotLogged));
     
     return error_status_ir;
 }
diff --git a/sections/cper-section-arm.c b/sections/cper-section-arm.c
index da5d533..f16fe0a 100644
--- a/sections/cper-section-arm.c
+++ b/sections/cper-section-arm.c
@@ -322,11 +322,11 @@
 {
     json_object* register_array = json_object_new_object();
     json_object* mrs_encoding = json_object_new_object();
-    json_object_object_add(mrs_encoding, "op2", json_object_new_int(misc_register->MrsOp2));
-    json_object_object_add(mrs_encoding, "crm", json_object_new_int(misc_register->MrsOp2));
-    json_object_object_add(mrs_encoding, "crn", json_object_new_int(misc_register->MrsOp2));
-    json_object_object_add(mrs_encoding, "op1", json_object_new_int(misc_register->MrsOp2));
-    json_object_object_add(mrs_encoding, "o0", json_object_new_int(misc_register->MrsOp2));
+    json_object_object_add(mrs_encoding, "op2", json_object_new_uint64(misc_register->MrsOp2));
+    json_object_object_add(mrs_encoding, "crm", json_object_new_uint64(misc_register->MrsOp2));
+    json_object_object_add(mrs_encoding, "crn", json_object_new_uint64(misc_register->MrsOp2));
+    json_object_object_add(mrs_encoding, "op1", json_object_new_uint64(misc_register->MrsOp2));
+    json_object_object_add(mrs_encoding, "o0", json_object_new_uint64(misc_register->MrsOp2));
     json_object_object_add(register_array, "mrsEncoding", mrs_encoding);
     json_object_object_add(register_array, "value", json_object_new_uint64(misc_register->Value));
 
diff --git a/sections/cper-section-memory.c b/sections/cper-section-memory.c
index 5f78eed..296425c 100644
--- a/sections/cper-section-memory.c
+++ b/sections/cper-section-memory.c
@@ -26,8 +26,17 @@
 
     //Bank.
     json_object* bank = json_object_new_object();
-    json_object_object_add(bank, "address", json_object_new_uint64(memory_error->Bank & 0xFF));
-    json_object_object_add(bank, "group", json_object_new_uint64(memory_error->Bank >> 8));
+    if ((memory_error->ValidFields >> 5) & 0x1)
+    {
+        //Entire bank address mode.
+        json_object_object_add(bank, "value", json_object_new_uint64(memory_error->Bank));
+    }
+    else 
+    {
+        //Address/group address mode.
+        json_object_object_add(bank, "address", json_object_new_uint64(memory_error->Bank & 0xFF));
+        json_object_object_add(bank, "group", json_object_new_uint64(memory_error->Bank >> 8));
+    }
     json_object_object_add(section_ir, "bank", bank);
 
     //Memory error type.
@@ -80,8 +89,17 @@
 
     //Bank.
     json_object* bank = json_object_new_object();
-    json_object_object_add(bank, "address", json_object_new_uint64(memory_error->Bank & 0xFF));
-    json_object_object_add(bank, "group", json_object_new_uint64(memory_error->Bank >> 8));
+    if ((memory_error->ValidFields >> 5) & 0x1)
+    {
+        //Entire bank address mode.
+        json_object_object_add(bank, "value", json_object_new_uint64(memory_error->Bank));
+    }
+    else 
+    {
+        //Address/group address mode.
+        json_object_object_add(bank, "address", json_object_new_uint64(memory_error->Bank & 0xFF));
+        json_object_object_add(bank, "group", json_object_new_uint64(memory_error->Bank >> 8));
+    }
     json_object_object_add(section_ir, "bank", bank);
 
     //Memory error type.
diff --git a/specification/cper-json-specification.tex b/specification/cper-json-specification.tex
index 5d338ce..ac7af3f 100644
--- a/specification/cper-json-specification.tex
+++ b/specification/cper-json-specification.tex
@@ -29,7 +29,7 @@
     \end{tabular}
     \end{adjustbox}
     \caption{#1}
-    \label{table:headerrevstructure}
+    \label{table:#1}
     \end{table}
     \FloatBarrier
 }
@@ -209,6 +209,30 @@
 minor & int & The minor version number. Incremented on additions of new GUID types, errata fixes, or clarifications. Backwards compatible with the same major version number. \\
 \jsontableend{CPER revision structure field table.}
 
+% Generic Error Status
+\subsection{Generic Error Status Structure}
+\label{subsection:genericerrorstatusstructure}
+This structure describes the a generic CPER error status, that can be used by any CPER section.
+\jsontable{table:genericerrorstatusstructure}
+errorType.value & uint64 & The raw value of the error type.\\
+errorType.name & string & The human readable name, if available, of the error type.\\
+errorType.description & string & A human readable description, if available, of the error type.\\
+\hline
+addressSignal & boolean & Whether the error was detected on the address signals/address portion of the transaction.\\
+\hline
+controlSignal & boolean & Whether the error was detected on the control signals/control portion of the transaction.\\
+\hline
+dataSignal & boolean & Whether the error was detected on the data signals/data portion of the transaction.\\
+\hline
+detectedByResponder & boolean & Whether the error was detected by the responder of the transaction.\\
+\hline
+detectedByRequester & boolean & Whether the error was detected by the requester of the transaction.\\
+\hline
+firstError & boolean & If multiple errors are logged for a single type of section, this indicates this is the first error in a chronological sequence. This field is optional to set.\\
+\hline
+overflowDroppedLogs & boolean & Additional errors occurred and were not logged due to lack of resources.\\
+\jsontableend{Generic Error Status structure field table.}
+
 %Sections.
 \chapter{Section Specification}
 \label{chapter:sectionchapter}
@@ -1230,5 +1254,231 @@
 data & string & A base64 representation of the unknown binary register array data.\\
 \jsontableend{ARM AARCH64 Unknown Registers structure field table.}
 
+% Memory error section.
+\section{Memory Error Section}
+\label{section:memoryerrorsection}
+This section describes the JSON format for a single Memory Error Section from a CPER record. The GUID used for Memory Error Sections is \texttt{\{ 0xa5bc1114, 0x6f64, 0x4ede, \{ 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 \}\}}.
+\jsontable{table:memoryerrorsection}
+validationBits & object & A Memory Error Validation structure, as described in Subsection \ref{subsection:memoryerrorvalidationstructure}.\\
+\hline
+errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
+\hline
+bank & object & Structure as described in one of Subsection \ref{subsection:memoryerrorstandardbankaddressstructure} or Subsection \ref{subsection:memoryerroraddressgroupbankaddressstructure}. Selected structure depends on the \texttt{validationBits.bankValid} field.\\
+\hline
+memoryErrorType.value & uint64 & The raw value of the memory error type.\\
+memoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
+\hline
+extended.rowBit16 & boolean & Bit 16 of the row number of the memory error location.\\
+extended.rowBit17 & boolean & Bit 17 of the row number of the memory error location.\\
+extended.chipIdentification & int & The ID of the related chip.\\
+\hline
+physicalAddress & uint64 & The physical address at which the error occurred.\\
+\hline
+physicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
+\hline
+node & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
+\hline
+card & uint64 & The card number of the memory error location.\\
+\hline
+moduleRank & uint64 & The module or rank number of the offending memory error location.\\
+\hline
+device & uint64 & The device number of the memory associated with the error.\\
+\hline
+row & uint64 & The first 16 bits of the row number of the memory location.\\
+\hline
+column & uint64 & The column number of the memory error location.\\
+\hline
+bitPosition & uint64 & The bit position at which the error occurred.\\
+\hline
+requestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
+\hline
+responderID & uint64 & Hardware address of the device that responded to the transaction.\\
+\hline
+targetID & uint64 & Hardware address of the intended target of the transaction.\\
+\hline
+rankNumber & uint64 & The rank number of the memory error location.\\
+\hline
+cardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
+\hline
+moduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
+\jsontableend{Memory Error structure field table.}
+
+% Memory error validation structure.
+\subsection{Memory Error Validation Structure}
+\label{subsection:memoryerrorvalidationstructure}
+This structure describes whether fields in a single Memory Error (\ref{section:memoryerrorsection}) are valid, using boolean fields.
+\jsontable{table:memoryerrorvalidationstructure}
+errorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+physicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+physicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+nodeValid & boolean & Whether the "node" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+cardValid & boolean & Whether the "card" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+moduleValid & boolean & Whether the "module" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+bankValid & boolean & Whether the "bank.value" field of a Memory Error (\ref{section:memoryerrorsection}) is valid. When the bank is addressed by group/address, refer to \texttt{bankGroupValid} and \texttt{bankAddressValid} instead.\\
+\hline
+deviceValid & boolean & Whether the "device" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+rowValid & boolean & Whether the "row" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+memoryPlatformTargetValid & boolean & Whether the memory platform target of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+memoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+rankNumberValid & boolean & Whether the "rankNumber" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+cardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+moduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+extendedRowBitsValid & boolean & Whether the "extended.rowBit16" and "extended.rowBit17" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+bankGroupValid & boolean & Whether the "bank.group" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+bankAddressValid & boolean & Whether the "bank.address" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\hline
+chipIdentificationValid & boolean & Whether the "extended.chipIdentification" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
+\jsontableend{Memory Error Validation structure field table.}
+
+% Memory error normal bank addressing structure.
+\subsection{Memory Error Standard Bank Address Structure}
+\label{subsection:memoryerrorstandardbankaddressstructure}
+This structure describes a simple bank address for a Memory Error section (\ref{section:memoryerrorsection}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error Validation Structure (\ref{subsection:memoryerrorvalidationstructure}) is set to "true".
+\jsontable{table:memoryerrorstandardbankaddressstructure}
+value & uint64 & The value of the bank address.\\
+\jsontableend{Memory Error Standard Bank Address structure field table.}
+
+% Memory error address/group bank addressing structure.
+\subsection{Memory Error Address/Group Bank Address Structure}
+\label{subsection:memoryerroraddressgroupbankaddressstructure}
+This structure describes an address/group bank address for a Memory Error section (\ref{section:memoryerrorsection}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error Validation Structure (\ref{subsection:memoryerrorvalidationstructure}) is set to "false".
+\jsontable{table:memoryerroraddressgroupbankaddressstructure}
+address & uint64 & The address of the bank.\\
+\hline
+group & uint64 & The group of the bank.\\
+\jsontableend{Memory Error Address/Group Bank Address structure field table.}
+
+% Memory error 2 section.
+\section{Memory Error 2 Section}
+\label{section:memoryerror2section}
+This section describes the JSON format for a single Memory Error 2 Section from a CPER record. The GUID used for Memory Error 2 Sections is \texttt{\{ 0x61EC04FC, 0x48E6, 0xD813, \{ 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 \}\}}.
+\jsontable{table:memoryerror2section}
+validationBits & object & A Memory Error 2 Validation structure, as described in Subsection \ref{subsection:memoryerror2validationstructure}.\\
+\hline
+errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
+\hline
+bank & object & Structure as described in one of Subsection \ref{subsection:memoryerror2standardbankaddressstructure} or Subsection \ref{subsection:memoryerror2addressgroupbankaddressstructure}. Selected structure depends on the \texttt{validationBits.bankValid} field.\\
+\hline
+memoryErrorType.value & uint64 & The raw value of the memory error type.\\
+memoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
+\hline
+status.value & int & The raw value of the memory error status.\\
+status.state & string & The human readable value, if available, of the memory error status (corrected/uncorrected).\\
+\hline
+physicalAddress & uint64 & The physical address at which the error occurred.\\
+\hline
+physicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
+\hline
+node & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
+\hline
+card & uint64 & The card number of the memory error location.\\
+\hline
+module & uint64 & The module of the offending memory error location.\\
+\hline
+device & uint64 & The device number of the memory associated with the error.\\
+\hline
+row & uint64 & The first 16 bits of the row number of the memory location.\\
+\hline
+column & uint64 & The column number of the memory error location.\\
+\hline
+bitPosition & uint64 & The bit position at which the error occurred.\\
+\hline
+rank & uint64 & The rank number of the error location.\\
+\hline
+chipID & uint64 & Chip identifier. Encoded field used to address the die in 3DS packages.\\
+\hline
+requestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
+\hline
+responderID & uint64 & Hardware address of the device that responded to the transaction.\\
+\hline
+targetID & uint64 & Hardware address of the intended target of the transaction.\\
+\hline
+cardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
+\hline
+moduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
+\jsontableend{Memory Error 2 structure field table.}
+
+% Memory error 2 validation structure.
+\subsection{Memory Error 2 Validation Structure}
+\label{subsection:memoryerror2validationstructure}
+This structure describes whether fields in a single Memory Error 2 (\ref{section:memoryerror2section}) are valid, using boolean fields.
+\jsontable{table:memoryerror2validationstructure}
+errorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+physicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+physicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+nodeValid & boolean & Whether the "node" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+cardValid & boolean & Whether the "card" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+moduleValid & boolean & Whether the "module" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+bankValid & boolean & Whether the "bank.value" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid. When the bank is addressed by group/address, refer to \texttt{bankGroupValid} and \texttt{bankAddressValid} instead.\\
+\hline
+deviceValid & boolean & Whether the "device" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+rowValid & boolean & Whether the "row" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+columnValid & boolean & Whether the "column" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+rankValid & boolean & Whether the "rank" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+bitPositionValid & boolean & Whether the "bitPosition" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+chipIDValid & boolean & Whether the "chipID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+memoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+statusValid & boolean & Whether the "status" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+requestorIDValid & boolean & Whether the "requestorID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+responderIDValid & boolean & Whether the "responderID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+targetIDValid & boolean & Whether the "targetID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+cardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+moduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+bankGroupValid & boolean & Whether the "bankGroup" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\hline
+bankAddressValid & boolean & Whether the "bankAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
+\jsontableend{Memory Error 2 Validation structure field table.}
+
+% Memory error 2 normal bank addressing structure.
+\subsection{Memory Error 2 Standard Bank Address Structure}
+\label{subsection:memoryerror2standardbankaddressstructure}
+This structure describes a simple bank address for a Memory Error 2 section (\ref{section:memoryerror2section}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error 2 Validation Structure (\ref{subsection:memoryerror2validationstructure}) is set to "true".
+\jsontable{table:memoryerror2standardbankaddressstructure}
+value & uint64 & The value of the bank address.\\
+\jsontableend{Memory Error 2 Standard Bank Address structure field table.}
+
+% Memory error 2 address/group bank addressing structure.
+\subsection{Memory Error 2 Address/Group Bank Address Structure}
+\label{subsection:memoryerror2addressgroupbankaddressstructure}
+This structure describes an address/group bank address for a Memory Error 2 section (\ref{section:memoryerror2section}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error 2 Validation Structure (\ref{subsection:memoryerror2validationstructure}) is set to "false".
+\jsontable{table:memoryerror2addressgroupbankaddressstructure}
+address & uint64 & The address of the bank.\\
+\hline
+group & uint64 & The group of the bank.\\
+\jsontableend{Memory Error 2 Address/Group Bank Address structure field table.}
 
 \end{document}
\ No newline at end of file