-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit abe54ff
Showing
46 changed files
with
1,067,851 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
<h1>Patches contributed by University of Massachusetts at Lowell</h1><hr><pre>commit 581141cb4b10ebd865dcb7b80f5e712e2def5408 | ||
Author: Albert D. Cahalan <acahalan@cs.uml.edu> | ||
Date: Tue Feb 14 13:53:20 2006 -0800 | ||
|
||
[PATCH] x86: document sysenter path | ||
|
||
This path isn't obvious. It looks as if the kernel will be taking three | ||
args from the user stack, but it only takes one from there. | ||
|
||
Signed-off-by: Albert Cahalan <acahalan@gmail.com> | ||
Signed-off-by: Andrew Morton <akpm@osdl.org> | ||
Signed-off-by: Linus Torvalds <torvalds@osdl.org> | ||
|
||
diff --git a/arch/i386/kernel/vsyscall-sysenter.S b/arch/i386/kernel/vsyscall-sysenter.S | ||
index 4daefb2ec1b2..76b728159403 100644 | ||
--- a/arch/i386/kernel/vsyscall-sysenter.S | ||
+++ b/arch/i386/kernel/vsyscall-sysenter.S | ||
@@ -7,6 +7,21 @@ | ||
* for details. | ||
*/ | ||
|
||
+/* | ||
+ * The caller puts arg2 in %ecx, which gets pushed. The kernel will use | ||
+ * %ecx itself for arg2. The pushing is because the sysexit instruction | ||
+ * (found in entry.S) requires that we clobber %ecx with the desired %esp. | ||
+ * User code might expect that %ecx is unclobbered though, as it would be | ||
+ * for returning via the iret instruction, so we must push and pop. | ||
+ * | ||
+ * The caller puts arg3 in %edx, which the sysexit instruction requires | ||
+ * for %eip. Thus, exactly as for arg2, we must push and pop. | ||
+ * | ||
+ * Arg6 is different. The caller puts arg6 in %ebp. Since the sysenter | ||
+ * instruction clobbers %esp, the user's %esp won't even survive entry | ||
+ * into the kernel. We store %esp in %ebp. Code in entry.S must fetch | ||
+ * arg6 from the stack. | ||
+ */ | ||
.text | ||
.globl __kernel_vsyscall | ||
.type __kernel_vsyscall,@function</pre><hr> |
Oops, something went wrong.