Commit d8c463ea authored by Raymond Toy's avatar Raymond Toy
Browse files

write-long writes longs

Make write-long actually write long values.  This is 32-bit for 32-bit
archs, and 64-bit for 64-bit archs.  This will eventually be needed to
write 64-bit heap addresses and descriptors eventually.

Adjust load_core_file in coreparse.c to read longs as expected.  This
basically reverts all changes in coreparge.c back to the master
version.
parent 6be8c6f7
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2871,6 +2871,7 @@
(defparameter initial-function-entry-type-code 3863)
(defparameter end-entry-type-code 3840)

#+nil
(defun write-long (num)
  (ecase (c:backend-byte-order c:*backend*)
    (:little-endian
@@ -2880,6 +2881,15 @@
     (dotimes (i 4)
       (write-byte (ldb (byte 8 (* (- 3 i) 8)) num) *core-file*)))))

(defun write-long (num)
  (ecase (c:backend-byte-order c:*backend*)
    (:little-endian
     (dotimes (i vm:word-bytes)
       (write-byte (ldb (byte 8 (* i 8)) num) *core-file*)))
    (:big-endian
     (dotimes (i vm:word-bytes)
       (write-byte (ldb (byte 8 (* (- vm:word-bytes 1 i) 8)) num) *core-file*)))))


(defun advance-to-page ()
  (force-output *core-file*)
+4 −4
Original line number Diff line number Diff line
@@ -95,10 +95,10 @@ load_core_file(const char *file, fpu_mode_t* fpu_type)
{
    int fd = open(file, O_RDONLY), count;

#if !(defined(alpha) || defined(__x86_64) || defined(__sparcv9))
#if !(defined(alpha) || defined(__x86_64))
    long header[CORE_PAGESIZE / sizeof(long)], val, len, *ptr;
#else
    uint32_t header[CORE_PAGESIZE / sizeof(uint32_t)], val, len, *ptr;
    u32 header[CORE_PAGESIZE / sizeof(u32)], val, len, *ptr;
#endif
    lispobj initial_function = NIL;

@@ -154,10 +154,10 @@ load_core_file(const char *file, fpu_mode_t* fpu_type)

	  case CORE_NDIRECTORY:
	      process_directory(fd, ptr,
#if !(defined(alpha) || defined(__x86_64) || defined(__sparcv9))
#if !(defined(alpha) || defined(__x86_64))
				(len - 2) / (sizeof(struct ndir_entry) / sizeof(long)));
#else
				(len - 2) / (sizeof(struct ndir_entry) / sizeof(uint32_t)));
				(len - 2) / (sizeof(struct ndir_entry) / sizeof(u32)));
#endif
	      break;