#60: compile-file and export problem
--------------------+-------------------------------------------------------
Reporter: rtoy | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: Core | Version: 2012-05
Keywords: |
--------------------+-------------------------------------------------------
Put the following in a file and {{{compile-file}}}. This shouldn't cause
any problems but it does.
{{{
(defpackage fail (:use cl))
(in-package fail)
(defvar *x* '^)
(export *x*)
}}}
--
Ticket URL: <http://trac.common-lisp.net/cmucl/ticket/60>
cmucl <http://common-lisp.net/project/cmucl>
Cmucl is a high-performance, free Common Lisp implementation.
#56: Heap overflow checking fails on darwin/x86
--------------------+-------------------------------------------------------
Reporter: rtoy | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: Core | Version: 2012-01
Keywords: |
--------------------+-------------------------------------------------------
{{{
cmulisp -dynamic-space-size 64
* (defvar *1* (make-list 10000000))
; [GC threshold exceeded with 35,359,432 bytes in use. Commencing GC.]
; [GC completed with 21,504,336 bytes retained and 13,855,096 bytes
freed.]
; [GC will next occur when at least 53,504,336 bytes are in use.]
; [GC threshold exceeded with 53,514,472 bytes in use. Commencing GC.]
*A2 gc_alloc_new_region failed, nbytes=8.
CMUCL has run out of dynamic heap space (64 MB).
You can control heap size with the -dynamic-space-size commandline
option.
sigbus_handler: Real protection violation at 0xac3, PC = 0x4b3243e3
...
}}}
This probably happens in older versions too, but I didn't check. Works ok
on linux.
--
Ticket URL: <http://trac.common-lisp.net/cmucl/ticket/56>
cmucl <http://common-lisp.net/project/cmucl>
Cmucl is a high-performance, free Common Lisp implementation.
#61: Darwin+clang doesn't produce a working lisp
--------------------+-------------------------------------------------------
Reporter: rtoy | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: Core | Version: 2012-07
Keywords: |
--------------------+-------------------------------------------------------
Compiling the C runtime on Darwin with clang does not produce a working
lisp. The cause is that clang uses xmm registers in gencgc.c, but the
allocator calls {{{alloc()}}} directly without saving any live xmm
registers which eventually get trashed. For example the vop
{{{
(define-vop (move-from-single)
(:args (x :scs (single-reg) :to :save))
(:results (y :scs (descriptor-reg)))
(:node-var node)
(:note _N"float to pointer coercion")
(:save-p t)
(:generator 13
(with-fixed-allocation (y vm:single-float-type vm:single-float-size
node)
(inst movss (ea-for-sf-desc y) x))))
}}}
will save any live float registers, but not the arg {{{x}}}. If the
allocator calls {{{alloc()}}}, {{{x}}} could be destroyed.
Possible solutions:
1. Save and restore float args to the stack in every float vop that does
allocation.
1. Make {{{alloc()}}} save all the float registers.
The first solution is nice because only the registers that need to be
saved are saved. But it's not nice because every vop will save/restore
when most of the time {{{alloc()}}} will not be called.
The second solution is nice because it's always safe, even if some vop
forgot to save a register. But it's not nice because all float registers
are saved when only one (or a very small number) needs to be saved. But
it looks like {{{alloc()}}} is relatively expensive so perhaps the cost of
saving all registers is in the noise. (Should measure this.)
--
Ticket URL: <http://trac.common-lisp.net/cmucl/ticket/61>
cmucl <http://common-lisp.net/project/cmucl>
Cmucl is a high-performance, free Common Lisp implementation.