[Git][cmucl/cmucl][sparc64-dev] write-long writes longs
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...
participants (1)
-
Raymond Toy