[Git][cmucl/cmucl][issue-97-define-ud2-inst] Clean up comment and impl
Raymond Toy
gitlab at common-lisp.net
Wed Apr 14 05:17:51 UTC 2021
Raymond Toy pushed to branch issue-97-define-ud2-inst at cmucl / cmucl
Commits:
5ad11929 by Raymond Toy at 2021-04-13T22:16:26-07:00
Clean up comment and impl
In the description of the ud1 format, mention why we can't use
ext-reg-reg/mem even though it looks very much like what the ud1
format is.
In x86-arch.c, fix typo in arch_install_breakpoint that was setting
the result incorrectly (and caused a compiler warning).
- - - - -
2 changed files:
- src/compiler/x86/insts.lisp
- src/lisp/x86-arch.c
Changes:
=====================================
src/compiler/x86/insts.lisp
=====================================
@@ -2064,9 +2064,13 @@
;; The UD1 instruction. The mod bits of the mod r/m byte MUST be #b11
;; so that the reg/mem field is actually a register. This is a hack
-;; to allow us to print out the reg/mem reg as a 32-bit reg. Using
-;; just reg/mem, the register sometimes printed out as a byte reg and
-;; I (toy.raymond) don't know why.
+;; to allow us to print out the reg/mem reg as a 32-bit reg.
+;;
+;; While the instruction looks like an ext-reg-reg/mem format with
+;; fixed width value of 1, it isn't because we need to disassemble the
+;; reg/mem field as a 32-bit reg. ext-reg-reg/mem needs a width prefix
+;; byte to specify that, and we definitely don't want that. Hence,
+;; use a special instruction format for the UD1 instruction.
(disassem:define-instruction-format
(ud1 24 :default-printer '(:name :tab reg ", " reg/mem))
(prefix :field (byte 8 0) :value #b00001111)
=====================================
src/lisp/x86-arch.c
=====================================
@@ -220,13 +220,13 @@ arch_set_pseudo_atomic_interrupted(os_context_t * context)
unsigned long
arch_install_breakpoint(void *pc)
{
- unsigned long result = (unsigned char *) pc;
+ unsigned long result = *(unsigned char *) pc;
+ *(unsigned char *) pc = BREAKPOINT_INST;
DPRINTF(debug_handlers,
(stderr, "arch_install_breakpoint at %p, old code = 0x%lx\n",
pc, result));
- *(unsigned char *) pc = BREAKPOINT_INST;
return result;
}
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/5ad119295e582f11d709a28a0187776653d61db0
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/5ad119295e582f11d709a28a0187776653d61db0
You're receiving this email because of your account on gitlab.common-lisp.net.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20210414/56e45d28/attachment-0001.html>
More information about the cmucl-cvs
mailing list