projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.31.22: improved SAP-{REF,SET}-* for x86-64
[sbcl.git]
/
src
/
runtime
/
win32-os.c
diff --git
a/src/runtime/win32-os.c
b/src/runtime/win32-os.c
index
e4620f8
..
32ff6d0
100644
(file)
--- a/
src/runtime/win32-os.c
+++ b/
src/runtime/win32-os.c
@@
-51,16
+51,6
@@
#include <sys/stat.h>
#include <unistd.h>
#include <sys/stat.h>
#include <unistd.h>
-/* KLUDGE: Avoid double definition of boolean by rpcndr.h included via
- * shlobj.h.
- *
- * FIXME: We should probably arrange to use the rpcndr.h boolean on Windows,
- * or get rid of our own boolean type.
- */
-#define boolean rpcndr_boolean
-#include <shlobj.h>
-#undef boolean
-
#include <math.h>
#include <float.h>
#include <math.h>
#include <float.h>
@@
-305,10
+295,6
@@
is_valid_lisp_addr(os_vm_address_t addr)
return 0;
}
return 0;
}
-/*
- * any OS-dependent special low-level handling for signals
- */
-
/* A tiny bit of interrupt.c state we want our paws on. */
extern boolean internal_errors_enabled;
/* A tiny bit of interrupt.c state we want our paws on. */
extern boolean internal_errors_enabled;
@@
-345,17
+331,19
@@
handle_exception(EXCEPTION_RECORD *exception_record,
}
if (exception_record->ExceptionCode == EXCEPTION_BREAKPOINT) {
}
if (exception_record->ExceptionCode == EXCEPTION_BREAKPOINT) {
- /* Pick off sigtrap case first. */
-
- extern void sigtrap_handler(int signal, siginfo_t *info, void *context);
- /*
- * Unlike some other operating systems, Win32 leaves EIP
- * pointing to the breakpoint instruction.
- */
+ unsigned char trap;
+ /* This is just for info in case the monitor wants to print an
+ * approximation. */
+ current_control_stack_pointer =
+ (lispobj *)*os_context_sp_addr(context);
+ /* Unlike some other operating systems, Win32 leaves EIP
+ * pointing to the breakpoint instruction. */
context->Eip++;
context->Eip++;
-
- sigtrap_handler(0, NULL, context);
-
+ /* Now EIP points just after the INT3 byte and aims at the
+ * 'kind' value (eg trap_Cerror). */
+ trap = *(unsigned char *)(*os_context_pc_addr(context));
+ handle_trap(context, trap);
+ /* Done, we're good to go! */
return ExceptionContinueExecution;
}
else if (exception_record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION &&
return ExceptionContinueExecution;
}
else if (exception_record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION &&
@@
-430,7
+418,7
@@
handle_exception(EXCEPTION_RECORD *exception_record,
_clearfp();
/* Call into lisp to handle things. */
_clearfp();
/* Call into lisp to handle things. */
- funcall2(SymbolFunction(HANDLE_WIN32_EXCEPTION), context_sap,
+ funcall2(StaticSymbolFunction(HANDLE_WIN32_EXCEPTION), context_sap,
exception_record_sap);
/* If Lisp doesn't nlx, we need to put things back. */
exception_record_sap);
/* If Lisp doesn't nlx, we need to put things back. */
@@
-457,7
+445,7
@@
handle_exception(EXCEPTION_RECORD *exception_record,
fflush(stderr);
fake_foreign_function_call(context);
fflush(stderr);
fake_foreign_function_call(context);
- lose("fake_foreign_function_call fell through");
+ lose("Exception too early in cold init, cannot continue.");
/* FIXME: WTF? How are we supposed to end up here? */
return ExceptionContinueSearch;
/* FIXME: WTF? How are we supposed to end up here? */
return ExceptionContinueSearch;
@@
-552,14
+540,9
@@
void scratch(void)
_get_osfhandle(0);
_pipe(0,0,0);
access(0,0);
_get_osfhandle(0);
_pipe(0,0,0);
access(0,0);
- acos(0);
- asin(0);
close(0);
close(0);
- cosh(0);
dup(0);
dup(0);
- hypot(0, 0);
isatty(0);
isatty(0);
- sinh(0);
strerror(42);
write(0, 0, 0);
RtlUnwind(0, 0, 0, 0);
strerror(42);
write(0, 0, 0);
RtlUnwind(0, 0, 0, 0);