[gclist] GC 4.11
Hans Boehm
boehm@hoh.mti.sgi.com
Thu, 5 Dec 1996 15:35:50 -0800
I made version 4.11 of our conservative garbage collector available.
It currently resides in
http://reality.sgi.com/employees/boehm_mti/gc_source/
4.11 adds a large number of mostly minor bug fixes and some ports to
new platforms. SGI support should be much better than 4.10. (The code now
carries an SGI copyright as well, with the same rules as before.)
Note that thread support has improved somewhat. SGI pthread support is mostly there.
There is some support for win32 threads, though that still needs to be treated
with care. Ian Pumarta recently announced a port to DEC/MIT pthreads. Solaris
and PCR thread support has been there for a while.
This announcement went to my old mailing list, plus some names I extracted
from recent email, and gclist@iecc.com. Unless I get strong objections, I will
also include gclist@iecc.com in future announcements. Please let me know if you
do not want to receive future announcements, or if you are already subscribed to
gclist@iecc.com.
Here is the list of changes:
Since 4.10:
- Rationalized (hopefully) GC_try_to_collect in an incremental collection
environment. It appeared to not handle a call while a collection was in
progress, and was otherwise too conservative.
- Merged GC_reclaim_or_delete_all into GC_reclaim_all to get rid of some
code.
- Added Patrick Beard's Mac fixes, with substantial completely untested
modifications.
- Fixed the MPROTECT_VDB code to deal with large pages and imprecise
fault addresses (as on an UltraSPARC running Solaris 2.5). Note that this
was not a problem in the default configuration, which uses PROC_VDB.
- The DEC Alpha assembly code needed to restore $gp between calls.
Thanks to Fergus Henderson for tracking this down and supplying a
patch.
- The write command for "de" was completely broken for large files.
I used the easiest portable fix, which involved changing the semantics
so that f.new is written instead of overwriting f. That's safer anyway.
- Added README.solaris2 with a discussion of the possible problems of
mixing the collector's sbrk allocation with malloc/realloc.
- Changed the data segment starting address for SGI machines. The
old code failed under IRIX6.
- Required double word alignment for MIPS.
- Various minor fixes to remove warnings.
- Attempted to fix some Solaris threads problems reported by Zhiying Chen.
In particular, the collector could try to fork a thread with the
world stopped as part of GC_thr_init. It also failed to deal with
the case in which the original thread terminated before the whole
process did.
- Added -DNO_EXECUTE_PERMISSION. This has a major performance impact
on the incremental collector under Irix, and perhaps under other
operating systems.
- Added some code to support allocating the heap with mmap. This may
be preferable under some circumstances.
- Integrated dynamic library support for HP.
(Thanks to Knut Tvedten <knuttv@ifi.uio.no>.)
- Integrated James Clark's win32 threads support, and made a number
of changes to it, many of which were suggested by Pontus Rydin.
This is still not 100% solid.
- Integrated Alistair Crooks' support for UTS4 running on an Amdahl
370-class machine.
- Fixed a serious bug in explicitly typed allocation. Objects requiring
large descriptors where handled in a way that usually resulted in
a segmentation fault in the marker. (Thanks to Jeremy Fitzhardinge
for helping to track this down.)
- Added partial support for GNU win32 development. (Thanks to Fergus
Henderson.)
- Added optional support for Java-style finalization semantics. (Thanks
to Patrick Bridges.) This is recommended only for Java implementations.
- GC_malloc_uncollectable faulted instead of returning 0 when out of
memory. (Thanks to dan@math.uiuc.edu for noticing.)
- Calls to GC_base before the collector was initialized failed on a
DEC Alpha. (Thanks to Matthew Flatt.)
- Added base pointer checking to GC_REGISTER_FINALIZER in debugging
mode, at the suggestion of Jeremy Fitzhardinge.
- GC_debug_realloc failed for uncollectable objects. (Thanks to
Jeremy Fitzhardinge.)
- Explicitly typed allocation could crash if it ran out of memory.
(Thanks to Jeremy Fitzhardinge.)
- Added minimal support for a DEC Alpha running Linux.
- Fixed a problem with allocation of objects whose size overflowed
ptrdiff_t. (This now fails unconditionally, as it should.)
- Added the beginning of Irix pthread support.
- Integrated Xiaokun Zhu's fixes for djgpp 2.01.
- Added SGI-style STL allocator support (gc_alloc.h).
- Fixed a serious bug in README.solaris2. Multithreaded programs must include
gc.h with SOLARIS_THREADS defined.
- Changed GC_free so it actually deallocates uncollectable objects.
(Thanks to Peter Chubb for pointing out the problem.)
- Added Linux ELF support for dynamic libararies. (Thanks again to
Patrick Bridges.)
- Changed the Borland cc configuration so that the assembler is not
required.
- Fixed a bug in the C++ test that caused it to fail in 64-bit
environments.
Hans
Hans-Juergen Boehm
boehm@mti.sgi.com