diff options
| author | Fumitoshi UKAI <ukai@debian.or.jp> | 2003-03-09 19:43:05 +0000 | 
|---|---|---|
| committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2003-03-09 19:43:05 +0000 | 
| commit | 1dff73dfd6accb9bae971dd0f1ce15a182b0f75b (patch) | |
| tree | 90442e8c55bb3e5d8aade44a20152d2d8e297608 /gc/doc/README.changes | |
| parent | autoconficate (diff) | |
| download | w3m-1dff73dfd6accb9bae971dd0f1ce15a182b0f75b.tar.gz w3m-1dff73dfd6accb9bae971dd0f1ce15a182b0f75b.zip | |
remove gc
Diffstat (limited to '')
| -rw-r--r-- | gc/doc/README.changes | 1653 | 
1 files changed, 0 insertions, 1653 deletions
| diff --git a/gc/doc/README.changes b/gc/doc/README.changes deleted file mode 100644 index 3b2925a..0000000 --- a/gc/doc/README.changes +++ /dev/null @@ -1,1653 +0,0 @@ -This is a rough history of garbage collector bugs and versions. - -This has been maintained with varying diligence over the years. - -I made an attempt to include recent contributors here.  I apologize for any -omissions. - -------------------------- - -  Version 1.3 and immediately preceding versions contained spurious -assembly language assignments to TMP_SP.  Only the assignment in the PC/RT -code is necessary.  On other machines, with certain compiler options, -the assignments can lead to an unsaved register being overwritten. -Known to cause problems under SunOS 3.5 WITHOUT the -O option.  (With --O the compiler recognizes it as dead code.  It probably shouldn't, -but that's another story.) - -  Version 1.4 and earlier versions used compile time determined values -for the stack base.  This no longer works on Sun 3s, since Sun 3/80s use -a different stack base.  We now use a straightforward heuristic on all -machines on which it is known to work (incl. Sun 3s) and compile-time -determined values for the rest.  There should really be library calls -to determine such values. - -  Version 1.5 and earlier did not ensure 8 byte alignment for objects -allocated on a sparc based machine. - -  Version 1.8 added ULTRIX support in gc_private.h. -   -  Version 1.9 fixed a major bug in gc_realloc. -   -  Version 2.0 introduced a consistent naming convention for collector -routines and added support for registering dynamic library data segments -in the standard mark_roots.c.  Most of the data structures were revamped. -The treatment of interior pointers was completely changed.  Finalization -was added.  Support for locking was added.  Object kinds were added. -We added a black listing facility to avoid allocating at addresses known -to occur as integers somewhere in the address space.  Much of this -was accomplished by adapting ideas and code from the PCR collector. -The test program was changed and expanded. - -  Version 2.1 was the first stable version since 1.9, and added support -for PPCR. - -  Version 2.2 added debugging allocation, and fixed various bugs.  Among them: -- GC_realloc could fail to extend the size of the object for certain large object sizes. -- A blatant subscript range error in GC_printf, which unfortunately -  wasn't exercised on machines with sufficient stack alignment constraints. -- GC_register_displacement did the wrong thing if it was called after -  any allocation had taken place. -- The leak finding code would eventually break after 2048 byte -  byte objects leaked. -- interface.c didn't compile. -- The heap size remained much too small for large stacks. -- The stack clearing code behaved badly for large stacks, and perhaps -  on HP/PA machines. - -  Version 2.3 added ALL_INTERIOR_POINTERS and fixed the following bugs: -- Missing declaration of etext in the A/UX version. -- Some PCR root-finding problems. -- Blacklisting was not 100% effective, because the plausible future -  heap bounds were being miscalculated. -- GC_realloc didn't handle out-of-memory correctly. -- GC_base could return a nonzero value for addresses inside free blocks. -- test.c wasn't really thread safe, and could erroneously report failure -  in a multithreaded environment.  (The locking primitives need to be -  replaced for other threads packages.) -- GC_CONS was thoroughly broken. -- On a SPARC with dynamic linking, signals stayed diabled while the -  client code was running. -  (Thanks to Manuel Serrano at INRIA for reporting the last two.) -   -  Version 2.4 added GC_free_space_divisor as a tuning knob, added -  support for OS/2 and linux, and fixed the following bugs: -- On machines with unaligned pointers (e.g. Sun 3), every 128th word could -  fail to be considered for marking. -- Dynamic_load.c erroneously added 4 bytes to the length of the data and -  bss sections of the dynamic library.  This could result in a bad memory -  reference if the actual length was a multiple of a page.  (Observed on -  Sun 3.  Can probably also happen on a Sun 4.) -  (Thanks to Robert Brazile for pointing out that the Sun 3 version -  was broken.  Dynamic library handling is still broken on Sun 3s -  under 4.1.1U1, but apparently not 4.1.1.  If you have such a machine, -  use -Bstatic.) -   -  Version 2.5 fixed the following bugs: -- Removed an explicit call to exit(1) -- Fixed calls to GC_printf and GC_err_printf, so the correct number of -  arguments are always supplied.  The OS/2 C compiler gets confused if -  the number of actuals and the number of formals differ.  (ANSI C -  doesn't require this to work.  The ANSI sanctioned way of doing things -  causes too many compatibility problems.) -   -  Version 3.0  added generational/incremental collection and stubborn -  objects. - -  Version 3.1 added the following features: -- A workaround for a SunOS 4.X SPARC C compiler -  misfeature that caused problems when the collector was turned into -  a dynamic library.   -- A fix for a bug in GC_base that could result in a memory fault. -- A fix for a performance bug (and several other misfeatures) pointed -  out by Dave Detlefs and Al Dosser. -- Use of dirty bit information for static data under Solaris 2.X. -- DEC Alpha/OSF1 support (thanks to Al Dosser). -- Incremental collection on more platforms. -- A more refined heap expansion policy.  Less space usage by default. -- Various minor enhancements to reduce space usage, and to reduce -  the amount of memory scanned by the collector. -- Uncollectable allocation without per object overhead. -- More conscientious handling of out-of-memory conditions. -- Fixed a bug in debugging stubborn allocation. -- Fixed a bug that resulted in occasional erroneous reporting of smashed -  objects with debugging allocation. -- Fixed bogus leak reports of size 4096 blocks with FIND_LEAK. - -  Version 3.2 fixed a serious and not entirely repeatable bug in -  the incremental collector.  It appeared only when dirty bit info -  on the roots was available, which is normally only under Solaris. -  It also added GC_general_register_disappearing_link, and some -  testing code.  Interface.c disappeared. - -  Version 3.3 fixes several bugs and adds new ports: -- PCR-specific bugs. -- Missing locking in GC_free, redundant FASTUNLOCK -  in GC_malloc_stubborn, and 2 bugs in -  GC_unregister_disappearing_link. -  All of the above were pointed out by Neil Sharman -  (neil@cs.mu.oz.au). -- Common symbols allocated by the SunOS4.X dynamic loader -  were not included in the root set. -- Bug in GC_finalize (reported by Brian Beuning and Al Dosser) -- Merged Amiga port from Jesper Peterson (untested) -- Merged NeXT port from Thomas Funke (significantly -  modified and untested) - -  Version 3.4: -- Fixed a performance bug in GC_realloc. -- Updated the amiga port. -- Added NetBSD and 386BSD ports. -- Added cord library. -- Added trivial performance enhancement for -  ALL_INTERIOR_POINTERS.  (Don't scan last word.) -   -  Version 3.5 -- Minor collections now mark from roots only once, if that -  doesn't cause an excessive pause. -- The stack clearing heuristic was refined to prevent anomalies -  with very heavily recursive programs and sparse stacks. -- Fixed a bug that prevented mark stack growth in some cases. -  GC_objects_are_marked should be set to TRUE after a call -  to GC_push_roots and as part of GC_push_marked, since -  both can now set mark bits.  I think this is only a performance -  bug, but I wouldn't bet on it.  It's certainly very hard to argue -  that the old version was correct. -- Fixed an incremental collection bug that prevented it from -  working at all when HBLKSIZE != getpagesize() -- Changed dynamic_loading.c to include gc_priv.h before testing -  DYNAMIC_LOADING.  SunOS dynamic library scanning -  must have been broken in 3.4. -- Object size rounding now adapts to program behavior. -- Added a workaround (provided by Manuel Serrano and -  colleagues) to a long-standing SunOS 4.X (and 3.X?) ld bug -  that I had incorrectly assumed to have been squished. -  The collector was broken if the text segment size was within -  32 bytes of a multiple of 8K bytes, and if the beginning of -  the data segment contained interesting roots.  The workaround -  assumes a demand-loadable executable.  The original may have -  have "worked" in some other cases. -- Added dynamic library support under IRIX5. -- Added support for EMX under OS/2 (thanks to Ari Huttunen). -   -Version 3.6: -- fixed a bug in the mark stack growth code that was introduced -  in 3.4. -- fixed Makefile to work around DEC AXP compiler tail recursion -  bug. - -Version 3.7: -- Added a workaround for an HP/UX compiler bug. -- Fixed another stack clearing performance bug.  Reworked -  that code once more. -   -Version 4.0: -- Added support for Solaris threads (which was possible -  only by reimplementing some fraction of Solaris threads, -  since Sun doesn't currently make the thread debugging -  interface available). -- Added non-threads win32 and win32S support. -- (Grudgingly, with suitable muttering of obscenities) renamed -  files so that the collector distribution could live on a FAT -  file system.  Files that are guaranteed to be useless on -  a PC still have long names.  Gc_inline.h and gc_private.h -  still exist, but now just include  gc_inl.h and gc_priv.h. -- Fixed a really obscure bug in finalization that could cause -  undetected mark stack overflows.  (I would be surprised if -  any real code ever tickled this one.) -- Changed finalization code to dynamically resize the hash -  tables it maintains.  (This probably does not matter for well- -  -written code.  It no doubt does for C++ code that overuses -  destructors.) -- Added typed allocation primitives.  Rewrote the marker to -  accommodate them with more reasonable efficiency.  This -  change should also speed up marking for GC_malloc allocated -  objects a little.  See gc_typed.h for new primitives. -- Improved debugging facilities slightly.  Allocation time -  stack traces are now kept by default on SPARC/SUNOS4. -  (Thanks to Scott Schwartz.) -- Added better support for small heap applications. -- Significantly extended cord package.  Fixed a bug in the -  implementation of lazily read files.  Printf and friends now -  have cord variants.  Cord traversals are a bit faster. -- Made ALL_INTERIOR_POINTERS recognition the default. -- Fixed de so that it can run in constant space, independent -  of file size.  Added simple string searching to cords and de. -- Added the Hull-Ellis C++ interface. -- Added dynamic library support for OSF/1. -  (Thanks to Al Dosser and Tim Bingham at DEC.) -- Changed argument to GC_expand_hp to be expressed -  in units of bytes instead of heap blocks.  (Necessary -  since the heap block size now varies depending on -  configuration.  The old version was never very clean.) -- Added GC_get_heap_size().  The previous "equivalent" -  was broken. -- Restructured the Makefile a bit.   - -Since version 4.0: -- Changed finalization implementation to guarantee that -  finalization procedures are called outside of the allocation -  lock, making direct use of the interface a little less dangerous. -  MAY BREAK EXISTING CLIENTS that assume finalizers -  are protected by a lock.  Since there seem to be few multithreaded -  clients that use finalization, this is hopefully not much of -  a problem. -- Fixed a gross bug in CORD_prev. -- Fixed a bug in blacklst.c that could result in unbounded -  heap growth during startup on machines that do not clear -  memory obtained from the OS (e.g. win32S). -- Ported de editor to win32/win32S.  (This is now the only -  version with a mouse-sensitive UI.) -- Added GC_malloc_ignore_off_page to allocate large arrays -  in the presence of ALL_INTERIOR_POINTERS. -- Changed GC_call_with_alloc_lock to not disable signals in -  the single-threaded case. -- Reduced retry count in GC_collect_or_expand for garbage -  collecting when out of memory. -- Made uncollectable allocations bypass black-listing, as they -  should. -- Fixed a bug in typed_test in test.c that could cause (legitimate) -  GC crashes. -- Fixed some potential synchronization problems in finalize.c -- Fixed a real locking problem in typd_mlc.c. -- Worked around an AIX 3.2 compiler feature that results in -  out of bounds memory references. -- Partially worked around an IRIX5.2 beta problem (which may -  or may not persist to the final release). -- Fixed a bug in the heap integrity checking code that could -  result in explicitly deallocated objects being identified as -  smashed.  Fixed a bug in the dbg_mlc stack saving code -  that caused old argument pointers to be considered live. -- Fixed a bug in CORD_ncmp (and hence CORD_str). -- Repaired the OS2 port, which had suffered from bit rot -  in 4.0.  Worked around what appears to be CSet/2 V1.0 -  optimizer bug. -- Fixed a Makefile bug for target "c++". - -Since version 4.1: -- Multiple bug fixes/workarounds in the Solaris threads version. -  (It occasionally failed to locate some register contents for -  marking.  It also turns out that thr_suspend and friends are -  unreliable in Solaris 2.3.  Dirty bit reads appear -  to be unreliable under some weird  -  circumstances.  My stack marking code -  contained a serious performance bug.  The new code is -  extremely defensive, and has not failed in several cpu -  hours of testing.  But  no guarantees ...) -- Added MacOS support (thanks to Patrick Beard.) -- Fixed several syntactic bugs in gc_c++.h and friends.  (These -  didn't bother g++, but did bother most other compilers.) -  Fixed gc_c++.h finalization interface.  (It didn't.) -- 64 bit alignment for allocated objects was not guaranteed in a -  few cases in which it should have been. -- Added GC_malloc_atomic_ignore_off_page. -- Added GC_collect_a_little. -- Added some prototypes to gc.h. -- Some other minor bug fixes (notably in Makefile). -- Fixed OS/2 / EMX port (thanks to Ari Huttunen). -- Fixed AmigaDOS port. (thanks to Michel Schinz). -- Fixed the DATASTART definition under Solaris.  There -  was a 1 in 16K chance of the collector missing the first -  64K of static data (and thus crashing). -- Fixed some blatant anachronisms in the README file. -- Fixed PCR-Makefile for upcoming PPCR release. - -Since version 4.2: -- Fixed SPARC alignment problem with GC_DEBUG. -- Fixed Solaris threads /proc workaround.  The real -  problem was an interaction with mprotect. -- Incorporated fix from Patrick Beard for gc_c++.h (now gc_cpp.h). -- Slightly improved allocator space utilization by -  fixing the GC_size_map mechanism. -- Integrated some Sony News and MIPS RISCos 4.51 -  patches.  (Thanks to Nobuyuki Hikichi of -  Software Research Associates, Inc. Japan) -- Fixed HP_PA alignment problem.  (Thanks to -  xjam@cork.cs.berkeley.edu.) -- Added GC_same_obj and friends.  Changed GC_base -  to return 0 for pointers past the end of large objects. -  Improved GC_base performance with ALL_INTERIOR_POINTERS -  on machines with a slow integer mod operation. -  Added GC_PTR_ADD, GC_PTR_STORE, etc. to prepare -  for preprocessor. -- changed the default on most UNIX machines to be that -  signals are not disabled during critical GC operations. -  This is still ANSI-conforming, though somewhat dangerous -  in the presence of signal handlers. But the performance -  cost of the alternative is sometimes problematic. -  Can be changed back with a minor Makefile edit. -- renamed IS_STRING in gc.h, to CORD_IS_STRING, thus -  following my own naming convention.  Added the function -  CORD_to_const_char_star. -- Fixed a gross bug in GC_finalize.  Symptom: occasional -  address faults in that function.  (Thanks to Anselm -  Baird-Smith (Anselm.BairdSmith@inria.fr) -- Added port to ICL DRS6000 running DRS/NX.  Restructured -  things a bit to factor out common code, and remove obsolete -  code.  Collector should now run under SUNOS5 with either -  mprotect or /proc dirty bits.  (Thanks to Douglas Steel -  (doug@wg.icl.co.uk)). -- More bug fixes and workarounds for Solaris 2.X.  (These were -  mostly related to putting the collector in a dynamic library, -  which didn't really work before.  Also SOLARIS_THREADS -  didn't interact well with dl_open.)  Thanks to btlewis@eng.sun.com. -- Fixed a serious performance bug on the DEC Alpha.  The text -  segment was getting registered as part of the root set. -  (Amazingly, the result was still fast enough that the bug -  was not conspicuous.) The fix works on OSF/1, version 1.3. -  Hopefully it also works on other versions of OSF/1 ... -- Fixed a bug in GC_clear_roots. -- Fixed a bug in GC_generic_malloc_words_small that broke -  gc_inl.h.  (Reported by Antoine de Maricourt.  I broke it -  in trying to tweak the Mac port.)  -- Fixed some problems with cord/de under Linux. -- Fixed some cord problems, notably with CORD_riter4. -- Added DG/UX port. -  Thanks to Ben A. Mesander (ben@piglet.cr.usgs.gov) -- Added finalization registration routines with weaker ordering -  constraints.  (This is necessary for C++ finalization with -  multiple inheritance, since the compiler often adds self-cycles.) -- Filled the holes in the SCO port. (Thanks to Michael Arnoldus -  <chime@proinf.dk>.) -- John Ellis' additions to the C++ support:  From John: - -* I completely rewrote the documentation in the interface gc_c++.h -(later renamed gc_cpp.h).  I've tried to make it both clearer and more -precise. - -* The definition of accessibility now ignores pointers from an -finalizable object (an object with a clean-up function) to itself. -This allows objects with virtual base classes to be finalizable by the -collector.  Compilers typically implement virtual base classes using -pointers from an object to itself, which under the old definition of -accessibility prevented objects with virtual base classes from ever -being collected or finalized. - -* gc_cleanup now includes gc as a virtual base.  This was enabled by -the change in the definition of accessibility. - -* I added support for operator new[].  Since most (all?) compilers -don't yet support operator new[], it is conditionalized on --DOPERATOR_NEW_ARRAY.  The code is untested, but its trivial and looks -correct. - -* The test program test_gc_c++ (later renamed test_cpp.cc) -tries to test for the C++-specific functionality not tested by the -other programs. -- Added <unistd.h> include to misc.c.  (Needed for ppcr.) -- Added PowerMac port. (Thanks to Patrick Beard again.) -- Fixed "srcdir"-related Makefile problems.  Changed things so -  that all externally visible include files always appear in the -  include subdirectory of the source.  Made gc.h directly -  includable from C++ code.  (These were at Per -  Bothner's suggestion.) -- Changed Intel code to also mark from ebp (Kevin Warne's -  suggestion). -- Renamed C++ related files so they could live in a FAT -  file system. (Charles Fiterman's suggestion.) -- Changed Windows NT Makefile to include C++ support in -  gc.lib.  Added C++ test as Makefile target. -   -Since version 4.3: - - ASM_CLEAR_CODE was erroneously defined for HP -   PA machines, resulting in a compile error. - - Fixed OS/2 Makefile to create a library.  (Thanks to -   Mark Boulter (mboulter@vnet.ibm.com)). - - Gc_cleanup objects didn't work if they were created on -   the stack.  Fixed. - - One copy of Gc_cpp.h in the distribution was out of  -   synch, and failed to document some known compiler -   problems with explicit destructor invocation.  Partially -   fixed.  There are probably other compilers on which -   gc_cleanup is miscompiled. - - Fixed Makefile to pass C compiler flags to C++ compiler. - - Added Mac fixes. - - Fixed os_dep.c to work around what appears to be -   a new and different VirtualQuery bug under newer -   versions of win32S. - - GC_non_gc_bytes was not correctly maintained by -   GC_free.  Fixed.  Thanks to James Clark (jjc@jclark.com). - - Added GC_set_max_heap_size. - - Changed allocation code to ignore blacklisting if it is preventing -   use of a very large block of memory.  This has the advantage -   that naive code allocating very large objects is much more -   likely to work.  The downside is you might no -   longer find out that such code should really use -   GC_malloc_ignore_off_page. - - Changed GC_printf under win32 to close and reopen the file -   between calls.  FAT file systems otherwise make the log file -   useless for debugging. - - Added GC_try_to_collect and GC_get_bytes_since_gc.  These -   allow starting an abortable collection during idle times.  -   This facility does not require special OS support.  (Thanks to -   Michael Spertus of Geodesic Systems for suggesting this.  It was -   actually an easy addition.  Kumar Srikantan previously added a similar -   facility to a now ancient version of the collector.  At the time -   this was much harder, and the result was less convincing.) - - Added some support for the Borland development environment.  (Thanks -   to John Ellis and Michael Spertus.) - - Removed a misfeature from checksums.c that caused unexpected  -   heap growth.  (Thanks to Scott Schwartz.) - - Changed finalize.c to call WARN if it encounters a finalization cycle. -   WARN is defined in gc_priv.h to write a message, usually to stdout. -   In many environments, this may be inappropriate. - - Renamed NO_PARAMS in gc.h to GC_NO_PARAMS, thus adhering to my own -   naming convention. - - Added GC_set_warn_proc to intercept warnings. - - Fixed Amiga port. (Thanks to Michel Schinz (schinz@alphanet.ch).) - - Fixed a bug in mark.c that could result in an access to unmapped -   memory from GC_mark_from_mark_stack on machines with unaligned -   pointers. - - Fixed a win32 specific performance bug that could result in scanning of -   objects allocated with the system malloc. - - Added REDIRECT_MALLOC. - -Since version 4.4: - - Fixed many minor and one major README bugs. (Thanks to Franklin Chen -   (chen@adi.com) for pointing out many of them.) - - Fixed ALPHA/OSF/1 dynamic library support. (Thanks to Jonathan Bachrach -   (jonathan@harlequin.com)). - - Added incremental GC support (MPROTECT_VDB) for Linux (with some -   help from Bruno Haible). - - Altered SPARC recognition tests in gc.h and config.h (mostly as -   suggested by Fergus Henderson). - - Added basic incremental GC support for win32, as implemented by -   Windows NT and Windows 95.  GC_enable_incremental is a noop -   under win32s, which doesn't implement enough of the VM interface. - - Added -DLARGE_CONFIG. - - Fixed GC_..._ignore_off_page to also function without -   -DALL_INTERIOR_POINTERS. - - (Hopefully) fixed RS/6000 port.  (Only the test was broken.) - - Fixed a performance bug in the nonincremental collector running -   on machines supporting incremental collection with MPROTECT_VDB -   (e.g. SunOS 4, DEC AXP).  This turned into a correctness bug under -   win32s with win32 incremental collection.  (Not all memory protection -   was disabled.) - - Fixed some ppcr related bit rot. - - Caused dynamic libraries to be unregistered before reregistering. -   The old way turned out to be a performance bug on some machines. - - GC_root_size was not properly maintained under MSWIN32. - - Added -DNO_DEBUGGING and GC_dump. - - Fixed a couple of bugs arising with SOLARIS_THREADS + -   REDIRECT_MALLOC. - - Added NetBSD/M68K port.  (Thanks to Peter Seebach -   <seebs@taniemarie.solon.com>.) - - Fixed a serious realloc bug.  For certain object sizes, the collector -   wouldn't scan the expanded part of the object.  (Thanks to Clay Spence -   (cds@peanut.sarnoff.com) for noticing the problem, and helping me to -   track it down.) -    -Since version 4.5: - - Added Linux ELF support.  (Thanks to Arrigo Triulzi <arrigo@ic.ac.uk>.) - - GC_base crashed if it was called before any other GC_ routines. -   This could happen if a gc_cleanup object was allocated outside the heap -   before any heap allocation. - - The heap expansion heuristic was not stable if all objects had finalization -   enabled.  Fixed finalize.c to count memory in finalization queue and -   avoid explicit deallocation.  Changed alloc.c to also consider this count. -   (This is still not recommended.  It's expensive if nothing else.)  Thanks -   to John Ellis for pointing this out. - - GC_malloc_uncollectable(0) was broken.  Thanks to Phong Vo for pointing -   this out. - - The collector didn't compile under Linux 1.3.X.  (Thanks to Fred Gilham for -   pointing this out.)  The current workaround is ugly, but expected to be -   temporary. - - Fixed a formatting problem for SPARC stack traces. - - Fixed some '=='s in os_dep.c that should have been assignments. -   Fortunately these were in code that should never be executed anyway. -   (Thanks to Fergus Henderson.) - - Fixed the heap block allocator to only drop blacklisted blocks in small -   chunks.  Made BL_LIMIT self adjusting.  (Both of these were in response -   to heap growth observed by Paul Graham.) - - Fixed the Metrowerks/68K Mac code to also mark from a6.  (Thanks -   to Patrick Beard.) - - Significantly updated README.debugging. - - Fixed some problems with longjmps out of signal handlers, especially under -   Solaris.  Added a workaround for the fact that siglongjmp doesn't appear to -   do the right thing with -lthread under Solaris. - - Added MSDOS/djgpp port.  (Thanks to Mitch Harris  (maharri@uiuc.edu).) - - Added "make reserved_namespace" and "make user_namespace".  The -   first renames ALL "GC_xxx" identifiers as "_GC_xxx".  The second is the -   inverse transformation.  Note that doing this is guaranteed to break all -   clients written for the other names. - - descriptor field for kind NORMAL in GC_obj_kinds with ADD_BYTE_AT_END -   defined should be -ALIGNMENT not WORDS_TO_BYTES(-1).  This is -   a serious bug on machines with pointer alignment of less than a word. - - GC_ignore_self_finalize_mark_proc didn't handle pointers to very near the -   end of the object correctly.  Caused failures of the C++ test on a DEC Alpha -   with g++. - - gc_inl.h still had problems.  Partially fixed.  Added warnings at the -   beginning to hopefully specify the remaining dangers. - - Added DATAEND definition to config.h. - - Fixed some of the .h file organization.  Fixed "make floppy". -  -Since version 4.6: - - Fixed some compilation problems with -DCHECKSUMS (thanks to Ian Searle) - - Updated some Mac specific files to synchronize with Patrick Beard. - - Fixed a serious bug for machines with non-word-aligned pointers. -   (Thanks to Patrick Beard for pointing out the problem.  The collector -   should fail almost any conceivable test immediately on such machines.) - -Since version 4.7: - - Changed a "comment" in a MacOS specific part of mach-dep.c that caused -   gcc to fail on other platforms. - -Since version 4.8 - - More README.debugging fixes. - - Objects ready for finalization, but not finalized in the same GC -   cycle, could be prematurely collected.  This occasionally happened -   in test_cpp. - - Too little memory was obtained from the system for very large -   objects.  That could cause a heap explosion if these objects were -   not contiguous (e.g. under PCR), and too much of them was blacklisted. - - Due to an improper initialization, the collector was too hesitant to -   allocate blacklisted objects immediately after system startup. - - Moved GC_arrays from the data into the bss segment by not explicitly -   initializing it to zero.  This significantly -   reduces the size of executables, and probably avoids some disk accesses -   on program startup.  It's conceivable that it might break a port that I -   didn't test. - - Fixed EMX_MAKEFILE to reflect the gc_c++.h to gc_cpp.h renaming which -   occurred a while ago. - -Since 4.9: - - Fixed a typo around a call to GC_collect_or_expand in alloc.c.  It broke -   handling of out of memory.  (Thanks to Patrick Beard for noticing.) - -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. - -Since 4.11: - - Fixed ElfW definition in dyn_load.c. (Thanks to Fergus Henderson.) -   This prevented the dynamic library support from compiling on some -   older ELF Linux systems. - - Fixed UTS4 port (which I apparently mangled during the integration) -   (Thanks to again to Alistair Crooks.) - - "Make C++" failed on Suns with SC4.0, due to a problem with "bool". -   Fixed in gc_priv.h. - - Added more pieces for GNU win32.  (Thanks to Timothy N. Newsham.) -   The current state of things should suffice for at least some -   applications. - - Changed the out of memory retry count handling as suggested by -   Kenjiro Taura.  (This matters only if GC_max_retries > 0, which -   is no longer the default.) - - If a /proc read failed repeatedly, GC_written_pages was not updated -   correctly.  (Thanks to Peter Chubb for diagnosing this.) - - Under unlikely circumstances, the allocator could infinite loop in -   an out of memory situation.  (Thanks again to Kenjiro Taura for -   identifying the problem and supplying a fix.) - - Fixed a syntactic error in the DJGPP code.  (Thanks to Fergus -   Henderson for finding this by inspection.)  Also fixed a test program -   problem with DJGPP (Thanks to Peter Monks.) - - Atomic uncollectable objects were not treated correctly by the -   incremental collector.  This resulted in weird log statistics and -   occasional performance problems.  (Thanks to Peter Chubb for pointing -   this out.) - - Fixed some problems resulting from compilers that dont define -   __STDC__.  In this case void * and char * were used inconsistently -   in some cases.  (Void * should not have been used at all.  If -   you have an ANSI superset compiler that does not define __STDC__, -   please compile with -D__STDC__=0. Thanks to Manuel Serrano and others -   for pointing out the problem.) - - Fixed a compilation problem on Irix with -n32 and -DIRIX_THREADS. -   Also fixed some other IRIX_THREADS problems which may or may not have -   had observable symptoms. - - Fixed an HP PA compilation problem in dyn_load.c.  (Thanks to -   Philippe Queinnec.) - - SEGV fault handlers sometimes did not get reset correctly.  (Thanks -   to David Pickens.) - - Added a fix for SOLARIS_THREADS on Intel.  (Thanks again to David -   Pickens.)  This probably needs more work to become functional. - - Fixed struct sigcontext_struct in os_dep.c for compilation under -   Linux 2.1.X.	(Thanks to Fergus Henderson.) - - Changed the DJGPP STACKBOTTOM and DATASTART values to those suggested -   by Kristian Kristensen.  These may still not be right, but it is -   it is likely to work more often than what was there before.  They may -   even be exactly right. - - Added a #include <string.h> to test_cpp.cc.  This appears to help -   with HP/UX and gcc.  (Thanks to assar@sics.se.) - - Version 4.11 failed to run in incremental mode on recent 64-bit Irix -   kernels.  This was a problem related to page unaligned heap segments. -   Changed the code to page align heap sections on all platforms. -   (I had mistakenly identified this as a kernel problem earlier. -   It was not.) - - Version 4.11 did not make allocated storage executable, except on -   one or two platforms, due to a bug in a #if test.  (Thanks to Dave -   Grove for pointing this out.) - - Added sparc_sunos4_mach_dep.s to support Sun's compilers under SunOS4. - - Added GC_exclude_static_roots. - - Fixed the object size mapping algorithm.  This shouldn't matter, -   but the old code was ugly. - - Heap checking code could die if one of the allocated objects was -   larger than its base address.  (Unsigned underflow problem.  Thanks -   to Clay Spence for isolating the problem.) - - Added RS6000 (AIX) dynamic library support and fixed STACK_BOTTOM. -   (Thanks to Fred Stearns.) - - Added Fergus Henderson's patches for improved robustness with large -   heaps and lots of blacklisting. - - Added Peter Chubb's changes to support Solaris Pthreads, to support -   MMAP allocation in Solaris, to allow Solaris to find dynamic libraries -   through /proc, to add malloc_typed_ignore_off_page, and a few other -   minor features and bug fixes. - - The Solaris 2 port should not use sbrk.  I received confirmation from -   Sun that the use of sbrk and malloc in the same program is not -   supported.  The collector now defines USE_MMAP by default on Solaris. - - Replaced the djgpp makefile with Gary Leavens' version. - - Fixed MSWIN32 detection test. - - Added Fergus Henderson's patches to allow putting the collector into -   a DLL under GNU win32. - - Added Ivan V. Demakov's port to Watcom C on X86. - - Added Ian Piumarta's Linux/PowerPC port. - - On Brian Burton's suggestion added PointerFreeGC to the placement -   options in gc_cpp.h.  This is of course unsafe, and may be controversial. -   On the other hand, it seems to be needed often enough that it's worth -   adding as a standard facility. - -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. - -Since 5.0 alpha3 - - Added protection fault handling patch for Linux/M68K from Fergus -   Henderson and Roman Hodek. - - Removed the tests for SGI_SOURCE in new_gc_alloc.h.  This was causing that -   interface to fail on nonSGI platforms. - - Changed the Linux stack finding code to use /proc, after changing it -   to use HEURISTIC1.  (Thanks to David Mossberger for pointing out the -   /proc hook.) - - Added HP/UX incremental GC support and HP/UX 11 thread support. -   Thread support is currently still flakey. - - Added basic Linux/IA64 support. - - Integrated Anthony Green's PicoJava support. - - Integrated Scott Ananian's StrongARM/NetBSD support. - - Fixed some fairly serious performance bugs in the incremental -   collector.  These have probably been there essentially forever. -   (Mark bits were sometimes set before scanning dirty pages. -   The reclaim phase unnecessarily dirtied full small object pages.) - - Changed the reclaim phase to ignore nearly full pages to avoid -   touching them. - - Limited GC_black_list_spacing to roughly the heap growth increment. - - Changed full collection triggering heuristic to decrease full GC -   frequency by default, but to explicitly trigger full GCs during -   heap growth.  This doesn't always improve things, but on average it's -   probably a win. - - GC_debug_free(0, ...) failed.  Thanks to Fergus Henderson for the -   bug report and fix. - -Since 5.0 alpha4 - - GC_malloc_explicitly_typed and friends sometimes failed to -   initialize first word. - - Added allocation routines and support in the marker for mark descriptors -   in a type structure referenced by the first word of an object.  This was -   introduced to support gcj, but hopefully in a way that makes it -   generically useful. - - Added GC_requested_heapsize, and inhibited collections in nonincremental -   mode if the actual used heap size is less than what was explicitly -   requested. - - The Solaris pthreads version of GC_pthread_create didn't handle a NULL -   attribute pointer.  Solaris thread support used the wrong default thread -   stack size.  (Thanks to Melissa O'Neill for the patch.) - - Changed PUSH_CONTENTS macro to no longer modify first parameter. -   This usually doesn't matter, but it was certainly an accident waiting -   to happen ... - - Added GC_register_finalizer_no_order and friends to gc.h.  They're -   needed by Java implementations. - - Integrated a fix for a win32 deadlock resulting from clock() calling -   malloc.  (Thanks to Chris Dodd.) - - Integrated Hiroshi Kawashima's port to Linux/MIPS.  This was designed -   for a handheld platform, and may or may not be sufficient for other -   machines. - - Fixed a va_arg problem with the %c specifier in cordprnt.c.  It appears -   that this was always broken, but recent versions of gcc are the first to -   report the (statically detectable) bug. - - Added an attempt at a more general solution to dlopen races/deadlocks. -   GC_dlopen now temporarily disables collection.  Still not ideal, but ... - - Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64 -   prefetch instructions.  May improve performance measurably, but I'm not -   sure the code will run correctly on processors that don't support the -   instruction.  Won't build except with very recent gcc. - - Added caching for header lookups in the marker.  This seems to result -   in a barely measurable performance gain.  Added support for interleaved -   lookups of two pointers, but unconfigured that since the performance -   gain is currently near zero, and it adds to code size. - - Changed Linux DATA_START definition to check both data_start and -   __data_start, since nothing else seems to be portable. - - Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function -   wrapping mechanism.  Probably currently useful only on Linux. - - Moved some variables for the scratch allocator into GC_arrays, on -   Martin Hirzel's suggestion. - - Fixed a win32 threads bug that caused the collector to not look for -   interior pointers from one of the thread stacks without -   ALL_INTERIOR_POINTERS.  (Thanks to Jeff Sturm.) - - Added Mingw32 support.  (Thanks again to Jeff Sturm for the patch.) - - Changed the alpha port to use the generic register scanning code instead -   of alpha_mach_dep.s.  Alpha_mach_dep.s doesn't look for pointers in fp -   registers, but gcc sometimes spills pointers there.  (Thanks to Manuel -   Serrano for helping me debug this by email.)  Changed the IA64 code to -   do something similar for similar reasons. - -[5.0alpha5 doesn't really exist, but it may have escaped.] - -Since 5.0alpha6: - - -DREDIRECT_MALLOC was broken in alpha6. Fixed. - - Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to -   accept it. - - Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be -   linked into every executable. - - Added PREFETCH to bitmap marker.  Changed it to use the header cache. - - GC_push_marked sometimes pushed one object too many, resulting in a -   segmentation fault in GC_mark_from_mark_stack.  This was probably an old -   bug.  It finally showed up in gctest on win32. - - Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE -   when SMALL_CONFIG was defined.  This was no doubt a major performance bug for -   the default win32 configuration. - - Removed -DSMALL_CONFIG from NT_MAKEFILE.  It seemed like an anchronism now -   that the average PC has 64MB or so. - - Integrated Bryce McKinley's patches for linux threads and dynamic loading -   from the libgcj tree.  Turned on dynamic loading support for Linux/PPC. - - Changed the stack finding code to use environ on HP/UX.  (Thanks -   to Gustavo Rodriguez-Rivera for the suggestion.)  This should probably -   be done on other platforms, too.  Since I can't test those, that'll -   wait until after 5.0. - -Since 5.0alpha7: - - Fixed threadlibs.c for linux threads.  -DUSE_LD_WRAP was broken and -   -ldl was omitted.  Fixed Linux stack finding code to handle -   -DUSE_LD_WRAP correctly. - - Added MSWIN32 exception handler around marker, so that the collector -   can recover from root segments that are unmapped during the collection. -   This caused occasional failures under Windows 98, and may also be -   an issue under Windows NT/2000. - -Since 5.0 - - Fixed a gc.h header bug which showed up under Irix.  (Thanks to -   Dan Sullivan.) - - Fixed a typo in GC_double_descr in typd_mlc.c. -   This probably could result in objects described by array descriptors not -   getting traced correctly.  (Thanks to Ben Hutchings for pointing this out.) - - The block nearly full tests in reclaim.c were not correct for 64 bit -   environments.  This could result in unnecessary heap growth under unlikely -   conditions. - -Since 5.1 - - dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it -   was defined as a macro.  This prevented the collector from building on -   Irix. - - We quietly assumed that indirect mark descriptors were never 0. -   Our own typed allocation interface violated that.  This could result -   in segmentation faults in the marker with typed allocation. - - Fixed a _DUSE_MUNMAP bug in the heap block allocation code. -   (Thanks to Ben Hutchings for the patch.) - - Taught the collector about VC++ handling array operator new. -   (Thanks again to Ben Hutchings for the patch.) - - The two copies of gc_hdrs.h had diverged.  Made one a link to the other -   again. - -Since 5.2  (A few 5.2 patches are not in 6.0alpha1) - - Fixed _end declaration for OSF1. - - There were lots of spurious leak reports in leak detection mode, caused -   by the fact that some pages were not being swept, and hence unmarked -   objects weren't making it onto free lists.  (This bug dated back to 5.0.) - - Fixed a typo in the liblinuxgc.so Makefile rule. - - Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work -   around a Windows 95 GetOpenFileName problem.  (Thanks to Jacob Navia.) - -Since 5.3 - - Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH. -   (Thanks to Shawn Wagner for actually testing this.) - - Fixed GC_is_thread_stack in solaris_threads.c.  It forgot to return a value -   in the common case.  I wonder why nobody noticed? - - Fixed another silly syntax problem in GC_double_descr.  (Thanks to -   Fergus Henderson for finding it.) - - Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice. - -Since 5.4  (A few 5.3 patches are not in 6.0alpha2) - - Added HP/PA prefetch support. - - Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve -   the reliability of generating pointer backtrace information, e.g. in -   the Bigloo environment. - - Added parallel marking support (-DPARALLEL_MARK).  This currently -   works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt -   to other platforms.  This is intended to be a lighter-weight (less -   new code, probably not as scalable) solution than the work by Toshio Endo -   et al, at the University of Tokyo.  A number of their ideas were -   reused, though the code wasn't, and the underlying data structure -   is significantly different.  In particular, we keep the global mark -   stack as a single shared data structure, but most of the work is done -   on smaller thread-local mark stacks. - - Changed GC_malloc_many to be cheaper, and to require less mutual exclusion -   with -DPARALLEL_MARK. - - Added full support for thread local allocation under Linux -   (-DTHREAD_LOCAL_ALLOC).  This is a thin veneer on GC_malloc_many, and -   should be easily portable to other platforms, especially those that -   support pthreads. - - CLEAR_DOUBLE was not always getting invoked when it should have been. - - GC_gcj_malloc and friends used different out of memory handling than -   everything else, probably because I forgot about one when I implemented -   the other.  They now both call GC_oom_fn(), not GC_oom_action(). - - Integrated Jakub Jelinek's fixes for Linux/SPARC. - - Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of -   GC_arrays, and separately registered the first two as excluded roots. -   This makes code compiled with gc_inl.h less dependent on the -   collector version.  (It would be nice to remove the inclusion of -   gc_priv.h by gc_inl.h completely, but we're not there yet.  The -   locking definitions in gc_priv.h are still referenced.) -   This change was later coniditoned on SEPARATE_GLOBALS, which -   is not defined by default, since it involves a performance hit. - - Register GC_obj_kinds separately as an excluded root region.  The -   attempt to register it with GC_arrays was usually failing.  (This wasn't -   serious, but seemed to generate some confusion.)  - - Moved backptr.h to gc_backptr.h. - -Since 6.0alpha1 - - Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms -   for which that's expensive. - - Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems. - - Added a missing volatile to OR_WORD and renamed the parameter to -   GC_compare_and_swap so it's not a C++ reserved word.  (Thanks to -   Toshio Endo for pointing out both of those.) - - Changed Linux dynamic library registration code to look at /proc/self/maps -   instead of the rld data structures when REDIRECT_MALLOC is defined. -   Otherwise some of the rld data data structures may be prematurely garbage -   collected.  (Thanks to Eric Benson for helping to track this down.) - - Fixed USE_LD_WRAP a bit more, so it should now work without threads. - - Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness. -   Tomporarily added some backward compatibility definitions.  Renamed -   USE_LD_WRAP to GC_USE_LD_WRAP. - - Many MACOSX POWERPC changes, some additions to the gctest output, and -   a few minor generic bug fixes.  (Thanks to Dietmar Planitzer.) - -Since 6.0 alpha2 - - Fixed the /proc/self/maps code to not seek, since that apparently is not -   reliable across all interesting kernels. - - Fixed some compilation problems in the absence of PARALLEL_MARK -   (introduced in alpha2). - - Fixed an algorithmic problem with PARALLEL_MARK.  If work needs to -   be given back to the main mark "stack", the BOTTOM entries of the local -   stack should be given away, not the top ones.  This has substantial -   performance impact, especially for > 2 processors, from what I can tell. - - Extracted gc_lock.h from gc_priv.h.  This should eventually make it a -   bit easier to avoid including gc_priv.h in clients. - - Moved all include files to include/ and removed duplicate links to the -   same file.  The old scheme was a bad idea because it was too easy to get the -   copies out of sync, and many systems don't support hard links. -   Unfortunately, it's likely that I broke some of the non-Unix Makefiles in -   the process, although I tried to update them appropriately. - - Removed the partial support for a copied nursery.  It's not clear that -   this would be a tremendous win, since we don't consistently lose to -   generational copying collectors.  And it would significantly complicate -   many things.  May be reintroduced if/when it really turns out to win. - - Removed references to IRIX_JDK_THREADS, since I believe there never -   were and never will be any clients. - - Added some code to linux_threads.c to possibly support HPUX threads -   using the Linux code.  Unfortunately, it doesn't work yet, and is -   currently disabled. - - Added support under Linux/X86 for saving the call chain, both in (debug) -   objects for client debugging, and in GC_arrays._last_stack for GC -   debugging.  This was previously supported only under Solaris.  It is -   not enabled by default under X86, since it requires that code be compiled -   to explicitly dave frame pointers on the call stack.  (With gcc this -   currently happens by default, but is often turned off explicitly.) -   To turn it on, define SAVE_CALL_CHAIN. -  -Since 6.0 alpha3 - - Moved up the detection of mostly full blocks to the initiatiation of the -   sweep phase.  This eliminates some lock conention in the PARALLEL_MARK case, -   as multiple threads try to look at mostly full blocks concurrently. - - Restored the code in GC_malloc_many that grabs a prefix of the global -   free list.  This avoids the case in which every GC_malloc_many call -   tries and fails to allocate a new heap block, and the returns a single -   object from the global free list. - - Some minor fixes in new_hblk.c.  (Attempted to build free lists in order -   of increasing addresses instead of decreasing addresses for cache performance -   reasons.  But this seems to be only a very minor gain with -DEAGER_SWEEP, -   and a loss in other cases.  So the change was backed out.) - - Fixed some of the documentation.  (Thanks in large part to Fergus -   Henderson.) - - Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform -   large numbers of mmaps.  (Thanks to Eric Benson.)  Also fixed that code to -   deal with short reads. - - Added GC_get_total_bytes().  - - Fixed leak detection mode to avoid spurious messages under linuxthreads. -   (This should also now be easy for the other supported threads packages. -   But the code is tricky enough that I'm hesitant to do it without being able -   to test.  Everything allocated in the GC thread support itself should be -   explicitly deallocated.) - - Made it possible (with luck) to redirect malloc to GC_local_malloc. - -Since 6.0 alpha4 - - Changed the definition of GC_pause in linux_threads.c to use a volatile -   asm.  Some versions of gcc apparently optimize away writes to local volatile -   variables.  This caused poor locking behaviour starting at about -   4 processors. - - Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep -   to linux_threads.c. -   The first two calls could be used to generally avoid sending GC signals to -   blocked threads, avoiding both premature wakeups and unnecessary overhead. - - Fixed a serious bug in thread-local allocation.  At thread termination, -   GC_free could get called on small integers.  Changed the code for thread -   termination to more efficiently return left-over free-lists. - - Integrated Kjetil Matheussen's BeOS support. - - Rearranged the directory structure to create the doc and tests -   subdirectories. - - Sort of integrated Eric Benson's patch for OSF1.  This provided basic -   OSF1 thread support by suitably extending hpux_irix_threads.c.  Based -   on earlier email conversations with David Butenhof, I suspect that it -   will be more reliable in the long run to base this on linux_threads.c -   instead.  Thus I attempted to patch up linux_threads.c based on Eric's code. -   The result is almost certainly broken, but hopefully close enough that -   someone with access to a machine can pick it up. - - Integrated lots of minor changes from the NetBSD distribution.  (These -   were supplied by David Brownlee.  I'm not sure about the original -   authors.) - - Hacked a bit more on the HP/UX thread-support in linux_threads.c.  It -   now appears to work in the absence of incremental collection.  Renamed -   hpux_irix_threads.c back to irix_threads.c, and removed the attempt to -   support HPUX there. - - Changed gc.h to define _REENTRANT in cases in which it should already -   have been defined. It is still safer to also define it on the command -   line.  - -Since 6.0alpha5: - - Changed the definition of DATASTART on ALPHA and IA64, where data_start -   and __data_start are not defined by earlier versions of glibc.  This might -   need to be fixed on other platforms as well. - - Changed the way the stack base and backing store base are found on IA64. -   This should now remain reliable on future kernels.  But since it relies -   on /proc, it will no longer work in the simulated NUE environment. - - Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent -   on the OS.  On non-Unix systems, rand() should be used instead.  Handled -   small RAND_MAX.  (Thanks to Peter Ross for pointing this out.) - - Fixed the cord make rules to create the cord subdirectory, if necessary. -   (Thanks to Doug Moen.) - - Changed fo_object_size calculation in finalize.c.  Turned finalization -   of nonheap object into a no-op.  Removed anachronism from GC_size() -   implementation. - - Changed GC_push_dirty call in solaris_threads.c to GC_push_selected. -   It was missed in a previous renaming. (Thanks to Vladimir Tsichevski -   for pointing this out.) - - Arranged to not not mask SIGABRT in linux_threads.c.  (Thanks to Bryce -   McKinlay.)  - - Added GC_no_dls hook for applications that want to register their own -   roots. - - Integrated Kjetil Matheussen's Amiga changes. - - Added FREEBSD_STACKBOTTOM.  Changed the X86/FreeBSD port to use it. -   (Thanks to Matthew Flatt.) - - Added pthread_detach interception for platforms supported by linux_threads.c -   and irix_threads.c.  Should also be added for Solaris? - - Changed the USE_MMAP code to check for the case in which we got the -   high end of the address space, i.e. mem_ptr + mem_sz == 0.  It appears -   that this can happen under Solaris 7.  It seems to be allowed by what -   I would claim is an oversight in the mmap specification.  (Thanks to Toshio -   Endo for pointing out the problem.) - - Cleanup of linux_threads.c.  Some code was originally cloned from -   irix_threads.c and now unnecessary.  Some comments were obviously wrong. - - (Mostly) fixed a longstanding problem with setting of dirty bits from -   a signal handler.  In the presence of threads, dirty bits could get lost, -   since the etting of a bit in the bit vector was not atomic with respect -   to other updates.  The fix is 100% correct only for platforms for which -   GC_test_and_set is defined.  The goal is to make that all platforms with -   thread support.  Matters only if incremental GC and threads are both -   enabled. - - made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an -   initialization time, instead of build-time option.  This is a  -   nontrivial, high risk change.  It should slow down the code measurably -   only if MERGE_SIZES is not defined, which is a very nonstandard -   configuration.    - - Added doc/README.environment, and implemented what it describes.  This -   allows a number of additional configuration options to be set through -   the environment.  It documents a few previously undocumented options. - - Integrated Eric Benson's leak testing improvements. - - Removed the option to throw away the beginning of each page (DISCARD_WORDS). -   This became less and less useful as processors enforce stricter alignment. -   And it hadn't been tested in ages, and was thus probably broken anyway. - -Since 6.0alpha6: - - Added GC_finalizer_notifier.  Fixed GC_finalize_on_demand.  (The variable -   actually wasn't being tested at the right points.  The build-time flag -   was.) - - Added Tom Tromey's S390 Linux patch. - - Added code to push GC_finalize_now in GC_push_finalizer_structures. -   (Thanks to Matthew Flatt.) - - Added GC_push_gc_structures() to push all GC internal roots. - - Integrated some FreeBSD changes from Matthew Flatt. - - It looks like USRSTACK is not always correctly defined under Solaris. -   Hacked gcconfig.h to attempt to work around the problem.  The result -   is not well tested.  (Thanks again to Matthew Flatt for pointing this -   out.  The gross hack is mine. - HB) - - Added Ji-Yong Chung's win32 threads and C++ fixes. - - Arranged for hpux_test_and_clear.s to no longer be needed or built. -   It was causing build problems with gas, and it's not clear this is -   better than the pthreads alternative on this platform. - - Some MINGW32 fixes from Hubert Garavel. - - Added Initial Hitachi SH4 port from Kaz Kojima. - - Ported thread-local allocation and parallel mark code to HP/UX on PA_RISC. - - Made include/gc_mark.h more public and separated out the really private -   pieces.  This is probably still not quite sufficient for clients that -   want to supply their own kind of type information.  But it's a start. -   This involved lots of identifier renaming to make it namespace clean. - - Added GC_dont_precollect for clients that need complete control over -   the root set. - - GC_is_visible didn't do the right thing with gcj objects.  (Not that -   many people are likely to care, but ...) - - Don't redefine read with GC_USE_LD_WRAP. - - Initial port to LINUX/HP_PA.  Incremental collection and threads are not -   yet supported.  (Incremental collection should work if you have the -   right kernel.  Threads may work with a sufficiently patched pthread -   library.) - - Changed gcconfig.h to recognize __i386__ as an alternative to i386 in -   many places.  (Thanks to Benjamin Lerman.) - - Made win32_threads.c more tolerant of detaching a thread that it didn't -   know about.  (Thanks to Paul Nash.) - - Added Makefile.am and configure.in from gcc to the distribution, with -   minimal changes.  For the moment, those are just placeholders.  In the -   future, we're planning to switch to a GNU-style build environment for -   Un*x-like systems, though the old Makefile will remain as a backup. - - Turned off STUBBORN_ALLOC by default, and added it back as a Makefile -   option. - - Redistributed some functions between malloc.c and mallocx.c, so that -   simple statically linked apps no longer pull in mallocx.o. - - Changed large object allocation to clear the first and last few words -   of each block before releassing the lock.  Otherwise the marker could see -   objects with nonsensical type descriptors. - - Fixed a couple of subtle problems that could result in not recognizing -   interior pointers from the stack.  (I believe these were introduced -   in 6.0alpha6.) - - GC_debug_free_inner called GC_free, which tried to reacquire the -   allocator lock, and hence deadlocked.  (DBG_HDRS_ALL probably never worked -   with threads?) - - Fixed several problems with back traces.  Accidental references to a free -   list could cause the free list pointer to be overwritten by a back pointer. -   There seemed to be some problems with the encoding of root and finalizer -   references. -   -Since 6.0alpha7: - - Changed GC_debug_malloc_replacement and GC_debug_realloc_replacement -   so that they compile under Irix.  (Thanks to Dave Love.) - - Updated powerpc_macosx_mach_dep.s so that it works if the collector -   is in a dynamic library.  (Thanks to Andrew Begel.) - - Transformed README.debugging into debugging.html, updating and -   expanding it in the process.  Added gcdescr.html and tree.html -   from the web site to the GC distribution. - - Fixed several problems related to PRINT_BLACK_LIST. This involved -   restructuring some of the marker macros. - - Fixed some problems with the sizing of objects with debug information. -   Finalization was broken KEEP_BACK_PTRS or PRINT_BLACK_LIST.  Reduced the -   object size with SHORT_DEBUG_HDRS by another word. - - The "Needed to allocate blacklisted ..." warning had inadvertently -   been turned off by default, due to a buggy test in allchblk.c.  Turned -   it back on. - - Removed the marker macros to deal with 2 pointers in interleaved fashion. -   They were messy and the performance improvement seemed minimal.  We'll -   leave such scheduling issues to the compiler. - - Changed Linux/PowerPC test to also check for __powerpc__ in response -   to a discussion on the gcc mailing list. - - On Matthew Flatt's suggestion removed the "static" from the jmp_buf -   declaration in GC_generic_push_regs.  This was causing problems in -   systems that register all of their own roots.  It looks far more correct -   to me without the "static" anyway.  - - Fixed several problems with thread local allocation of pointerfree or -   typed objects.  The collector was reclaiming thread-local free lists, since -   it wasn't following the link fields. - - There was apparently a long-standing race condition related to multithreaded -   incremental collection.  A collection could be started and a thread stopped -   between the memory unprotect system call and the setting of the -   corresponding dirt bit.  I believe this did not affect Solaris or PCR, which -   use a different dirty-bit implementation.  Fixed this by installing -   signal handlers with sigaction instead of signal, and disabling the thread -   suspend signal while in the write-protect handler.  (It is unclear -   whether this scenario ever actually occurred.  I found it while tracking -   down the following:) - - Incremental collection did not cooperate correctly with the PARALLEL_MARK -   implementation of GC_malloc_many or the local_malloc primitves.  It still -   doesn't work well, but it shouldn't lose memory anymore. - - Integrated some changes from the gcc source tree that I had previously -   missed.  (Thanks to Bryce McKinley for the reminder/diff.) - - Added Makefile.direct as a copy of the default Makefile, which would -   normally be overwritten if configure is run. - - Changed the gc.tar target in Makefile.direct to embed the version number -   in the gc directory name.  This will affect future tar file distributions. - - Changed the Irix dynamic library finding code to no longer try to -   eliminate writable text segments under Irix6.x, since that is probably no -   longer necessary, and can apparently be unsafe on occasion.  (Thanks to -   Shiro Kawai for pointing this out.) - - GC_cleanup with GC_DEBUG enabled passed a real object base address to -   GC_debug_register_finalizer_ignore_self, which expected a pointer past the -   debug header.  Call GC_register_finalizer_ignore_self instead, even with -   debugging enabled.  (Thanks to Jean-Daniel Fekete for catching this.) - - The collector didn't build with call chain saving enabled but NARGS=0. -   (Thanks to Maarten Thibaut.) - - Fixed up the GNU-style build files enough so that they work in some -   obvious cases. - - Added initial port to Digital Mars compiler for win32. (Thanks to Walter -   Bright.) - -Since 6.0alpha8: - - added README.macros. - - Made gc.mak a symbolic link to work around winzip's tendency to ignore -   hard links. - - Simplified the setting of NEED_FIND_LIMIT in os_dep.c, possibly breaking -   it on untested platforms. - - Integrated initial GNU HURD port. (Thanks to Chris Lingard and Igor -   Khavkine.) - - A few more fixes for Digital Mars compiler (Walter Bright). - - Fixed gcc version recognition.  Renamed OPERATOR_NEW_ARRAY to -   GC_OPERATOR_NEW_ARRAY.  Changed GC_OPERATOR_NEW_ARRAY to be the default. -   It can be overridden with -DGC_NO_OPERATOR_NEW_ARRAY.  (Thanks to -   Cesar Eduardo Barros.)  - - Changed the byte size to free-list mapping in thread local allocation -   so that size 0 allocations are handled correctly. - - Fixed Linux/MIPS stackbottom for new toolchain. (Thanks to Ryan Murray.) - - Changed finalization registration to invoke GC_oom_fn when it runs out -   of memory. - - Removed lvalue cast in finalize.c.  This caused some debug configurations -   not to build with some non-gcc compilers. - -Since 6.0alpha9: - - Two more bug fixes for KEEP_BACK_PTRS and DBG_HDRS_ALL. - - Fixed a stack clearing problem that resulted in SIGILL with a -   misaligned stack pointer for multithreaded SPARC builds. - - Integrated another HURD patch (thanks to Igor Khavkine). - -Since 6.0: - - Non-debug, atomic allocations could result in bogus smashed object -   reports with debugging on.  (Thanks to Patrick Doyle for the small -   test case.) - - Fixed GC_get_register_stack_base (Itanium only) to work around a glibc -   2.2.4 bug. - - Initial port to HP/UX on Itanium.  Thread support and both 32 and 64 -   bit ABIs appear to work.  Parallel mark support doesn't yet, due to -   some inline assembly code issues.  Thread local allocation does appear -   to work. - - ifdef'ed out glibc2.1/Itanium workaround.  I suspect nobody is using -   that combination anymore. - - Added a patch to make new_gc_alloc.h usable with gcc3.0.  (Thanks to -   Dimitris Vyzovitis for the patch.) - - Debugged 64-bit support on HP/UX PA-RISC. - - Turned on dynamic loading support for FreeBSD/ELF.  (Thanks to Peter -   Housel.) - - Unregistering of finalizers with debugging allocation was broken. -   (Thanks to Jani Kajala for the test case.) - - Old finalizers were not returned correctly from GC_debug_register_finalizer. - - Disabled MPROTECT_VDB for Linux/M68K based on a report that it doesn't work. - - Cleaned up some statistics gathering code in reclaim.c (Thanks to Walter -   Bright.) - - Added some support for OpenBSD/ELF/Linux.  (Thanks to Suzuki Toshiya.) - - Added Jakub Jelinek's patch to use dl_iterate_phdr for dynamic library -   traversal to dyn_load.c.  Changed it to weakly reference dl_iterate_phdr, -   so that the old code is stilll used with old versions of glibc. - - Cleaned up feature test macros for various threads packages and -   integrated (partially functional) FreeBSD threads code from Loren Rittle. -   It's likely that the cleanup broke something, since it touched lots of -   code.  It's also likelly that it fixed some unreported bugs in the -   less common thread implementations, since some of the original code -   didn't stand up to close scrutiny.  Support for the next pthreads -   implementation should be easier to add. - -Since 6.1alpha1: - - No longer wrap read by default in multithreaded applications.  It was -   pointed out on the libgcj list that this holds the allocation lock for -   way too long if the read blocks.  For now, reads into the heap are -   broken with incremental collection.  It's possible to turn this back on -   if you make sure that read calls don't block (e.g. by calling select -   first). - - Fix ifdef in Solaris_threads.h to refer to GC_SOLARIS_THREADS. - - Added check for environment variable GC_IGNORE_GCJ_INFO. - - Added printing of stop-the-world GC times if GC_PRINT_STATS environment -   variable is set. - - The calloc definition in leak_detector.h was missing parentheses, and -   realloc was missing a second argument to GC_REALLOC. -   (Thanks to Elrond (elrond<at>samba-tng.org).) - - Added GC_PRINT_BACK_HEIGHT environment variable and associated -   code, mostly in the new file backgraph.c.  See doc/README.environment. - - Added -DUSE_GLOBAL_ALLOC to work around a Windows NT issue.  (Thanks to -   Jonathan Clark.) - - Integrated port to NEC EWS4800 (MIPS-based workstation, with somewhat -   different address-space layout). This may help for other machines with -   holes in the data segment.  (Thanks to Hironori Sakamoto.) - - Changed the order in which GC_push_roots and friends push things onto -   the mark stack.  GC_push_all calls need to come first, since we can't -   necessarily recovere if those overflow the mark stack.  (Thanks to -   Matthew Flatt for tracking down the problem.) - - Some minor cleanups to mostly support the Intel compiler on Linux/IA64. - -Since 6.1 alpha2: - - Minor cleanup on the gcconfig.h section for SPARC. - - Minor fix to support Intel compiler for I386/Linux. (Thanks to Sven -   Hartrumpf.) - - Added SPARC V9 (64-bit) support.  (Thanks to Jeff Sturm.) - - Restructured the way in which we determine whether or not to keep -   call stacks for debug allocation.  By default SAVE_CALL_COUNT is -   now zero on all platforms.  Added SAVE_CALL_NARGS parameters. -   If possible, use execinfo.h to capture call stack.  (This should -   add support for a number of new platforms, though often at -   considerable runtime expense.) - - Try to print symbolic information for call stacks.  On Linux, we -   do this with a combination of execinfo.h and running addr2line in -   a separate process.  This is both much more expensive and much more -   useful.  Amazingly, it seems to be fast enough for most purposes. - - Redefined strdup if -DREDIRECT_MALLOC is given. - - Changed incremental collector and MPROTECT_VDB implementation so that, -   under favorable conditions, pointerfree objects are not protected. -   Added GC_incremental_protection_needs() to determine ahead of time whether -   pointerfree objects may be protected.  Replaced GC_write_hint() with -   GC_remove_protection(). - - Added test for GC_ENABLE_INCREMENTAL environment variable. - - Made GC_time_limit runtime configurable.  Added GC_PAUSE_TIME_TARGET -   environment variable. - - Eliminated GC_page_sz, a duplicate of GC_page_size. - - Caused the Solaris and Irix thread creation primitives to call -   GC_init_inner(). -  -Since 6.1alpha3: - - Fixed typo in sparc_mach_dep.S, preventing the 64-bit version from -   building.  Increased 64-bit heap size limit in test.c slightly, since -   a functional SPARC collector seems to slightly exceed the old limits. -   (Thanks again to Jeff Sturm.) - - Use NPRGREG in solaris_threads.c, thus printing all registers if things -   go wrong. - - Added GC_MARKERS environment variable to allow use of a single marker -   thread on an MP without confusing the lock implementation. - - Collect much less aggressively in incremental mode with GC_TIME_UNLIMITED. -   This is really a purely generational mode, and we can afford to  -   postpone the collection until the heap is (nearly) full. - - Remove read() wrapper for MPROTECT_VDB.  It was causing more harm than -   good.  It is often no longer needed if system calls avoid writing to -   pointerfull heap objects. - - Fix MACOSX test in gcconfig.h. (Thanks to John Clements.) - - Change GC_test_and_set so that it consistently has one argument. -   Add spaces to ::: in powerpc assembly code in gc_locks.h. -   (Thanks to Ryan Murray.) - - Fixed a formatting error in dbg_mlc.c.  Added prototype to GC_abort() -   declaration.   (Thanks to Michael Smith.) - - Removed "source" argument to GC_find_start().  Eliminate GC_FIND_START(). - - Added win32 recognition code in configure.in.  Changed some of the -   dllimport/export defines in gc.h.  (Thanks to Adam Megacz.) - - GC_malloc_many didn't set hb_last_reclaimed when it called  -   GC_reclaim_generic.  (I'm not sure this matters much, but ...) - - Allocating uncollectable objects with debug information sometimes -   allocated objects that were one byte too small, since uncollectable -   objects don't have the extra byte added at the end.  (Thanks to -   Wink Saville for pointing this out.) - - Added a bit more assertion checking to make sure that gcj objects -   on free lists never have a nonzero second word. - - Replaced BCC_MAKEFILE with an up-to-date one.  (Thanks to  -   Andre Leiradella.) - - Upgraded libtool, cinfigure.in and some related files to hopefully -   support NetBSD/SPARC.  (Thanks to Adrian Bunk.)  Unfortunately, -   libtool 1.4.2 seemed to be buggy due to missing quotes in several -   "test" invocations.  Fixed those in the ltmain.sh script. - - Some win32-specific patches, including the introduction of -   GC_CreateThread.  (Thanks to Adam Megacz.) - - Merged in gcj changes from Anthony Green to support embedded systems. - - Tried to consistently rename preprocessed assembly files with a capital -   .S extension. - - Use alpha_mach_dep.S on ALPHA again.  It doesn't really matter, but this -   makes our distribution consistent with the gcc one, avoiding future merge -   problems. - - Move GET_MEM definition into gcconfig.h.  Include gcconfig.h slightly -   later in gc_priv.h to avoid forward references to ptr_t. - - Add some testing of local allocation to test.c. - - Change definition of INVALID_QTID in specific.h.  The -1 value was used -   inconsistently, and too likely to collide with a valid stack address. -   Some general clean-up of specific.[ch].  Added assertions.  (Thanks -   to Michael Smith for tracking down an intermittent bug to this -   general area.  I'm not sure it has been squashed yet, however.) - - On Pthread systems it was not safe to call GC_malloc() between fork() -   and exec().  According to the applicable standards, it doesn't appear -   to be safe to call malloc() or many other libc functions either, thus -   it's not clear this is fixable.  Added experimental support for -   -DHANDLE_FORK in linux_threads.c which tries to support it.  It may -   succeed if libc does the right thing.  I'm not sure whether it does. -   (Thanks to Kenneth Schalk for pointing out this issue.) - - Documented thread local allocation primitives to require an -   explicit GC_init call.  GC_init_parallel is no longer declared to -   be a constructor function, since that isn't portable and often -   seems to lead to initialization order problems. - - Changed gc_cpp.cc and gc_cpp.h in one more attempt to make them -   compatible with Visual C++ 6.  (Thanks to Wink Saville for the -   patch.) - - Some more patches for Linux on HP PA-RISC. - - Added include/gc_allocator.h.  It implements (hopefully) standard -   conforming (as opposed to SGI-style) allocators that allocate -   collectable (gc_allocator) or GC-traceable, but not collectable -   (traceable_allocator) objects.  This borrows heavily from libstc++, -   which borrows heavily from the SGI implementation, this part of -   which was written by Matt Austern.  Changed test_cpp.cc to very -   minimally test this. - - On Linux/X86, retry mmap with a different start argument.  That should -   allow the collector to use more (closer to 3GB) of the address space. -   (Thanks to Jeffrey Mark Siskind for tracking this down.) - - Force 64 bit alignment with GCJ support.  (Reflects Bryce McKinley's -   patch to the gcc tree.) - - Refined the choice of sa_handler vs. sa_sigaction in GC_dirty_init -   to accomodate some glibc5 systems.  (Thanks to Dan Fandrich for the -   patch.) - - Compensated for the fact that current versions of glibc set -   __libc_stack_end incorrectly on Linux/IA64 while initialization code -   is running.  This could cause the collector to miss 16 bytes of -   the memory stack if GC_malloc or friends where called before main(). - - Mostly integrated Takis Psarogiannakopoulos' port to DG/UX Inix 86. -   This will probably take another iteration to work, since his -   patch conflicted with the libtool upgrade.  - - Added README.arm.cross containing some information about cross- -   compiling to an ARM processor from Margaret Fleck. - -Since 6.1alpha4: - - Added GC_finalizer_mem_freed, and changed some of the code that -   decided on heap expansion to look at it.  Memory explicitly -   deallocated by finalizers essentially needs to be counted as reclaimed -   by the GC.  Otherwise there are cases in which the heap can grow -   unboundedly.  (Thanks to Mark Reichert for the test case.) - - Integrated Adam Megacz patches to not scan dynamic libraries if -   we are compiling with gcc on win32.  Otherwise we need structured -   exception handling to deal with asynchronously unmapped root -   segments, and gcc doesn't directly support that. - - Integrated Anthony Green's patch to support Wine. - - GC_OPERATOR_NEW_ARRAY was misspelled OPERATOR_NEW_ARRAY in several -   places, including gc_cpp.cc.  (Thanks to Wink Saville for pointing -   this out.) - - Integrated Loren James Rittle's Alpha FreeBSD patches.  In -   response to Richard Henderson's suggestion, these also -   changed the declarations of symbols like _end on many platforms to -   that they wouldn't mistakenly be declared as short data symbols. - - Integrated changes from the Debian distribution.  (Thanks to Ryan Murray -   for pointing these out.)  Fix C++ comments in POWERPC port.  Add ARM32 -   incremental GC support.  Get rid of USE_GENERIC_PUSH_REGS for alpha/Linux, -   this time for real.  Use va_copy to get rid of cord printf problems -   (finally). - - Close file descriptor used to count cpus.  Thanks to Jeff Sturm for -   pointing out the omission. - - Don't just drop gcj free lists in GC_start_reclaim, since that can -   eventually cause the marker to see a bogus mark descriptor in the  -   dropped objects.  The usual symptom was a very intermittent segmentation -   fault in the marker.  This mattered only if one of the GC_gcj_malloc -   variants was used.  (Thanks to Michael Smith, Jeff Sturm, Bryce -   McKinley and Tom Tromey for helping to track this down.) - - Fixed Linux and Solaris/64 SPARC configuration.  (Thanks to David Miller, -   Jeff Sturm, Tom Tromey, and Christian Joensson.) - - Fixed a typo in strdup definition.  (Thanks to Gerard A Allan.) - - Changed Makefile.direct to invoke $(CC) to assemble alpha_mach_dep.S. -   This is needed on Linux.  I'm not sure whether it's better or worse -   on Tru64. - - Changed gc_cpp.h once more to declare operator new and friends only in -   a Microsoft environment.  This may need further fine tuning.  (Thanks to -   Johannes Schmidt for pointing out that the older code breaks on gcc3.0.4.) - - Don't ever override strdup if it's already macro defined.  (Thanks to -   Adnan Ali for pointing out the problem.) - - Changed gc_cpp.h yet again to also overload placement new.  Due to the -   C++ overloading rules, the other overloaded new operations otherwise hide -   placement new, which causes many STL uses to break.  (Thanks to Reza -   Shahidi for reporting this, and to Matt Austern for proposing a fix.) - - Integrated cygwin pthreads support from Dan Bonachea. - - Turn on DYNAMIC_LOADING for NetBSD.  (Thanks to Krister Walfridsson.) - - Changed printing code to print more complete GC times. - - Applied Mark Mitchell's Irix patch to correct some bitrot. - - Clarified which object-printing routines in dbg_mlc.c should hold -   the allocation lock.  Restructured the code to allow reasonable object -   printing with -DREDIRECT_MALLOC. - - Fix the Linux mmap code to always start with 0x1000 as the initial hint. -   Minor patches for 64-bit AIX, particularly to STACKBOTTOM. -   (Thanks again to Jeffrey Mark Siskind.) - - Renamed "SUSPENDED" flag for Solaris threads support to avoid a conflict -   with a system header. (Thanks to Philp Brown.) -  - -To do: - - --enable-redirect-malloc is mostly untested and known not to work -   on some platforms.  - - The win32 collector ends up tracing some (most?) objects allocated with -   the system allocator, in spite if the fact that it tries not to. -   This costs time and space, though it remains correct. -   We need a way to identify memory regions used by the system malloc(), -   or an alternate way to locate dll data areas.  A very partial -   workaround is to use GC_malloc_atomic_uncollectable() instead of -   the system malloc() for most allocation. - - There seem to be outstanding issues on Solaris/X86, possibly with -   finding the data segment starting address.  Information/patches would -   be appreciated. - - 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. - - Incremental collector should handle large objects better.  Currently, -   it looks like the whole object is treated as dirty if any part of it -   is. -  | 
