Fix errata in IA32x64 processing.
diff --git a/generator/sections/gen-section-ia32x64.c b/generator/sections/gen-section-ia32x64.c
index 2fb6585..a4470a8 100644
--- a/generator/sections/gen-section-ia32x64.c
+++ b/generator/sections/gen-section-ia32x64.c
@@ -6,7 +6,6 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <stdio.h>
 #include "../../edk/Cper.h"
 #include "../gen-utils.h"
 #include "gen-sections.h"
@@ -132,20 +131,33 @@
 
     //Set register size.
     if (reg_type == 2)
+    {
         reg_size = 92; //IA32 registers.
-    if (reg_type == 3)
+    }
+    else if (reg_type == 3)
+    {
         reg_size = 244; //x64 registers.
+    }
     else
-        reg_size = (rand() % 5) * 32; //Not table defined.
+    {
+        reg_size = (rand() % 5 + 1) * 32; //Not table defined.
+    }
 
     //Create structure randomly.
     int total_size = 16 + reg_size;
     UINT16* context_structure = (UINT16*)generate_random_bytes(total_size);
 
+    //If it is x64 registers, set reserved area accordingly.
+    if (reg_type == 3)
+    {
+        UINT8* reg_bytes = (UINT8*)(context_structure + 8);
+        UINT32* reserved = (UINT32*)(reg_bytes + 140);
+        *reserved = 0;
+    }
+
     //Set header information.
     *(context_structure) = reg_type;
     *(context_structure + 1) = reg_size;
-    printf("set reg size to %d (for type %d).\n", reg_size, reg_type);
 
     //Set return values and exit.
     *location = context_structure;
diff --git a/sections/cper-section-ia32x64.c b/sections/cper-section-ia32x64.c
index 5102a33..a2f806a 100644
--- a/sections/cper-section-ia32x64.c
+++ b/sections/cper-section-ia32x64.c
@@ -567,12 +567,12 @@
     register_state.Edi = (UINT32)json_object_get_uint64(json_object_object_get(registers, "edi"));
     register_state.Ebp = (UINT32)json_object_get_uint64(json_object_object_get(registers, "ebp"));
     register_state.Esp = (UINT32)json_object_get_uint64(json_object_object_get(registers, "esp"));
-    register_state.Cs = (UINT32)json_object_get_uint64(json_object_object_get(registers, "cs"));
+    register_state.Cs = (UINT16)json_object_get_uint64(json_object_object_get(registers, "cs"));
     register_state.Ds = (UINT32)json_object_get_uint64(json_object_object_get(registers, "ds"));
-    register_state.Ss = (UINT32)json_object_get_uint64(json_object_object_get(registers, "ss"));
-    register_state.Es = (UINT32)json_object_get_uint64(json_object_object_get(registers, "es"));
-    register_state.Fs = (UINT32)json_object_get_uint64(json_object_object_get(registers, "fs"));
-    register_state.Gs = (UINT32)json_object_get_uint64(json_object_object_get(registers, "gs"));
+    register_state.Ss = (UINT16)json_object_get_uint64(json_object_object_get(registers, "ss"));
+    register_state.Es = (UINT16)json_object_get_uint64(json_object_object_get(registers, "es"));
+    register_state.Fs = (UINT16)json_object_get_uint64(json_object_object_get(registers, "fs"));
+    register_state.Gs = (UINT16)json_object_get_uint64(json_object_object_get(registers, "gs"));
     register_state.Eflags = (UINT32)json_object_get_uint64(json_object_object_get(registers, "eflags"));
     register_state.Eip = (UINT32)json_object_get_uint64(json_object_object_get(registers, "eip"));
     register_state.Cr0 = (UINT32)json_object_get_uint64(json_object_object_get(registers, "cr0"));
@@ -583,11 +583,11 @@
 
     //64-bit registers are split into two 32-bit parts.
     UINT64 gdtr = json_object_get_uint64(json_object_object_get(registers, "gdtr"));
-    register_state.Gdtr[0] = gdtr >> 32;
-    register_state.Gdtr[1] = gdtr & 0xFFFFFFFF;
+    register_state.Gdtr[0] = gdtr & 0xFFFFFFFF;
+    register_state.Gdtr[1] = gdtr >> 32;
     UINT64 idtr = json_object_get_uint64(json_object_object_get(registers, "idtr"));
-    register_state.Idtr[0] = idtr >> 32;
-    register_state.Idtr[1] = idtr & 0xFFFFFFFF;
+    register_state.Idtr[0] = idtr & 0xFFFFFFFF;
+    register_state.Idtr[1] = idtr >> 32;
 
     //16-bit registers.
     register_state.Ldtr = (UINT16)json_object_get_uint64(json_object_object_get(registers, "ldtr"));
@@ -618,12 +618,13 @@
     register_state.R13 = json_object_get_uint64(json_object_object_get(registers, "r13"));
     register_state.R14 = json_object_get_uint64(json_object_object_get(registers, "r14"));
     register_state.R15 = json_object_get_uint64(json_object_object_get(registers, "r15"));
-    register_state.Cs = json_object_get_uint64(json_object_object_get(registers, "cs"));
-    register_state.Ds = json_object_get_uint64(json_object_object_get(registers, "ds"));
-    register_state.Ss = json_object_get_uint64(json_object_object_get(registers, "ss"));
-    register_state.Es = json_object_get_uint64(json_object_object_get(registers, "es"));
-    register_state.Fs = json_object_get_uint64(json_object_object_get(registers, "fs"));
-    register_state.Gs = json_object_get_uint64(json_object_object_get(registers, "gs"));
+    register_state.Cs = (UINT16)json_object_get_int(json_object_object_get(registers, "cs"));
+    register_state.Ds = (UINT16)json_object_get_int(json_object_object_get(registers, "ds"));
+    register_state.Ss = (UINT16)json_object_get_int(json_object_object_get(registers, "ss"));
+    register_state.Es = (UINT16)json_object_get_int(json_object_object_get(registers, "es"));
+    register_state.Fs = (UINT16)json_object_get_int(json_object_object_get(registers, "fs"));
+    register_state.Gs = (UINT16)json_object_get_int(json_object_object_get(registers, "gs"));
+    register_state.Resv1 = 0;
     register_state.Rflags = json_object_get_uint64(json_object_object_get(registers, "rflags"));
     register_state.Rip = json_object_get_uint64(json_object_object_get(registers, "eip"));
     register_state.Cr0 = json_object_get_uint64(json_object_object_get(registers, "cr0"));
@@ -636,10 +637,10 @@
     register_state.Gdtr[1] = json_object_get_uint64(json_object_object_get(registers, "gdtr_1"));
     register_state.Idtr[0] = json_object_get_uint64(json_object_object_get(registers, "idtr_0"));
     register_state.Idtr[1] = json_object_get_uint64(json_object_object_get(registers, "idtr_1"));
-    register_state.Ldtr = (UINT16)json_object_get_uint64(json_object_object_get(registers, "ldtr"));
-    register_state.Tr = (UINT16)json_object_get_uint64(json_object_object_get(registers, "tr"));
+    register_state.Ldtr = (UINT16)json_object_get_int(json_object_object_get(registers, "ldtr"));
+    register_state.Tr = (UINT16)json_object_get_int(json_object_object_get(registers, "tr"));
 
     //Write out to stream.
-    fwrite(&register_state, sizeof(EFI_CONTEXT_IA32_REGISTER_STATE), 1, out);
+    fwrite(&register_state, sizeof(EFI_CONTEXT_X64_REGISTER_STATE), 1, out);
     fflush(out);
 }
\ No newline at end of file