Update of /cvsroot/sbcl/sbcl/src/runtime
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv15975/sbcl/src/runtime
Modified Files:
x86-64-darwin-os.c x86-darwin-os.c
Log Message:
1.0.19.33: Improved interrupt handling on darwin/x86[-64]
* Remove an obsolete race condition check in SIGBUS handling
on x86. Accesses to unmapped addresses should no longer result
in infinite loops.
* Now reserve a 256 byte (slightly more than that is actually safe
to use) zone just below SP for signal handlers to safely push
data in.
Index: x86-64-darwin-os.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-64-darwin-os.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- x86-64-darwin-os.c 9 Dec 2007 15:04:48 -0000 1.4
+++ x86-64-darwin-os.c 20 Aug 2008 21:16:46 -0000 1.5
@@ -359,6 +359,10 @@
backup_thread_state = thread_state;
open_stack_allocation(&thread_state);
+ /* Reserve a 256 byte zone for signal handlers
+ * to use on the interrupted thread stack.
+ */
+ stack_allocate(&thread_state, 256);
/* Save thread state */
target_thread_state =
@@ -399,6 +403,7 @@
addr < undefined_alien_address + os_vm_page_size) {
backup_thread_state = thread_state;
open_stack_allocation(&thread_state);
+ stack_allocate(&thread_state, 256);
/* Save thread state */
target_thread_state =
@@ -428,6 +433,7 @@
backup_thread_state = thread_state;
open_stack_allocation(&thread_state);
+ stack_allocate(&thread_state, 256);
/* Save thread state */
target_thread_state =
@@ -504,6 +510,7 @@
backup_thread_state = thread_state;
open_stack_allocation(&thread_state);
+ stack_allocate(&thread_state, 256);
/* Save thread state */
target_thread_state =
Index: x86-darwin-os.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-darwin-os.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- x86-darwin-os.c 9 Dec 2007 15:04:48 -0000 1.11
+++ x86-darwin-os.c 20 Aug 2008 21:16:46 -0000 1.12
@@ -312,6 +312,7 @@
/* Initialize the new state */
new_state = *thread_state;
open_stack_allocation(&new_state);
+ stack_allocate(&new_state, 256);
/* Save old state */
save_thread_state = (x86_thread_state32_t *)stack_allocate(&new_state, sizeof(*save_thread_state));
*save_thread_state = *thread_state;
@@ -453,27 +454,6 @@
protect_control_stack_return_guard_page_thread(0, th);
break;
}
- /* Get vm_region info */
- region_addr = (vm_address_t)code_vector[1];
- info_count = VM_REGION_BASIC_INFO_COUNT;
- if ((ret = vm_region(mach_task_self(),
- ®ion_addr,
- ®ion_size,
- VM_REGION_BASIC_INFO,
- (vm_region_info_t)®ion_info,
- &info_count,
- ®ion_name)))
- lose("vm_region (VM_REGION_BASIC_INFO) failed failed %d\n", ret);
- /* Check if still protected */
- if ((region_info.protection & OS_VM_PROT_ALL) == 0) {
- /* KLUDGE:
- * If two threads fault on the same page, the protection
- * is cleared as the first thread runs memory_fault_handler.
- * Grep for "not marked as write-protected" in gencgc.c
- */
- ret = KERN_SUCCESS;
- break;
- }
/* Regular memory fault */
handler = memory_fault_handler;
break;
|