diff options
author | jake <jake@FreeBSD.org> | 2002-10-22 18:03:15 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2002-10-22 18:03:15 +0000 |
commit | 9130753f7bfb5024993a17fbec7fac7020574e06 (patch) | |
tree | e96edf10490992bf3efbc52e79111e937298e7cb /sys/sparc64/include/reg.h | |
parent | 6856844ba372beec28c7e52c4002703a51c757e2 (diff) | |
download | FreeBSD-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.h | 54 |
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 |