aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Rabson <dfr@FreeBSD.org>2001-02-02 10:20:30 +0000
committerDoug Rabson <dfr@FreeBSD.org>2001-02-02 10:20:30 +0000
commit294156a7ffd32f01b83ee84926e899d111e32883 (patch)
tree7afe86d4b7ac68847b5c55d7001e7b815a479419
parent6548daa8aae35970bc16343f7d33bc83cb65f2e9 (diff)
downloadsrc-294156a7ffd32f01b83ee84926e899d111e32883.tar.gz
src-294156a7ffd32f01b83ee84926e899d111e32883.zip
* Move exception_return to exception.s which is a more logical home for it.
* Optimise the return path for syscalls so that they only restore a minimal set of registers instead of performing a full exception_return. A new flag in the trapframe indicates that the frame only holds partial state. When it is necessary to perform a full state restore (e.g. after an execve or signal), the flag is cleared to force a full restore.
Notes
Notes: svn path=/head/; revision=71925
-rw-r--r--sys/alpha/include/frame.h14
1 files changed, 6 insertions, 8 deletions
diff --git a/sys/alpha/include/frame.h b/sys/alpha/include/frame.h
index 6d8cceb20650..7b25696d841d 100644
--- a/sys/alpha/include/frame.h
+++ b/sys/alpha/include/frame.h
@@ -74,18 +74,16 @@
#define FRAME_T12 24
#define FRAME_AT 25
#define FRAME_SP 26
+#define FRAME_FLAGS 27
+#define FRAME_FLAGS_SYSCALL 1 /* partial frame for syscalls */
/* The following are set only when a signal is to be delivered to a process. */
-#define FRAME_TRAPARG_A0 27
-#define FRAME_TRAPARG_A1 28
-#define FRAME_TRAPARG_A2 29
-/* this is a flag area to see whether we need to restore all registers */
-#define FRAME_FLAGS 30
+#define FRAME_TRAPARG_A0 28
+#define FRAME_TRAPARG_A1 29
+#define FRAME_TRAPARG_A2 30
-#define FRAME_SW_SIZE (FRAME_FLAGS + 1)
+#define FRAME_SW_SIZE (FRAME_TRAPARG_A2 + 1)
#define FRAME_HW_OFFSET FRAME_SW_SIZE
-#define FRAME_FLAGS_SYSCALL 0x1
-
#define FRAME_PS (FRAME_HW_OFFSET + ALPHA_HWFRAME_PS)
#define FRAME_PC (FRAME_HW_OFFSET + ALPHA_HWFRAME_PC)
#define FRAME_GP (FRAME_HW_OFFSET + ALPHA_HWFRAME_GP)