[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