Revert "Workaround for inexplicable fatal error on macOS."
authorTaylor R Campbell <campbell@mumble.net>
Wed, 18 Sep 2019 01:44:15 +0000 (01:44 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 18 Sep 2019 01:44:15 +0000 (01:44 +0000)
This reverts commit 689da8bf97534063f1800caf544a694de81d511e.

Will fix in a subsequent commit.

src/microcode/cmpintmd/x86-64.c

index 8edfd8baae2e81d366e9fb65cbdcf91ae8cd62cf..84b9f62140b44a675bbe13ba3bf3d87e43ef92fb 100644 (file)
@@ -224,26 +224,24 @@ write_uuo_target (insn_t * target, SCHEME_OBJECT * saddr)
      But if the target is a compiled closure pointing into a block
      somewhere else, the block may not have been relocated yet and so
      we don't know where the PC will be in the newspace.  */
-
-  // **** For unknown reasons this optimization doesn't work right on macOS.
-  // if ((((int64_t *) (newspace_to_tospace (target)))[-1]) == 0)
-  //   {
-  //     ptrdiff_t jmprel32_offset = (target - (&addr[15]));
-  //     if ((INT32_MIN <= jmprel32_offset) && (jmprel32_offset <= INT32_MAX))
-  //   {
-  //     (addr[10]) = 0xe9;    /* JMP rel32 */
-  //     (* ((int32_t *) (&addr[11]))) = jmprel32_offset;
-  //   }
-  //     else
-  //   {
-  //     (addr[10]) = 0x48;    /* MOV RAX,imm64 */
-  //     (addr[11]) = 0xb8;
-  //     (* ((insn_t **) (&addr[12]))) = target;
-  //     (addr[20]) = 0xff;    /* JMP RAX */
-  //     (addr[21]) = 0xe0;
-  //   }
-  //   }
-  // else
+  if ((((int64_t *) (newspace_to_tospace (target)))[-1]) == 0)
+    {
+      ptrdiff_t jmprel32_offset = (target - (&addr[15]));
+      if ((INT32_MIN <= jmprel32_offset) && (jmprel32_offset <= INT32_MAX))
+       {
+         (addr[10]) = 0xe9;    /* JMP rel32 */
+         (* ((int32_t *) (&addr[11]))) = jmprel32_offset;
+       }
+      else
+       {
+         (addr[10]) = 0x48;    /* MOV RAX,imm64 */
+         (addr[11]) = 0xb8;
+         (* ((insn_t **) (&addr[12]))) = target;
+         (addr[20]) = 0xff;    /* JMP RAX */
+         (addr[21]) = 0xe0;
+       }
+    }
+  else
     {
       (addr[10]) = 0x48;       /* MOV RAX,-8(RCX) */
       (addr[11]) = 0x8b;