summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/include/reg.h
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2002-10-22 18:03:15 +0000
committerjake <jake@FreeBSD.org>2002-10-22 18:03:15 +0000
commit9130753f7bfb5024993a17fbec7fac7020574e06 (patch)
treee96edf10490992bf3efbc52e79111e937298e7cb /sys/sparc64/include/reg.h
parent6856844ba372beec28c7e52c4002703a51c757e2 (diff)
downloadFreeBSD-src-9130753f7bfb5024993a17fbec7fac7020574e06.zip
FreeBSD-src-9130753f7bfb5024993a17fbec7fac7020574e06.tar.gz
- Expand struct trapframe to 256 bytes, make all fields fixed width and the
same size. Add some fields that previously overlapped with something else or were missing. - Make struct regs and struct mcontext (minus floating point) the same as struct trapframe so converting between them is easy (null). - Add space for saving floating point state to struct mcontext. This requires that it be 64 byte aligned. - Add assertions that none of these structures change size, as they are part of the ABI. - Remove some dead code in sendsig(). - Save and restore %gsr in struct trapframe. Remember to restore %fsr. - Add some comments to exception.S.
Diffstat (limited to 'sys/sparc64/include/reg.h')
-rw-r--r--sys/sparc64/include/reg.h54
1 files changed, 43 insertions, 11 deletions
diff --git a/sys/sparc64/include/reg.h b/sys/sparc64/include/reg.h
index 1878c43..3cd1b05 100644
--- a/sys/sparc64/include/reg.h
+++ b/sys/sparc64/include/reg.h
@@ -43,31 +43,63 @@
/*
* Register set accessible via /proc/$pid/regs and PT_{SET,GET}REGS.
+ *
+ * NOTE: DO NOT CHANGE THESE STRUCTURES. The offsets of the fields are
+ * hardcoded in gdb. Changing them and recompiling doesn't help, the
+ * constants in nm-fbsd.h must also be updated.
*/
+
+struct reg32 {
+ uint32_t r_global[8];
+ uint32_t r_out[8];
+ uint32_t r_npc;
+ uint32_t r_pc;
+ uint32_t r_psr;
+ uint32_t r_wim;
+ uint32_t r_pad[4];
+};
+
struct reg {
- u_long r_tstate;
- u_long r_pc;
- u_long r_npc;
- u_int r_y;
- u_long r_global[8];
- u_long r_out[8];
- u_long r_local[8];
- u_long r_in[8];
+ uint64_t r_global[8];
+ uint64_t r_out[8];
+ uint64_t r_fprs;
+ uint64_t r_fsr;
+ uint64_t r_gsr;
+ uint64_t r_level;
+ uint64_t r_pil;
+ uint64_t r_sfar;
+ uint64_t r_sfsr;
+ uint64_t r_tar;
+ uint64_t r_tnpc;
+ uint64_t r_tpc;
+ uint64_t r_tstate;
+ uint64_t r_type;
+ uint64_t r_y;
+ uint64_t r_wstate;
+ uint64_t r_pad[2];
};
/*
* Register set accessible via /proc/$pid/fpregs.
*/
+
+struct fpreg32 {
+ uint32_t fr_regs[32];
+ uint32_t fr_fsr;
+};
+
struct fpreg {
- u_int fr_regs[64]; /* our view is 64 32-bit registers */
- u_long fr_fsr; /* %fsr */
- u_long fr_fprs;
+ uint32_t fr_regs[64]; /* our view is 64 32-bit registers */
+ int64_t fr_fsr; /* %fsr */
+ int32_t fr_gsr; /* %gsr */
+ int32_t fr_pad[1];
};
/*
* Register set accessible via /proc/$pid/dbregs.
*/
struct dbreg {
+ int dummy;
};
#ifdef _KERNEL
OpenPOWER on IntegriCloud