summaryrefslogtreecommitdiff
path: root/utils/libmach/6.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/libmach/6.c')
-rw-r--r--utils/libmach/6.c97
1 files changed, 48 insertions, 49 deletions
diff --git a/utils/libmach/6.c b/utils/libmach/6.c
index 28c74a43..459d1191 100644
--- a/utils/libmach/6.c
+++ b/utils/libmach/6.c
@@ -1,16 +1,12 @@
/*
- * x86-amd64 definition
+ * amd64 definition
*/
#include <lib9.h>
#include <bio.h>
#include "ureg6.h"
#include "mach.h"
-#define REGOFF(x) (uvlong)(&((struct Ureg *) 0)->x)
-
-#define PC REGOFF(pc)
-#define SP REGOFF(sp)
-#define AX REGOFF(ax)
+#define REGOFF(x) offsetof(struct Ureg, x)
#define REGSIZE sizeof(struct Ureg)
#define FP_CTLS(x) (REGSIZE+2*(x))
@@ -21,41 +17,43 @@
#define FPREGSIZE 512 /* TO DO? currently only 0x1A0 used */
Reglist amd64reglist[] = {
- {"R15", REGOFF(r15), RINT, 'Y'},
- {"R14", REGOFF(r14), RINT, 'Y'},
- {"R13", REGOFF(r13), RINT, 'Y'},
- {"R12", REGOFF(r12), RINT, 'Y'},
- {"R11", REGOFF(r11), RINT, 'Y'},
- {"R10", REGOFF(r10), RINT, 'Y'},
- {"R9", REGOFF(r9), RINT, 'Y'},
- {"R8", REGOFF(r8), RINT, 'Y'},
- {"DI", REGOFF(di), RINT, 'X'},
- {"SI", REGOFF(si), RINT, 'Y'},
- {"BP", REGOFF(bp), RINT, 'Y'},
+ {"AX", REGOFF(ax), RINT, 'Y'},
{"BX", REGOFF(bx), RINT, 'Y'},
- {"DX", REGOFF(dx), RINT, 'Y'},
{"CX", REGOFF(cx), RINT, 'Y'},
- {"AX", REGOFF(ax), RINT, 'Y'},
- {"GS", REGOFF(gs), RINT, 'Y'},
- {"FS", REGOFF(fs), RINT, 'Y'},
- {"ES", REGOFF(es), RINT, 'Y'},
- {"DS", REGOFF(ds), RINT, 'Y'},
- {"TRAP", REGOFF(trap), RINT, 'Y'},
- {"ECODE", REGOFF(ecode), RINT, 'Y'},
- {"PC", PC, RINT, 'Y'},
+ {"DX", REGOFF(dx), RINT, 'Y'},
+ {"SI", REGOFF(si), RINT, 'Y'},
+ {"DI", REGOFF(di), RINT, 'Y'},
+ {"BP", REGOFF(bp), RINT, 'Y'},
+ {"R8", REGOFF(r8), RINT, 'Y'},
+ {"R9", REGOFF(r9), RINT, 'Y'},
+ {"R10", REGOFF(r10), RINT, 'Y'},
+ {"R11", REGOFF(r11), RINT, 'Y'},
+ {"R12", REGOFF(r12), RINT, 'Y'},
+ {"R13", REGOFF(r13), RINT, 'Y'},
+ {"R14", REGOFF(r14), RINT, 'Y'},
+ {"R15", REGOFF(r15), RINT, 'Y'},
+ {"DS", REGOFF(ds), RINT, 'x'},
+ {"ES", REGOFF(es), RINT, 'x'},
+ {"FS", REGOFF(fs), RINT, 'x'},
+ {"GS", REGOFF(gs), RINT, 'x'},
+ {"TYPE", REGOFF(type), RINT, 'Y'},
+ {"TRAP", REGOFF(type), RINT, 'Y'}, /* alias for acid */
+ {"ERROR", REGOFF(error), RINT, 'Y'},
+ {"IP", REGOFF(ip), RINT, 'Y'},
+ {"PC", REGOFF(ip), RINT, 'Y'}, /* alias for acid */
{"CS", REGOFF(cs), RINT, 'Y'},
- {"EFLAGS", REGOFF(flags), RINT, 'Y'},
- {"SP", SP, RINT, 'Y'},
+ {"FLAGS", REGOFF(flags), RINT, 'Y'},
+ {"SP", REGOFF(sp), RINT, 'Y'},
{"SS", REGOFF(ss), RINT, 'Y'},
{"FCW", FP_CTLS(0), RFLT, 'x'},
{"FSW", FP_CTLS(1), RFLT, 'x'},
- {"FTW", FP_CTLS(2), RFLT, 'x'},
+ {"FTW", FP_CTLS(2), RFLT, 'b'},
{"FOP", FP_CTLS(3), RFLT, 'x'},
- {"FPC", FP_CTL(2), RFLT, 'Y'},
+ {"RIP", FP_CTL(2), RFLT, 'Y'},
{"RDP", FP_CTL(4), RFLT, 'Y'},
- {"MXCSR", FP_CTL(6), RFLT, 'X'},
- {"MXCSRMSK", FP_CTL(7), RFLT, 'X'},
+ {"MXCSR", FP_CTL(6), RFLT, 'X'},
+ {"MXCSRMASK", FP_CTL(7), RFLT, 'X'},
{"M0", FP_REG(0), RFLT, 'F'}, /* assumes double */
{"M1", FP_REG(1), RFLT, 'F'},
{"M2", FP_REG(2), RFLT, 'F'},
@@ -97,21 +95,22 @@ Reglist amd64reglist[] = {
Mach mamd64=
{
"amd64",
- MI386, /* machine type */ /* TO DO */
- amd64reglist, /* register list */
- REGSIZE, /* size of registers in bytes */
- FPREGSIZE, /* size of fp registers in bytes */
- "PC", /* name of PC */
- "SP", /* name of SP */
- 0, /* link register */
- "setSB", /* static base register name (bogus anyways) */
- 0, /* static base register value */
- 0x1000, /* page size */
- 0x80100000, /* kernel base */ /* TO DO: uvlong or vlong */
- 0, /* kernel text mask */
- 1, /* quantization of pc */
- 8, /* szaddr */
- 4, /* szreg */
- 4, /* szfloat */
- 8, /* szdouble */
+ MAMD64, /* machine type */
+ amd64reglist, /* register list */
+ REGSIZE, /* size of registers in bytes */
+ FPREGSIZE, /* size of fp registers in bytes */
+ "PC", /* name of PC */
+ "SP", /* name of SP */
+ 0, /* link register */
+ "setSB", /* static base register name (bogus anyways) */
+ 0, /* static base register value */
+ 0x1000, /* page size */
+ 0xFFFFFFFF80110000ULL, /* kernel base */
+ 0xFFFF800000000000ULL, /* kernel text mask */
+ 0x00007FFFFFFFF000ULL, /* user stack top */
+ 1, /* quantization of pc */
+ 8, /* szaddr */
+ 4, /* szreg */
+ 4, /* szfloat */
+ 8, /* szdouble */
};