Raymond Toy pushed to branch sparc64-dev at cmucl / cmucl
Commits: d8c463ea by Raymond Toy at 2016-12-29T09:45:41-08:00 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.
- - - - -
2 changed files:
- src/compiler/generic/new-genesis.lisp - src/lisp/coreparse.c
Changes:
===================================== src/compiler/generic/new-genesis.lisp ===================================== --- a/src/compiler/generic/new-genesis.lisp +++ b/src/compiler/generic/new-genesis.lisp @@ -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*)
===================================== src/lisp/coreparse.c ===================================== --- a/src/lisp/coreparse.c +++ b/src/lisp/coreparse.c @@ -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;
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/d8c463eab4840d1c6a90fcc675...