Fix errata in IA32x64 processing.
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(®ister_state, sizeof(EFI_CONTEXT_IA32_REGISTER_STATE), 1, out);
+ fwrite(®ister_state, sizeof(EFI_CONTEXT_X64_REGISTER_STATE), 1, out);
fflush(out);
}
\ No newline at end of file