Fix units for cc_entry_to_block_offset/cc_return_to_block_offset.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 25 Aug 2019 15:09:11 +0000 (15:09 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 25 Aug 2019 19:11:54 +0000 (19:11 +0000)
It would make more sense for the compiler to generate debug data
labels in instruction units, but this is a simpler change and is what
was done in the past on machines like mips with 32-bit aligned
instructions.

aarch64 now has functioning debug data!

src/microcode/cmpint.c

index fad1583d505bdce531d0df0fad4179f87d45b72d..8d93fdb23b7cc7261de6c28250f5c5021cb824a4 100644 (file)
@@ -1926,18 +1926,23 @@ cc_block_environment (SCHEME_OBJECT block)
   return (VECTOR_REF (block, ((VECTOR_LENGTH (block)) - 1)));
 }
 
+/* Returns offsets of entry points from start of block in byte units
+   (not instruction units -- the debug data (.bci files) generated by
+   the compiler specify address units).  */
+
 unsigned long
 cc_entry_to_block_offset (SCHEME_OBJECT entry)
 {
-  return ((CC_ENTRY_ADDRESS (entry))
-         - ((insn_t *) (cc_entry_to_block_address (entry))));
+  return (((const uint8_t *) (CC_ENTRY_ADDRESS (entry)))
+         - ((const uint8_t *) (cc_entry_to_block_address (entry))));
 }
 
 unsigned long
 cc_return_to_block_offset (SCHEME_OBJECT ret)
 {
-  return ((CC_RETURN_ADDRESS_TO_ENTRY_ADDRESS (CC_RETURN_ADDRESS (ret)))
-         - ((insn_t *) (cc_return_to_block_address (ret))));
+  return (((const uint8_t *)
+          (CC_RETURN_ADDRESS_TO_ENTRY_ADDRESS (CC_RETURN_ADDRESS (ret))))
+         - ((const uint8_t *) (cc_return_to_block_address (ret))));
 }
 
 bool