summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/include/arch/registers.h35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/arch/x86/include/arch/registers.h b/src/arch/x86/include/arch/registers.h
index bc1b681339..d120a2a496 100644
--- a/src/arch/x86/include/arch/registers.h
+++ b/src/arch/x86/include/arch/registers.h
@@ -20,8 +20,41 @@
#ifndef __ARCH_REGISTERS_H
#define __ARCH_REGISTERS_H
+#define __PACKED __attribute__((packed))
+
+#define DOWNTO8(A) \
+ union { \
+ struct { \
+ union { \
+ struct { \
+ uint8_t A##l; \
+ uint8_t A##h; \
+ } __PACKED; \
+ uint16_t A##x; \
+ } __PACKED; \
+ uint16_t h##A##x; \
+ } __PACKED; \
+ uint32_t e##A##x; \
+ } __PACKED;
+
+#define DOWNTO16(A) \
+ union { \
+ struct { \
+ uint16_t A; \
+ uint16_t h##A; \
+ } __PACKED; \
+ uint32_t e##A; \
+ } __PACKED;
+
struct eregs {
- uint32_t eax, ecx, edx, ebx, esp, ebp, esi, edi;
+ DOWNTO8(a);
+ DOWNTO8(c);
+ DOWNTO8(d);
+ DOWNTO8(b);
+ DOWNTO16(sp);
+ DOWNTO16(bp);
+ DOWNTO16(si);
+ DOWNTO16(di);
uint32_t vector;
uint32_t error_code;
uint32_t eip;