[PATCH] ntdll: Fix exception tests on Mac OS.

Charles Davis cdavis at mymail.mines.edu
Tue Nov 16 18:40:14 CST 2010


---
 dlls/ntdll/process.c         |   10 ++++++++++
 dlls/ntdll/tests/exception.c |    2 +-
 2 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
index b9b81ca..d127e42 100644
--- a/dlls/ntdll/process.c
+++ b/dlls/ntdll/process.c
@@ -37,7 +37,17 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
 
+#if defined(__APPLE__) && defined(__i386__)
+/* On 32-bit Mac OS when the processor supports no-execute protection,
+ * only stacks are protected for some reason. All other data is not
+ * protected. Even if you clear PROT_EXEC with mprotect, the kernel
+ * will let you execute any code/data in that memory. So, it's point-
+ * less to enable DEP here.
+ */
+static ULONG execute_flags = MEM_EXECUTE_OPTION_ENABLE | MEM_EXECUTE_OPTION_PERMANENT;
+#else
 static ULONG execute_flags = MEM_EXECUTE_OPTION_DISABLE;
+#endif
 
 /*
  *	Process object
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index 386c5a6..326cb77 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -678,7 +678,7 @@ static void test_exceptions(void)
     /* test single stepping over hardware breakpoint */
     memset(&ctx, 0, sizeof(ctx));
     ctx.Dr0 = (DWORD) code_mem;  /* set hw bp on first nop */
-    ctx.Dr7 = 3;
+    ctx.Dr7 = 1;
     ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS;
     res = pNtSetContextThread( GetCurrentThread(), &ctx);
     ok( res == STATUS_SUCCESS, "NtSetContextThread faild with %x\n", res);
-- 
1.7.4.rc3


--------------090103010009040804080803--



More information about the wine-devel mailing list