summaryrefslogtreecommitdiff
path: root/debian/patches/sysenter0010-fix-error-handling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/sysenter0010-fix-error-handling.patch')
-rw-r--r--debian/patches/sysenter0010-fix-error-handling.patch76
1 files changed, 0 insertions, 76 deletions
diff --git a/debian/patches/sysenter0010-fix-error-handling.patch b/debian/patches/sysenter0010-fix-error-handling.patch
deleted file mode 100644
index 53e4681..0000000
--- a/debian/patches/sysenter0010-fix-error-handling.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 56c1cfd4797af7367c5d830d5125baa75d4f0bdb Mon Sep 17 00:00:00 2001
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Tue, 5 May 2015 21:25:58 +0200
-Subject: [PATCH gnumach 10/10] fix error handling
-
----
- i386/i386/locore.S | 38 ++++++++++++++++++++++++++++----------
- 1 file changed, 28 insertions(+), 10 deletions(-)
-
-diff --git a/i386/i386/locore.S b/i386/i386/locore.S
-index 0d08be5..d8241a7 100644
---- a/i386/i386/locore.S
-+++ b/i386/i386/locore.S
-@@ -1305,11 +1305,12 @@ ENTRY(sysenter_entry)
- xchgl %ebx, %esp /* switch to kernel stack */
- /* %ebx points to user registers */
- negl %eax /* get system call number */
-- /* xxx sysenter_mach_call_range */
-- jl mach_call_range /* out of range if it was positive */
-- cmpl EXT(mach_trap_count),%eax /* check system call table bounds */
-- /* xxx sysenter_mach_call_range */
-- jg mach_call_range /* error if out of range */
-+ jl sysenter_mach_call_range
-+ /* out of range if it was positive */
-+ cmpl EXT(mach_trap_count),%eax
-+ /* check system call table bounds */
-+ jg sysenter_mach_call_range
-+ /* error if out of range */
-
- shll $4,%eax /* manual indexing */
- movl EXT(mach_trap_table)(%eax),%ecx
-@@ -1339,6 +1340,7 @@ se_args_5plus:
-
- movl $USER_DS,%edx /* use user data segment for accesses */
- mov %dx,%fs
-+ movl %esp,%edx /* save kernel ESP for error recovery */
-
- 0: subl $4,%esi
- RECOVER(sysenter_mach_call_addr_push)
-@@ -1370,12 +1372,28 @@ return_from_sysenter: /* return here */
- sti /* xxx: sti/cli where ? */
- sysexit
-
-+/*
-+ * Address out of range. Change to page fault.
-+ * %esi holds failing address.
-+ */
- sysenter_mach_call_addr_push:
-- movl %ebx,%esp /* clean parameters from stack */
-- /* xxx signal page-fault */
-- jmp sysenter_mach_call_addr_push
--#undef SE_STACK_POINTER
--#undef SE_RETURN_ADDRESS
-+ movl %edx,%esp /* clean parameters from stack */
-+ movl %esi,R_CR2(%ebx) /* set fault address */
-+ movl $(T_PAGE_FAULT),R_TRAPNO(%ebx)
-+ /* set page-fault trap */
-+ movl $(T_PF_USER),R_ERR(%ebx)
-+ /* set error code - read user space */
-+ jmp _take_trap /* treat as a trap */
-+
-+/*
-+ * System call out of range. Treat as invalid-instruction trap.
-+ * (? general protection?)
-+ */
-+sysenter_mach_call_range:
-+ movl $(T_INVALID_OPCODE),R_TRAPNO(%ebx)
-+ /* set invalid-operation trap */
-+ movl $0,R_ERR(%ebx) /* clear error code */
-+ jmp _take_trap /* treat as a trap */
-
- .data
- DATA(cpu_features)
---
-2.1.4
-