[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