Since 4.12: - Fixed a crucial bug in the Watcom port. There was a redundant decl of GC_push_one in gc_priv.h. - Added FINALIZE_ON_DEMAND. - Fixed some pre-ANSI cc problems in test.c. - Removed getpagesize() use for Solaris. It seems to be missing in one or two versions. - Fixed bool handling for SPARCCompiler version 4.2. - Fixed some files in include that had gotten unlinked from the main copy. - Some RS/6000 fixes (missing casts). Thanks to Toralf Foerster. - Fixed several problems in GC_debug_realloc, affecting mostly the FIND_LEAK case. - GC_exclude_static_roots contained a buggy unsigned comparison to terminate a loop. (Thanks to Wilson Ho.) - CORD_str failed if the substring occurred at the last possible position. (Only affects cord users.) - Fixed Linux code to deal with RedHat 5.0 and integrated Peter Bigot's os_dep.c code for dealing with various Linux versions. - Added workaround for Irix pthreads sigaction bug and possible signal misdirection problems. Since alpha1: - Changed RS6000 STACKBOTTOM. - Integrated Patrick Beard's Mac changes. - Alpha1 didn't compile on Irix m.n, m < 6. - Replaced Makefile.dj with a new one from Gary Leavens. - Added Andrew Stitcher's changes to support SCO OpenServer. - Added PRINT_BLACK_LIST, to allow debugging of high densities of false pointers. - Added code to debug allocator to keep track of return address in GC_malloc caller, thus giving a bit more context. - Changed default behavior of large block allocator to more aggressively avoid fragmentation. This is likely to slow down the collector when it succeeds at reducing space cost. - Integrated Fergus Henderson's CYGWIN32 changes. They are untested, but needed for newer versions. - USE_MMAP had some serious bugs. This caused the collector to fail consistently on Solaris with -DSMALL_CONFIG. - Added Linux threads support, thanks largely to Fergus Henderson. Since alpha2: - Fixed more Linux threads problems. - Changed default GC_free_space_divisor to 3 with new large block allocation. (Thanks to Matthew Flatt for some measurements that suggest the old value sometimes favors space too much over time.) - More CYGWIN32 fixes. - Integrated Tyson-Dowd's Linux-M68K port. - Minor HP PA and DEC UNIX fixes from Fergus Henderson. - Integrated Christoffe Raffali's Linux-SPARC changes. - Allowed for one more GC fixup iteration after a full GC in incremental mode. Some quick measurements suggested that this significantly reduces pause times even with smaller GC_RATE values. - Moved some more GC data structures into GC_arrays. This decreases pause times and GC overhead, but makes debugging slightly less convenient. - Fixed namespace pollution problem ("excl_table"). - Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking that slightly. - Added some win32 threads fixes. - Integrated Ivan Demakov and David Stes' Watcom fixes. - Various other minor fixes contributed by many people. - Renamed config.h to gcconfig.h, since config.h tends to be used for many other things. - Integrated Matthew Flatt's support for 68K MacOS "far globals". - Fixed up some of the dynamic library Makefile targets for consistency across platforms. - Fixed a USE_MMAP typo that caused out-of-memory handling to fail on Solaris. - Added code to test.c to test thread creation a bit more. - Integrated GC_win32_free_heap, as suggested by Ivan Demakov. - Fixed Solaris 2.7 stack base finding problem. (This may actually have been done in an earlier alpha release.) Since alpha3: - Fixed MSWIN32 recognition test, which interfered with cygwin. - Removed unnecessary gc_watcom.asm from distribution. Removed some obsolete README.win32 text. - Added Alpha Linux incremental GC support. (Thanks to Philipp Tomsich for code for retrieving the fault address in a signal handler.) Changed Linux signal handler context argument to be a pointer. - Took care of some new warnings generated by the 7.3 SGI compiler. - Integrated Phillip Musumeci's FreeBSD/ELF fixes. - -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h> Since 4.13: - Fixed GC_print_source_ptr to not use a prototype. - generalized CYGWIN test. - gc::new did the wrong thing with PointerFreeGC placement. (Thanks to Rauli Ruohonen.) - In the ALL_INTERIOR_POINTERS (default) case, some callee-save register values could fail to be scanned if the register was saved and reused in a GC frame. This showed up in verbose mode with gctest compiled with an unreleased SGI compiler. I vaguely recall an old bug report that may have been related. The bug was probably quite old. (The problem was that the stack scanning could be deferred until after the relevant frame was overwritten, and the new save location might be outside the scanned area. Fixed by more eager stack scanning.) - PRINT_BLACK_LIST had some problems. A few source addresses were garbage. - Replaced Makefile.dj and added -I flags to cord make targets. (Thanks to Gary Leavens.) - GC_try_to_collect was broken with the nonincremental collector. - gc_cleanup destructors could pass the wrong address to GC_register_finalizer_ignore_self in the presence of multiple inheritance. (Thanks to Darrell Schiebel.) - Changed PowerPC Linux stack finding code. Since 4.14alpha1 - -DSMALL_CONFIG did not work reliably with large (> 4K) pages. Recycling the mark stack during expansion could result in a size zero heap segment, which confused things. (This was probably also an issue with the normal config and huge pages.) - Did more work to make sure that callee-save registers were scanned completely, even with the setjmp-based code. Added USE_GENERIC_PUSH_REGS macro to facilitate testing on machines I have access to. - Added code to explicitly push register contents for win32 threads. This seems to be necessary. (Thanks to Pierre de Rop.) Since 4.14alpha2 - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea). Since 4.14 - Reworked large block allocator. Now uses multiple doubly linked free lists to approximate best fit. - Changed heap expansion heuristic. Entirely free blocks are no longer counted towards the heap size. This seems to have a major impact on heap size stability; the old version could expand the heap way too much in the presence of large block fragmentation. - added -DGC_ASSERTIONS and some simple assertions inside the collector. This is mainlyt for collector debugging. - added -DUSE_MUNMAP to allow the heap to shrink. Suupported on only a few UNIX-like platforms for now. - added GC_dump_regions() for debugging of fragmentation issues. - Changed PowerPC pointer alignment under Linux to 4. (This needs checking by someone who has one. The suggestions came to me via a rather circuitous path.) - Changed the Linux/Alpha port to walk the data segment backwards until it encounters a SIGSEGV. The old way to find the start of the data segment broke with a recent release. - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of GC_register_finalizer, so that it would continue to work with GC_DEBUG. - allochblk sometimes cleared the wrong block for debugging purposes when it dropped blacklisted blocks. This could result in spurious error reports with GC_DEBUG. - added MACOS X Server support. (Thanks to Andrew Stone.) - Changed the Solaris threads code to ignore stack limits > 8 MB with a warning. Empirically, it is not safe to access arbitrary pages in such large stacks. And the dirty bit implementation does not guarantee that none of them will be accessed. - Integrated Martin Tauchmann's Amiga changes. - Integrated James Dominy's OpenBSD/SPARC port. Since 5.0alpha1 - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization). - Added -DKEEP_BACK_PTRS and backptr.h interface. (The implementation idea came from Al Demers.) Since 5.0alpha2 - Added some highly incomplete code to support a copied young generation. Comments on nursery.h are appreciated. - Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND, so the same effect could be obtained with a runtime switch. This is a step towards standardizing on a single dynamic GC library. - Significantly changed the way leak detection is handled, as a consequence of the above. To do: - Very large root set sizes (> 16 MB or so) could cause the collector to abort with an unexpected mark stack overflow. (Thanks again to Peter Chubb.) NOT YET FIXED. Workaround is to increase the initial size. - The SGI version of the collector marks from mmapped pages, even if they are not part of dynamic library static data areas. This causes performance problems with some SGI libraries that use mmap as a bitmap allocator. NOT YET FIXED. It may be possible to turn off DYNAMIC_LOADING in the collector as a workaround. It may also be possible to conditionally intercept mmap and use GC_exclude_static_roots. The real fix is to walk rld data structures, which looks possible. - Integrate MIT and DEC pthreads ports. - Deal with very uneven black-listing distributions. If all the black listed blocks reside in the newly allocated heap section, the heuristic for temporarily ignoring black-listing fails, and the heap grows too much. (This was observed in only one case, and could be worked around, but ...)