There has been much correspondence on this issue. Let me summarize
where I think things are.
I am working on a large lisp application. Previously the application was
built in Allegro CL. The basic application is in the 50 to 100Mbyte range.
consisting of a mixture of code and statically allocated data structures.
Customized versions grow to multiple hundreds of Mbyte with the addition
of more code and data structures.
The application is being ported to CMUCL. All work is currently on the
sparc version of CMUCL. We started in CMUCL 18e.
Things kind of worked. We had some problems related to saving core files.
We decided to check out the 19a snapshots to see if things got better. We
have tried the 2003_12 and 2004_04 snapshots.
We have run into a collection of potentially related problems apparently
orbiting around saving large lisp images.
1.
In 18e, whenever we tried saving with :purify t (the default), cmucl dumped
core. We progressed by just specifying :purify nil. This appeared to work
fine in 18e and 2003_12. In 2004_04, this approach saves a lisp core
but when you start the core, you get a div by 0 error before lisp even has
a chance to print the herald. The behavior
seems to be related to the size of the image you are saving.
We have duplicated this problem outside the context of our application. We
load up 40 to 50 Mbytes of dummy code and then do ext:save-lisp :purify nil.
The resulting core gets a div by 0 when restarting. I have attached the test program
and a transcript. (dummy-file-maker.lisp)
2.
In 18e, using purify fails on our application Ditto in 2003_12.
Ditto in 2004_04. The failure mode is a core dump. The heap size
is around 53Mbyte.
I am not an expert
in gdb but my simple attempts at debugging seem to indicate that lisp
was in function ptrans_vector in file purify.c when it crashed. I have attached
a transcript. (purify-gdb-session.text)
I have not yet been able to duplicate the core dump failure mode outside
of the context of our application.
3.
Related to the purify problem, I attempted to duplicate the purify problem
outside the context of our application. I created a program that just consed
up a bunch of arrays and then tried to do a purify. There is some fog here. In
2003_12, with a particular set of size parameters you get a segmentation violation.
In 2004_04, this same test worked fine. If in 2004_04, you up the size parameters
a bit, then you again get a segmentation violation. There is some indication that
this may be due to a hard upper bound of 128Mbyte in the size of static space. I have
attached the test programs and transcript. (purify-test.lisp)
I am not sure if problems 2 and 3 are really the same. Problem 2 appears to be a seg
fault that causes the core dump. However, the heap size is well below any 128Mbyte
limit.
-bill-
-
Raymond Toy wrote:
> >>>>> "William" == William Brew <[EMAIL PROTECTED]> writes:
>
> William> To demonstrate the purify problem, I just increased the size numbers in
> William> the original test. To demonstrated the non-purify problem, I wrote a
>
> I raised *block-size* to 2048, and I now get errors during purify.
> I'm pretty sure the error is because the static space is 128 MB, and
> we are running out of static space. This can be easily increased (but
> not at run-time) to 256 MB, but anymore will require rearranging the
> spaces.
>
> How much static space do you really have? Large static spaces make
> GCs significantly longer because the static space is always GCed.
>
> William> the original test. To demonstrated the non-purify problem, I wrote a
> William> program that writes a bunch of dummy functions to files. You then
> William> compile and load these files, save (without purify) and then the saved
> core
> William> will not restart as described previously.
>
> Can you send the test code for this?
>
> Ray
-- Attached file included as plaintext by Listar --
-- File: dummy-file-maker.lisp
(in-package "CL-USER")
#||
Demonstrates problem with saving core files with :purify nil
1. Load this file in a 2004_04 lisp
2. do (write-dummy-file-set 250 100)
- this writes 250 files each with 100 dummy definitions
3. do (load "/tmp/dummy-files/aaa-load-files.lisp")
- will compile the first time -- takes a while
4. do (ext:save-lisp "/tmp/xxx-not-purified" :purify nil)
5. restart the lisp with -core "/tmp/xxx-not-purified"
- gives a div by 0 error before even printing the herald.
A transcript of the above is at the end of this file.
||#
;;;----------------------------------------------------------------------
(defparameter *dummy-file-directory* "/tmp/dummy-files/")
(defun write-dummy-file-set (n-count m-count)
; (when (yes-or-no-p "Remove existing dummy files? ")
; (run-shell-command (format nil "/bin/rm -f ~a*" *dummy-file-directory*)))
(write-dummy-files n-count m-count)
(write-dummy-file-loader n-count m-count))
;;;----------------------------------------------------------------------
(defparameter *load-fn-text*
"(defun maybe-compile-and-load (file)
(let* ((source-date (file-write-date file))
(compiled-file (make-pathname :defaults file :type \"sparcf\"))
(compiled-date (file-write-date compiled-file)))
(when (or (null compiled-date)
(>= source-date compiled-date))
(compile-file file))
(load compiled-file)))
")
(defun write-dummy-file-loader (n-count m-count)
(with-open-file (str (format nil "~aaaa-load-files.lisp"
*dummy-file-directory*)
:direction :output
:if-exists :supersede)
(format str "(in-package \"CL-USER\")~2%")
(format str "~3%~a~3%" *load-fn-text*)
(dotimes (n n-count)
(format str "(maybe-compile-and-load ~s)~%" (dummy-file-name n)))))
;;;----------------------------------------------------------------------
(defun write-dummy-files (n-count m-count)
(dotimes (n n-count)
(write-dummy-file n m-count)))
(defun write-dummy-file (n m-count)
(let ((file-name (dummy-file-name n)))
(format t "File ~4,'0d~%" n)
(with-open-file (str file-name
:direction :output
:if-exists :supersede)
(format str "(in-package \"CL-USER\")~2%")
(dotimes (m m-count)
(write-dummy-def str n m)))))
(defun dummy-file-name (n)
(format nil "~afile-~4,'0d.lisp" *dummy-file-directory* n))
;;;----------------------------------------------------------------------
;;; meaningless code
(defparameter *dummy-text*
"
(defvar *var-~4,'0d-~4,'0d* '(a b c d))
(defun fun-~4,'0d-~4,'0d (arg1 arg2 arg3 arg4 fn)
(let* ((local1 (1+ arg1))
(local2 (1+ arg2))
(local3 (1+ arg3))
(local4 (1+ arg4))
(da-list (list local1 local2 local3 local4))
(answer '()))
(dolist (el1 da-list)
(when (= el1 (funcall fn el1))
(push el1 answer)))
(append *var-~4,'0d-~4,'0d* answer)))
")
(defun write-dummy-def (str n m)
(format str *dummy-text* n m n m n m))
;;;----------------------------------------------------------------------
#||
otwb-dev bbrew 33> /org/develop/reasoning/lisp/cmucl/ss2004-04/bin/lisp
CMU Common Lisp snapshot 2004-04, running on otwb-dev
With core:
/net/dlsun3004/private/projects/org/develop/CMUCL/ss2004_04/lib/cmucl/lib/lisp.core
Dumped on: Fri, 2004-04-02 09:58:31-08:00 on kenny2
See <http://www.cons.org/cmucl/> for support information.
Loaded subsystems:
Python 1.1, target UltraSparc/Solaris 7
CLOS based on Gerd's PCL 2004/01/09 04:34:17
* (load "/tmp/dummy-files/aaa-load-files.lisp")
; Loading #p"/tmp/dummy-files/aaa-load-files.lisp".
;; Loading #p"/tmp/dummy-files/file-0000.sparcf".
;; Loading #p"/tmp/dummy-files/file-0001.sparcf".
;; Loading #p"/tmp/dummy-files/file-0002.sparcf".
;; Loading #p"/tmp/dummy-files/file-0003.sparcf".
;; Loading #p"/tmp/dummy-files/file-0004.sparcf".
;; Loading #p"/tmp/dummy-files/file-0005.sparcf".
;; Loading #p"/tmp/dummy-files/file-0006.sparcf".
;; Loading #p"/tmp/dummy-files/file-0007.sparcf".
;; Loading #p"/tmp/dummy-files/file-0008.sparcf".
;; Loading #p"/tmp/dummy-files/file-0009.sparcf".
;; Loading #p"/tmp/dummy-files/file-0010.sparcf".
;; Loading #p"/tmp/dummy-files/file-0011.sparcf".
;; Loading #p"/tmp/dummy-files/file-0012.sparcf".
;; Loading #p"/tmp/dummy-files/file-0013.sparcf".
;; Loading #p"/tmp/dummy-files/file-0014.sparcf".
;; Loading #p"/tmp/dummy-files/file-0015.sparcf".
;; Loading #p"/tmp/dummy-files/file-0016.sparcf".
;; Loading #p"/tmp/dummy-files/file-0017.sparcf".
;; Loading #p"/tmp/dummy-files/file-0018.sparcf".
;; Loading #p"/tmp/dummy-files/file-0019.sparcf".
;; Loading #p"/tmp/dummy-files/file-0020.sparcf".
;; Loading #p"/tmp/dummy-files/file-0021.sparcf".
;; Loading #p"/tmp/dummy-files/file-0022.sparcf".
;; Loading #p"/tmp/dummy-files/file-0023.sparcf".
;; Loading #p"/tmp/dummy-files/file-0024.sparcf".
;; Loading #p"/tmp/dummy-files/file-0025.sparcf".
;; Loading #p"/tmp/dummy-files/file-0026.sparcf".
;; Loading #p"/tmp/dummy-files/file-0027.sparcf".
;; Loading #p"/tmp/dummy-files/file-0028.sparcf".
;; Loading #p"/tmp/dummy-files/file-0029.sparcf".
;; Loading #p"/tmp/dummy-files/file-0030.sparcf".
;; Loading #p"/tmp/dummy-files/file-0031.sparcf".
;; Loading #p"/tmp/dummy-files/file-0032.sparcf".
;; Loading #p"/tmp/dummy-files/file-0033.sparcf".
;; Loading #p"/tmp/dummy-files/file-0034.sparcf".
;; Loading #p"/tmp/dummy-files/file-0035.sparcf".
;; Loading #p"/tmp/dummy-files/file-0036.sparcf".
;; Loading #p"/tmp/dummy-files/file-0037.sparcf".
;; Loading #p"/tmp/dummy-files/file-0038.sparcf".
;; Loading #p"/tmp/dummy-files/file-0039.sparcf".
;; Loading #p"/tmp/dummy-files/file-0040.sparcf".
;; Loading #p"/tmp/dummy-files/file-0041.sparcf".
;; Loading #p"/tmp/dummy-files/file-0042.sparcf".
;; Loading #p"/tmp/dummy-files/file-0043.sparcf".
;; Loading #p"/tmp/dummy-files/file-0044.sparcf".
;; Loading #p"/tmp/dummy-files/file-0045.sparcf".
;; Loading #p"/tmp/dummy-files/file-0046.sparcf".
;; Loading #p"/tmp/dummy-files/file-0047.sparcf".
;; Loading #p"/tmp/dummy-files/file-0048.sparcf".
; [GC threshold exceeded with 12,089,936 bytes in use. Commencing GC.]
; [GC completed with 8,548,912 bytes retained and 3,541,024 bytes freed.]
; [GC will next occur when at least 20,548,912 bytes are in use.]
;; Loading #p"/tmp/dummy-files/file-0049.sparcf".
;; Loading #p"/tmp/dummy-files/file-0050.sparcf".
;; Loading #p"/tmp/dummy-files/file-0051.sparcf".
;; Loading #p"/tmp/dummy-files/file-0052.sparcf".
;; Loading #p"/tmp/dummy-files/file-0053.sparcf".
;; Loading #p"/tmp/dummy-files/file-0054.sparcf".
;; Loading #p"/tmp/dummy-files/file-0055.sparcf".
;; Loading #p"/tmp/dummy-files/file-0056.sparcf".
;; Loading #p"/tmp/dummy-files/file-0057.sparcf".
;; Loading #p"/tmp/dummy-files/file-0058.sparcf".
;; Loading #p"/tmp/dummy-files/file-0059.sparcf".
;; Loading #p"/tmp/dummy-files/file-0060.sparcf".
;; Loading #p"/tmp/dummy-files/file-0061.sparcf".
;; Loading #p"/tmp/dummy-files/file-0062.sparcf".
;; Loading #p"/tmp/dummy-files/file-0063.sparcf".
;; Loading #p"/tmp/dummy-files/file-0064.sparcf".
;; Loading #p"/tmp/dummy-files/file-0065.sparcf".
;; Loading #p"/tmp/dummy-files/file-0066.sparcf".
;; Loading #p"/tmp/dummy-files/file-0067.sparcf".
;; Loading #p"/tmp/dummy-files/file-0068.sparcf".
;; Loading #p"/tmp/dummy-files/file-0069.sparcf".
;; Loading #p"/tmp/dummy-files/file-0070.sparcf".
;; Loading #p"/tmp/dummy-files/file-0071.sparcf".
;; Loading #p"/tmp/dummy-files/file-0072.sparcf".
;; Loading #p"/tmp/dummy-files/file-0073.sparcf".
;; Loading #p"/tmp/dummy-files/file-0074.sparcf".
;; Loading #p"/tmp/dummy-files/file-0075.sparcf".
;; Loading #p"/tmp/dummy-files/file-0076.sparcf".
;; Loading #p"/tmp/dummy-files/file-0077.sparcf".
;; Loading #p"/tmp/dummy-files/file-0078.sparcf".
;; Loading #p"/tmp/dummy-files/file-0079.sparcf".
;; Loading #p"/tmp/dummy-files/file-0080.sparcf".
;; Loading #p"/tmp/dummy-files/file-0081.sparcf".
;; Loading #p"/tmp/dummy-files/file-0082.sparcf".
;; Loading #p"/tmp/dummy-files/file-0083.sparcf".
;; Loading #p"/tmp/dummy-files/file-0084.sparcf".
;; Loading #p"/tmp/dummy-files/file-0085.sparcf".
;; Loading #p"/tmp/dummy-files/file-0086.sparcf".
;; Loading #p"/tmp/dummy-files/file-0087.sparcf".
;; Loading #p"/tmp/dummy-files/file-0088.sparcf".
;; Loading #p"/tmp/dummy-files/file-0089.sparcf".
;; Loading #p"/tmp/dummy-files/file-0090.sparcf".
;; Loading #p"/tmp/dummy-files/file-0091.sparcf".
;; Loading #p"/tmp/dummy-files/file-0092.sparcf".
;; Loading #p"/tmp/dummy-files/file-0093.sparcf".
;; Loading #p"/tmp/dummy-files/file-0094.sparcf".
;; Loading #p"/tmp/dummy-files/file-0095.sparcf".
;; Loading #p"/tmp/dummy-files/file-0096.sparcf".
;; Loading #p"/tmp/dummy-files/file-0097.sparcf".
; [GC threshold exceeded with 20,617,520 bytes in use. Commencing GC.]
; [GC completed with 17,228,688 bytes retained and 3,388,832 bytes freed.]
; [GC will next occur when at least 29,228,688 bytes are in use.]
;; Loading #p"/tmp/dummy-files/file-0098.sparcf".
;; Loading #p"/tmp/dummy-files/file-0099.sparcf".
;; Loading #p"/tmp/dummy-files/file-0100.sparcf".
;; Loading #p"/tmp/dummy-files/file-0101.sparcf".
;; Loading #p"/tmp/dummy-files/file-0102.sparcf".
;; Loading #p"/tmp/dummy-files/file-0103.sparcf".
;; Loading #p"/tmp/dummy-files/file-0104.sparcf".
;; Loading #p"/tmp/dummy-files/file-0105.sparcf".
;; Loading #p"/tmp/dummy-files/file-0106.sparcf".
;; Loading #p"/tmp/dummy-files/file-0107.sparcf".
;; Loading #p"/tmp/dummy-files/file-0108.sparcf".
;; Loading #p"/tmp/dummy-files/file-0109.sparcf".
;; Loading #p"/tmp/dummy-files/file-0110.sparcf".
;; Loading #p"/tmp/dummy-files/file-0111.sparcf".
;; Loading #p"/tmp/dummy-files/file-0112.sparcf".
;; Loading #p"/tmp/dummy-files/file-0113.sparcf".
;; Loading #p"/tmp/dummy-files/file-0114.sparcf".
;; Loading #p"/tmp/dummy-files/file-0115.sparcf".
;; Loading #p"/tmp/dummy-files/file-0116.sparcf".
;; Loading #p"/tmp/dummy-files/file-0117.sparcf".
;; Loading #p"/tmp/dummy-files/file-0118.sparcf".
;; Loading #p"/tmp/dummy-files/file-0119.sparcf".
;; Loading #p"/tmp/dummy-files/file-0120.sparcf".
;; Loading #p"/tmp/dummy-files/file-0121.sparcf".
;; Loading #p"/tmp/dummy-files/file-0122.sparcf".
;; Loading #p"/tmp/dummy-files/file-0123.sparcf".
;; Loading #p"/tmp/dummy-files/file-0124.sparcf".
;; Loading #p"/tmp/dummy-files/file-0125.sparcf".
;; Loading #p"/tmp/dummy-files/file-0126.sparcf".
;; Loading #p"/tmp/dummy-files/file-0127.sparcf".
;; Loading #p"/tmp/dummy-files/file-0128.sparcf".
;; Loading #p"/tmp/dummy-files/file-0129.sparcf".
;; Loading #p"/tmp/dummy-files/file-0130.sparcf".
;; Loading #p"/tmp/dummy-files/file-0131.sparcf".
;; Loading #p"/tmp/dummy-files/file-0132.sparcf".
;; Loading #p"/tmp/dummy-files/file-0133.sparcf".
;; Loading #p"/tmp/dummy-files/file-0134.sparcf".
;; Loading #p"/tmp/dummy-files/file-0135.sparcf".
;; Loading #p"/tmp/dummy-files/file-0136.sparcf".
;; Loading #p"/tmp/dummy-files/file-0137.sparcf".
;; Loading #p"/tmp/dummy-files/file-0138.sparcf".
;; Loading #p"/tmp/dummy-files/file-0139.sparcf".
;; Loading #p"/tmp/dummy-files/file-0140.sparcf".
;; Loading #p"/tmp/dummy-files/file-0141.sparcf".
;; Loading #p"/tmp/dummy-files/file-0142.sparcf".
;; Loading #p"/tmp/dummy-files/file-0143.sparcf".
; [GC threshold exceeded with 29,341,528 bytes in use. Commencing GC.]
; [GC completed with 26,571,952 bytes retained and 2,769,576 bytes freed.]
; [GC will next occur when at least 38,571,952 bytes are in use.]
;; Loading #p"/tmp/dummy-files/file-0144.sparcf".
;; Loading #p"/tmp/dummy-files/file-0145.sparcf".
;; Loading #p"/tmp/dummy-files/file-0146.sparcf".
;; Loading #p"/tmp/dummy-files/file-0147.sparcf".
;; Loading #p"/tmp/dummy-files/file-0148.sparcf".
;; Loading #p"/tmp/dummy-files/file-0149.sparcf".
;; Loading #p"/tmp/dummy-files/file-0150.sparcf".
;; Loading #p"/tmp/dummy-files/file-0151.sparcf".
;; Loading #p"/tmp/dummy-files/file-0152.sparcf".
;; Loading #p"/tmp/dummy-files/file-0153.sparcf".
;; Loading #p"/tmp/dummy-files/file-0154.sparcf".
;; Loading #p"/tmp/dummy-files/file-0155.sparcf".
;; Loading #p"/tmp/dummy-files/file-0156.sparcf".
;; Loading #p"/tmp/dummy-files/file-0157.sparcf".
;; Loading #p"/tmp/dummy-files/file-0158.sparcf".
;; Loading #p"/tmp/dummy-files/file-0159.sparcf".
;; Loading #p"/tmp/dummy-files/file-0160.sparcf".
;; Loading #p"/tmp/dummy-files/file-0161.sparcf".
;; Loading #p"/tmp/dummy-files/file-0162.sparcf".
;; Loading #p"/tmp/dummy-files/file-0163.sparcf".
;; Loading #p"/tmp/dummy-files/file-0164.sparcf".
;; Loading #p"/tmp/dummy-files/file-0165.sparcf".
;; Loading #p"/tmp/dummy-files/file-0166.sparcf".
;; Loading #p"/tmp/dummy-files/file-0167.sparcf".
;; Loading #p"/tmp/dummy-files/file-0168.sparcf".
;; Loading #p"/tmp/dummy-files/file-0169.sparcf".
;; Loading #p"/tmp/dummy-files/file-0170.sparcf".
;; Loading #p"/tmp/dummy-files/file-0171.sparcf".
;; Loading #p"/tmp/dummy-files/file-0172.sparcf".
;; Loading #p"/tmp/dummy-files/file-0173.sparcf".
;; Loading #p"/tmp/dummy-files/file-0174.sparcf".
;; Loading #p"/tmp/dummy-files/file-0175.sparcf".
;; Loading #p"/tmp/dummy-files/file-0176.sparcf".
;; Loading #p"/tmp/dummy-files/file-0177.sparcf".
;; Loading #p"/tmp/dummy-files/file-0178.sparcf".
;; Loading #p"/tmp/dummy-files/file-0179.sparcf".
;; Loading #p"/tmp/dummy-files/file-0180.sparcf".
;; Loading #p"/tmp/dummy-files/file-0181.sparcf".
;; Loading #p"/tmp/dummy-files/file-0182.sparcf".
;; Loading #p"/tmp/dummy-files/file-0183.sparcf".
;; Loading #p"/tmp/dummy-files/file-0184.sparcf".
;; Loading #p"/tmp/dummy-files/file-0185.sparcf".
;; Loading #p"/tmp/dummy-files/file-0186.sparcf".
;; Loading #p"/tmp/dummy-files/file-0187.sparcf".
;; Loading #p"/tmp/dummy-files/file-0188.sparcf".
;; Loading #p"/tmp/dummy-files/file-0189.sparcf".
;; Loading #p"/tmp/dummy-files/file-0190.sparcf".
;; Loading #p"/tmp/dummy-files/file-0191.sparcf".
;; Loading #p"/tmp/dummy-files/file-0192.sparcf".
;; Loading #p"/tmp/dummy-files/file-0193.sparcf".
;; Loading #p"/tmp/dummy-files/file-0194.sparcf".
;; Loading #p"/tmp/dummy-files/file-0195.sparcf".
; [GC threshold exceeded with 38,699,208 bytes in use. Commencing GC.]
; [GC completed with 35,641,584 bytes retained and 3,057,624 bytes freed.]
; [GC will next occur when at least 47,641,584 bytes are in use.]
;; Loading #p"/tmp/dummy-files/file-0196.sparcf".
;; Loading #p"/tmp/dummy-files/file-0197.sparcf".
;; Loading #p"/tmp/dummy-files/file-0198.sparcf".
;; Loading #p"/tmp/dummy-files/file-0199.sparcf".
;; Loading #p"/tmp/dummy-files/file-0200.sparcf".
;; Loading #p"/tmp/dummy-files/file-0201.sparcf".
;; Loading #p"/tmp/dummy-files/file-0202.sparcf".
;; Loading #p"/tmp/dummy-files/file-0203.sparcf".
;; Loading #p"/tmp/dummy-files/file-0204.sparcf".
;; Loading #p"/tmp/dummy-files/file-0205.sparcf".
;; Loading #p"/tmp/dummy-files/file-0206.sparcf".
;; Loading #p"/tmp/dummy-files/file-0207.sparcf".
;; Loading #p"/tmp/dummy-files/file-0208.sparcf".
;; Loading #p"/tmp/dummy-files/file-0209.sparcf".
;; Loading #p"/tmp/dummy-files/file-0210.sparcf".
;; Loading #p"/tmp/dummy-files/file-0211.sparcf".
;; Loading #p"/tmp/dummy-files/file-0212.sparcf".
;; Loading #p"/tmp/dummy-files/file-0213.sparcf".
;; Loading #p"/tmp/dummy-files/file-0214.sparcf".
;; Loading #p"/tmp/dummy-files/file-0215.sparcf".
;; Loading #p"/tmp/dummy-files/file-0216.sparcf".
;; Loading #p"/tmp/dummy-files/file-0217.sparcf".
;; Loading #p"/tmp/dummy-files/file-0218.sparcf".
;; Loading #p"/tmp/dummy-files/file-0219.sparcf".
;; Loading #p"/tmp/dummy-files/file-0220.sparcf".
;; Loading #p"/tmp/dummy-files/file-0221.sparcf".
;; Loading #p"/tmp/dummy-files/file-0222.sparcf".
;; Loading #p"/tmp/dummy-files/file-0223.sparcf".
;; Loading #p"/tmp/dummy-files/file-0224.sparcf".
;; Loading #p"/tmp/dummy-files/file-0225.sparcf".
;; Loading #p"/tmp/dummy-files/file-0226.sparcf".
;; Loading #p"/tmp/dummy-files/file-0227.sparcf".
;; Loading #p"/tmp/dummy-files/file-0228.sparcf".
;; Loading #p"/tmp/dummy-files/file-0229.sparcf".
;; Loading #p"/tmp/dummy-files/file-0230.sparcf".
;; Loading #p"/tmp/dummy-files/file-0231.sparcf".
;; Loading #p"/tmp/dummy-files/file-0232.sparcf".
;; Loading #p"/tmp/dummy-files/file-0233.sparcf".
;; Loading #p"/tmp/dummy-files/file-0234.sparcf".
;; Loading #p"/tmp/dummy-files/file-0235.sparcf".
;; Loading #p"/tmp/dummy-files/file-0236.sparcf".
;; Loading #p"/tmp/dummy-files/file-0237.sparcf".
;; Loading #p"/tmp/dummy-files/file-0238.sparcf".
; [GC threshold exceeded with 47,764,896 bytes in use. Commencing GC.]
; [GC completed with 45,100,192 bytes retained and 2,664,704 bytes freed.]
; [GC will next occur when at least 57,100,192 bytes are in use.]
;; Loading #p"/tmp/dummy-files/file-0239.sparcf".
;; Loading #p"/tmp/dummy-files/file-0240.sparcf".
;; Loading #p"/tmp/dummy-files/file-0241.sparcf".
;; Loading #p"/tmp/dummy-files/file-0242.sparcf".
;; Loading #p"/tmp/dummy-files/file-0243.sparcf".
;; Loading #p"/tmp/dummy-files/file-0244.sparcf".
;; Loading #p"/tmp/dummy-files/file-0245.sparcf".
;; Loading #p"/tmp/dummy-files/file-0246.sparcf".
;; Loading #p"/tmp/dummy-files/file-0247.sparcf".
;; Loading #p"/tmp/dummy-files/file-0248.sparcf".
;; Loading #p"/tmp/dummy-files/file-0249.sparcf".
T
* (ext:save-lisp "/tmp/xxx-not-purified" :purify nil)
; [GC threshold exceeded with 47,651,088 bytes in use. Commencing GC.]
; [GC completed with 44,416,832 bytes retained and 3,234,256 bytes freed.]
; [GC will next occur when at least 56,416,832 bytes are in use.]
[Undoing binding stack... done]
[Saving current lisp image into /tmp/xxx-not-purified:
Writing 22556752 bytes from the Read-Only space at 0x10000000.
Writing 2675024 bytes from the Static space at 0x28000000.
Writing 1380000 bytes from the Dynamic space at 0x40000000.
done.]
otwb-dev bbrew 34> /org/develop/reasoning/lisp/cmucl/ss2004-04/bin/lisp -core
/tmp/xxx-not-purified
Error: Attempt to divide by zero.
SC: 18, Offset: 11 14765716
SC: 18, Offset: 12 0
LDB monitor
ldb> q
Really quit? [y] y
otwb-dev bbrew 35>
||#
-- Attached file included as plaintext by Listar --
-- File: purify-gdb-session.text
...
T
;;; the application has finished loading at this point
* (ext::gc)
; [GC threshold exceeded with 54,660,208 bytes in use. Commencing GC.]
; [GC completed with 53,280,744 bytes retained and 1,379,464 bytes freed.]
; [GC will next occur when at least 73,280,744 bytes are in use.]
NIL
* (ext::gc)
; [GC threshold exceeded with 53,284,752 bytes in use. Commencing GC.]
; [GC completed with 53,280,720 bytes retained and 4,032 bytes freed.]
; [GC will next occur when at least 73,280,720 bytes are in use.]
NIL
* (ext::purify)
[Doing purification: Segmentation Fault (core dumped)
otwb-dev bbrew 26> pwd
/home/bbrew/cmucl-tests
otwb-dev bbrew 27> ls
bb.lisp core
big-non-purify-transcript.text dummy-file-maker.lisp
big-purify-transcript.text dummy-file-maker.sparcf
big-save-test.lisp purify-test.lisp
cmucl-19a-many-closure-bug.text purify-test.lisp.~1~
cmucl-19a-purify-bug.text purify-test.sparcf
otwb-dev bbrew 28> ls -l core
-rw-rw-r-- 1 bbrew g940 91066200 Apr 20 09:10 core
otwb-dev bbrew 29> gdb /org/develop/reasoning/lisp/cmucl/ss2004-04/bin/lisp core
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.4"...
Core was generated by `/org/develop/reasoning/lisp/cmucl/ss2004-04/bin/lisp
-dynamic-space-size 1024 -'.
Program terminated with signal 11, Segmentation Fault.
Error while mapping shared library sections:
/tmp/3688AG1623: No such file or directory.
Error while mapping shared library sections:
/tmp/3688AG1624: No such file or directory.
Error while mapping shared library sections:
/tmp/3688AG1625: No such file or directory.
Reading symbols from /usr/lib/libsocket.so.1...done.
Loaded symbols for /usr/lib/libsocket.so.1
Reading symbols from /usr/lib/libnsl.so.1...done.
Loaded symbols for /usr/lib/libnsl.so.1
Reading symbols from /usr/lib/libdl.so.1...done.
Loaded symbols for /usr/lib/libdl.so.1
Reading symbols from /usr/lib/libm.so.1...done.
Loaded symbols for /usr/lib/libm.so.1
Reading symbols from /usr/lib/libc.so.1...done.
Loaded symbols for /usr/lib/libc.so.1
Reading symbols from /usr/lib/libmp.so.2...done.
Loaded symbols for /usr/lib/libmp.so.2
Reading symbols from /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1...done.
Loaded symbols for /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1
Error while reading shared library symbols:
/tmp/3688AG1623: No such file or directory.
Error while reading shared library symbols:
/tmp/3688AG1624: No such file or directory.
Error while reading shared library symbols:
/tmp/3688AG1625: No such file or directory.
#0 ptrans_vector (thing=1128994231, bits=32, extra=0, boxed=4, constant=11)
at ../../src/lisp/purify.c:645
645 ../../src/lisp/purify.c: No such file or directory.
(gdb) bt
#0 ptrans_vector (thing=1128994231, bits=32, extra=0, boxed=4, constant=11)
at ../../src/lisp/purify.c:645
Cannot access memory at address 0xef7ffd28
(gdb) print vector
$1 = (struct vector *) 0x28f3e800
(gdb) print nwords
$2 = 50
(gdb) print result
$3 = 1128994231
(gdb) print new
$4 = (lispobj *) 0x0
(gdb) q
-- Attached file included as plaintext by Listar --
-- File: purify-test.lisp
(in-package "CL-USER")
#||
test program that demonstrates purify getting a segmentation violation
1. Start 2004_04 lisp
2. do (load (compile-file "<this file>"))
3. do (test)
Transcript of the session with segmentation violation is attached to the
end of this file.
||#
;;;----------------------------------------------------------------------
(defparameter *block-size* 1024)
(defparameter *block-count* 35000)
(defvar *block-list* '())
;;;----------------------------------------------------------------------
(defun test ()
(format t "Overall size: ~5,2f Mwords (~5,2f Mbytes)~%"
(/ (* *block-size* *block-count*) (expt 2 20))
(/ (* *block-size* *block-count* 4) (expt 2 20)))
(format t "~%Making blocks ...~%")
(finish-output)
(add-blocks *block-size* *block-count*)
(format t " ... blocks made.~%")
(format t "~%Starting purify ...~%")
(finish-output)
(ext::purify)
(format t " ... purify completed~%"))
;;;----------------------------------------------------------------------
(defun add-blocks (size count)
(dotimes (i count)
(add-block size)))
(defun add-block (size)
(push (make-array size :initial-element nil) *block-list*))
;;;----------------------------------------------------------------------
#||
otwb-dev bbrew 35> /org/develop/reasoning/lisp/cmucl/ss2004-04/bin/lisp
CMU Common Lisp snapshot 2004-04, running on otwb-dev
With core:
/net/dlsun3004/private/projects/org/develop/CMUCL/ss2004_04/lib/cmucl/lib/lisp.core
Dumped on: Fri, 2004-04-02 09:58:31-08:00 on kenny2
See <http://www.cons.org/cmucl/> for support information.
Loaded subsystems:
Python 1.1, target UltraSparc/Solaris 7
CLOS based on Gerd's PCL 2004/01/09 04:34:17
* (load (compile-file "/home/bbrew/cmucl-tests/purify-test.lisp"))
; Python version 1.1, VM version UltraSparc/Solaris 7 on 20 APR 04 10:29:24 am.
; Compiling: /home/bbrew/cmucl-tests/purify-test.lisp 20 APR 04 09:05:09 am
; Byte Compiling Top-Level Form:
; Converted TEST.
; Compiling DEFUN TEST:
; Converted ADD-BLOCKS.
; Compiling DEFUN ADD-BLOCKS:
; Converted ADD-BLOCK.
; Compiling DEFUN ADD-BLOCK:
; Byte Compiling Top-Level Form:
; /home/bbrew/cmucl-tests/purify-test.sparcf written.
; Compilation finished in 0:00:00.
; Loading #p"/home/bbrew/cmucl-tests/purify-test.sparcf".
T
* (test)
Overall size: 34.18 Mwords (136.72 Mbytes)
Making blocks ...
; [GC threshold exceeded with 12,060,328 bytes in use. Commencing GC.]
; [GC completed with 11,362,912 bytes retained and 697,416 bytes freed.]
; [GC will next occur when at least 23,362,912 bytes are in use.]
; [GC threshold exceeded with 23,424,808 bytes in use. Commencing GC.]
; [GC completed with 23,398,416 bytes retained and 26,392 bytes freed.]
; [GC will next occur when at least 35,398,416 bytes are in use.]
; [GC threshold exceeded with 35,460,312 bytes in use. Commencing GC.]
; [GC completed with 35,435,672 bytes retained and 24,640 bytes freed.]
; [GC will next occur when at least 47,435,672 bytes are in use.]
; [GC threshold exceeded with 47,497,568 bytes in use. Commencing GC.]
; [GC completed with 47,471,496 bytes retained and 26,072 bytes freed.]
; [GC will next occur when at least 59,471,496 bytes are in use.]
; [GC threshold exceeded with 59,533,392 bytes in use. Commencing GC.]
; [GC completed with 59,508,752 bytes retained and 24,640 bytes freed.]
; [GC will next occur when at least 71,508,752 bytes are in use.]
; [GC threshold exceeded with 71,570,648 bytes in use. Commencing GC.]
; [GC completed with 71,541,712 bytes retained and 28,936 bytes freed.]
; [GC will next occur when at least 83,541,712 bytes are in use.]
; [GC threshold exceeded with 83,595,368 bytes in use. Commencing GC.]
; [GC completed with 83,570,744 bytes retained and 24,624 bytes freed.]
; [GC will next occur when at least 95,570,744 bytes are in use.]
; [GC threshold exceeded with 95,624,400 bytes in use. Commencing GC.]
; [GC completed with 95,598,344 bytes retained and 26,056 bytes freed.]
; [GC will next occur when at least 107,598,344 bytes are in use.]
; [GC threshold exceeded with 107,652,000 bytes in use. Commencing GC.]
; [GC completed with 107,627,376 bytes retained and 24,624 bytes freed.]
; [GC will next occur when at least 119,627,376 bytes are in use.]
; [GC threshold exceeded with 119,681,032 bytes in use. Commencing GC.]
; [GC completed with 119,652,112 bytes retained and 28,920 bytes freed.]
; [GC will next occur when at least 131,652,112 bytes are in use.]
; [GC threshold exceeded with 131,693,408 bytes in use. Commencing GC.]
; [GC completed with 131,668,808 bytes retained and 24,600 bytes freed.]
; [GC will next occur when at least 143,668,808 bytes are in use.]
; [GC threshold exceeded with 143,710,104 bytes in use. Commencing GC.]
; [GC completed with 143,684,072 bytes retained and 26,032 bytes freed.]
; [GC will next occur when at least 155,684,072 bytes are in use.]
... blocks made.
Starting purify ...
[Doing purification: segv_handler: Real protection violation: 0x2fff8000
Error in function UNIX::SIGSEGV-HANDLER: Segmentation Violation at #xEF670EFC.
[Condition of type SIMPLE-ERROR]
Restarts:
0: [ABORT] Return to Top-Level.
Debug (type H for help)
(UNIX::SIGSEGV-HANDLER #<unused-arg>
#<unused-arg>
#.(SYSTEM:INT-SAP #xEFFFE5F0))
Source: Error finding source:
Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists:
target:code/signal.lisp.
0] back
0: (UNIX::SIGSEGV-HANDLER #<unused-arg>
#<unused-arg>
#.(SYSTEM:INT-SAP #xEFFFE5F0))
1: (UNIX::SIGSEGV-HANDLER 3
#<unused-arg>
#<unused-arg>
#.(SYSTEM:INT-SAP #xEFFFE5F0))[:EXTERNAL]
2: ("call_into_lisp+#xB7 [#x1D027]
/net/dlsun3004/private/projects/org/develop/CMUCL/ss2004_04/bin/lisp")
3: (LISP::%PURIFY 671088651 671088651)
4: ((FLET #:G5
LISP::SUB-GC))
5: (LISP::SUB-GC :VERBOSE-P T :FORCE-P T ...)
6: (PURIFY :ROOT-STRUCTURES NIL :ENVIRONMENT-NAME "Auxiliary")Type-error in
KERNEL::OBJECT-NOT-TYPE-ERROR-HANDLER:
Unable to display error condition
[Condition of type CONDITIONS::CASE-FAILURE]
Restarts:
0: [ABORT] Return to debug level 1.
1: Return to Top-Level.
Debug (type H for help)
(KERNEL:DATA-VECTOR-REF #<error printing object> 0)
Source: Error finding source:
Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists:
target:code/array.lisp.
0]]
||#