WITH-SLOTS usages during compilation.
* bug fix: SB-C::CLASS-INFO now prints correctly (lp#514762)
* enhancement: Can now build with ud2 instead of int3 as trap instruction on
- all x86oid platforms (except win32) with :UD2-BREAKPOINTS target feature.
+ all x86oid platforms with :UD2-BREAKPOINTS target feature.
* bug fix: Breakpoints now work when using ud2 instead of int3 as trap
instruction (tested on x86oid linux with ud2-breakpoints).
(macrolet ((define-fasl-format-features ()
(let (;; master value for *F-P-A-F-F*
- (fpaff '(:sb-thread :sb-package-locks :sb-unicode :gencgc)))
+ (fpaff '(:sb-thread :sb-package-locks :sb-unicode :gencgc :ud2-breakpoints)))
`(progn
;; a list of *(SHEBANG-)FEATURES* flags which affect
;; binary compatibility, i.e. which must be the same
/* A tiny bit of interrupt.c state we want our paws on. */
extern boolean internal_errors_enabled;
+#ifdef LISP_FEATURE_UD2_BREAKPOINTS
+#define IS_TRAP_EXCEPTION(exception_record, context) \
+ (((exception_record)->ExceptionCode == EXCEPTION_ILLEGAL_INSTRUCTION) && \
+ (((unsigned short *)((context)->Eip))[0] == 0x0b0f))
+#define TRAP_CODE_WIDTH 2
+#else
+#define IS_TRAP_EXCEPTION(exception_record, context) \
+ ((exception_record)->ExceptionCode == EXCEPTION_BREAKPOINT)
+#define TRAP_CODE_WIDTH 1
+#endif
+
/*
* A good explanation of the exception handling semantics is
* http://win32assembly.online.fr/Exceptionhandling.html .
return ExceptionContinueExecution;
}
- if (exception_record->ExceptionCode == EXCEPTION_BREAKPOINT) {
+ if (IS_TRAP_EXCEPTION(exception_record, context)) {
unsigned char trap;
/* This is just for info in case the monitor wants to print an
* approximation. */
(lispobj *)*os_context_sp_addr(context);
/* Unlike some other operating systems, Win32 leaves EIP
* pointing to the breakpoint instruction. */
- context->Eip++;
+ context->Eip += TRAP_CODE_WIDTH;
/* 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));
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.36.9"
+"1.0.36.10"