Annotation of OpenXM_contrib2/asir2000/gc/doc/README.changes, Revision 1.1
1.1 ! noro 1: This is a rough history of garbage collector bugs and versions.
! 2:
! 3: This has been maintained with varying diligence over the years.
! 4:
! 5: I made an attempt to include recent contributors here. I apologize for any
! 6: omissions.
! 7:
! 8: -------------------------
! 9:
! 10: Version 1.3 and immediately preceding versions contained spurious
! 11: assembly language assignments to TMP_SP. Only the assignment in the PC/RT
! 12: code is necessary. On other machines, with certain compiler options,
! 13: the assignments can lead to an unsaved register being overwritten.
! 14: Known to cause problems under SunOS 3.5 WITHOUT the -O option. (With
! 15: -O the compiler recognizes it as dead code. It probably shouldn't,
! 16: but that's another story.)
! 17:
! 18: Version 1.4 and earlier versions used compile time determined values
! 19: for the stack base. This no longer works on Sun 3s, since Sun 3/80s use
! 20: a different stack base. We now use a straightforward heuristic on all
! 21: machines on which it is known to work (incl. Sun 3s) and compile-time
! 22: determined values for the rest. There should really be library calls
! 23: to determine such values.
! 24:
! 25: Version 1.5 and earlier did not ensure 8 byte alignment for objects
! 26: allocated on a sparc based machine.
! 27:
! 28: Version 1.8 added ULTRIX support in gc_private.h.
! 29:
! 30: Version 1.9 fixed a major bug in gc_realloc.
! 31:
! 32: Version 2.0 introduced a consistent naming convention for collector
! 33: routines and added support for registering dynamic library data segments
! 34: in the standard mark_roots.c. Most of the data structures were revamped.
! 35: The treatment of interior pointers was completely changed. Finalization
! 36: was added. Support for locking was added. Object kinds were added.
! 37: We added a black listing facility to avoid allocating at addresses known
! 38: to occur as integers somewhere in the address space. Much of this
! 39: was accomplished by adapting ideas and code from the PCR collector.
! 40: The test program was changed and expanded.
! 41:
! 42: Version 2.1 was the first stable version since 1.9, and added support
! 43: for PPCR.
! 44:
! 45: Version 2.2 added debugging allocation, and fixed various bugs. Among them:
! 46: - GC_realloc could fail to extend the size of the object for certain large object sizes.
! 47: - A blatant subscript range error in GC_printf, which unfortunately
! 48: wasn't exercised on machines with sufficient stack alignment constraints.
! 49: - GC_register_displacement did the wrong thing if it was called after
! 50: any allocation had taken place.
! 51: - The leak finding code would eventually break after 2048 byte
! 52: byte objects leaked.
! 53: - interface.c didn't compile.
! 54: - The heap size remained much too small for large stacks.
! 55: - The stack clearing code behaved badly for large stacks, and perhaps
! 56: on HP/PA machines.
! 57:
! 58: Version 2.3 added ALL_INTERIOR_POINTERS and fixed the following bugs:
! 59: - Missing declaration of etext in the A/UX version.
! 60: - Some PCR root-finding problems.
! 61: - Blacklisting was not 100% effective, because the plausible future
! 62: heap bounds were being miscalculated.
! 63: - GC_realloc didn't handle out-of-memory correctly.
! 64: - GC_base could return a nonzero value for addresses inside free blocks.
! 65: - test.c wasn't really thread safe, and could erroneously report failure
! 66: in a multithreaded environment. (The locking primitives need to be
! 67: replaced for other threads packages.)
! 68: - GC_CONS was thoroughly broken.
! 69: - On a SPARC with dynamic linking, signals stayed diabled while the
! 70: client code was running.
! 71: (Thanks to Manuel Serrano at INRIA for reporting the last two.)
! 72:
! 73: Version 2.4 added GC_free_space_divisor as a tuning knob, added
! 74: support for OS/2 and linux, and fixed the following bugs:
! 75: - On machines with unaligned pointers (e.g. Sun 3), every 128th word could
! 76: fail to be considered for marking.
! 77: - Dynamic_load.c erroneously added 4 bytes to the length of the data and
! 78: bss sections of the dynamic library. This could result in a bad memory
! 79: reference if the actual length was a multiple of a page. (Observed on
! 80: Sun 3. Can probably also happen on a Sun 4.)
! 81: (Thanks to Robert Brazile for pointing out that the Sun 3 version
! 82: was broken. Dynamic library handling is still broken on Sun 3s
! 83: under 4.1.1U1, but apparently not 4.1.1. If you have such a machine,
! 84: use -Bstatic.)
! 85:
! 86: Version 2.5 fixed the following bugs:
! 87: - Removed an explicit call to exit(1)
! 88: - Fixed calls to GC_printf and GC_err_printf, so the correct number of
! 89: arguments are always supplied. The OS/2 C compiler gets confused if
! 90: the number of actuals and the number of formals differ. (ANSI C
! 91: doesn't require this to work. The ANSI sanctioned way of doing things
! 92: causes too many compatibility problems.)
! 93:
! 94: Version 3.0 added generational/incremental collection and stubborn
! 95: objects.
! 96:
! 97: Version 3.1 added the following features:
! 98: - A workaround for a SunOS 4.X SPARC C compiler
! 99: misfeature that caused problems when the collector was turned into
! 100: a dynamic library.
! 101: - A fix for a bug in GC_base that could result in a memory fault.
! 102: - A fix for a performance bug (and several other misfeatures) pointed
! 103: out by Dave Detlefs and Al Dosser.
! 104: - Use of dirty bit information for static data under Solaris 2.X.
! 105: - DEC Alpha/OSF1 support (thanks to Al Dosser).
! 106: - Incremental collection on more platforms.
! 107: - A more refined heap expansion policy. Less space usage by default.
! 108: - Various minor enhancements to reduce space usage, and to reduce
! 109: the amount of memory scanned by the collector.
! 110: - Uncollectable allocation without per object overhead.
! 111: - More conscientious handling of out-of-memory conditions.
! 112: - Fixed a bug in debugging stubborn allocation.
! 113: - Fixed a bug that resulted in occasional erroneous reporting of smashed
! 114: objects with debugging allocation.
! 115: - Fixed bogus leak reports of size 4096 blocks with FIND_LEAK.
! 116:
! 117: Version 3.2 fixed a serious and not entirely repeatable bug in
! 118: the incremental collector. It appeared only when dirty bit info
! 119: on the roots was available, which is normally only under Solaris.
! 120: It also added GC_general_register_disappearing_link, and some
! 121: testing code. Interface.c disappeared.
! 122:
! 123: Version 3.3 fixes several bugs and adds new ports:
! 124: - PCR-specific bugs.
! 125: - Missing locking in GC_free, redundant FASTUNLOCK
! 126: in GC_malloc_stubborn, and 2 bugs in
! 127: GC_unregister_disappearing_link.
! 128: All of the above were pointed out by Neil Sharman
! 129: (neil@cs.mu.oz.au).
! 130: - Common symbols allocated by the SunOS4.X dynamic loader
! 131: were not included in the root set.
! 132: - Bug in GC_finalize (reported by Brian Beuning and Al Dosser)
! 133: - Merged Amiga port from Jesper Peterson (untested)
! 134: - Merged NeXT port from Thomas Funke (significantly
! 135: modified and untested)
! 136:
! 137: Version 3.4:
! 138: - Fixed a performance bug in GC_realloc.
! 139: - Updated the amiga port.
! 140: - Added NetBSD and 386BSD ports.
! 141: - Added cord library.
! 142: - Added trivial performance enhancement for
! 143: ALL_INTERIOR_POINTERS. (Don't scan last word.)
! 144:
! 145: Version 3.5
! 146: - Minor collections now mark from roots only once, if that
! 147: doesn't cause an excessive pause.
! 148: - The stack clearing heuristic was refined to prevent anomalies
! 149: with very heavily recursive programs and sparse stacks.
! 150: - Fixed a bug that prevented mark stack growth in some cases.
! 151: GC_objects_are_marked should be set to TRUE after a call
! 152: to GC_push_roots and as part of GC_push_marked, since
! 153: both can now set mark bits. I think this is only a performance
! 154: bug, but I wouldn't bet on it. It's certainly very hard to argue
! 155: that the old version was correct.
! 156: - Fixed an incremental collection bug that prevented it from
! 157: working at all when HBLKSIZE != getpagesize()
! 158: - Changed dynamic_loading.c to include gc_priv.h before testing
! 159: DYNAMIC_LOADING. SunOS dynamic library scanning
! 160: must have been broken in 3.4.
! 161: - Object size rounding now adapts to program behavior.
! 162: - Added a workaround (provided by Manuel Serrano and
! 163: colleagues) to a long-standing SunOS 4.X (and 3.X?) ld bug
! 164: that I had incorrectly assumed to have been squished.
! 165: The collector was broken if the text segment size was within
! 166: 32 bytes of a multiple of 8K bytes, and if the beginning of
! 167: the data segment contained interesting roots. The workaround
! 168: assumes a demand-loadable executable. The original may have
! 169: have "worked" in some other cases.
! 170: - Added dynamic library support under IRIX5.
! 171: - Added support for EMX under OS/2 (thanks to Ari Huttunen).
! 172:
! 173: Version 3.6:
! 174: - fixed a bug in the mark stack growth code that was introduced
! 175: in 3.4.
! 176: - fixed Makefile to work around DEC AXP compiler tail recursion
! 177: bug.
! 178:
! 179: Version 3.7:
! 180: - Added a workaround for an HP/UX compiler bug.
! 181: - Fixed another stack clearing performance bug. Reworked
! 182: that code once more.
! 183:
! 184: Version 4.0:
! 185: - Added support for Solaris threads (which was possible
! 186: only by reimplementing some fraction of Solaris threads,
! 187: since Sun doesn't currently make the thread debugging
! 188: interface available).
! 189: - Added non-threads win32 and win32S support.
! 190: - (Grudgingly, with suitable muttering of obscenities) renamed
! 191: files so that the collector distribution could live on a FAT
! 192: file system. Files that are guaranteed to be useless on
! 193: a PC still have long names. Gc_inline.h and gc_private.h
! 194: still exist, but now just include gc_inl.h and gc_priv.h.
! 195: - Fixed a really obscure bug in finalization that could cause
! 196: undetected mark stack overflows. (I would be surprised if
! 197: any real code ever tickled this one.)
! 198: - Changed finalization code to dynamically resize the hash
! 199: tables it maintains. (This probably does not matter for well-
! 200: -written code. It no doubt does for C++ code that overuses
! 201: destructors.)
! 202: - Added typed allocation primitives. Rewrote the marker to
! 203: accommodate them with more reasonable efficiency. This
! 204: change should also speed up marking for GC_malloc allocated
! 205: objects a little. See gc_typed.h for new primitives.
! 206: - Improved debugging facilities slightly. Allocation time
! 207: stack traces are now kept by default on SPARC/SUNOS4.
! 208: (Thanks to Scott Schwartz.)
! 209: - Added better support for small heap applications.
! 210: - Significantly extended cord package. Fixed a bug in the
! 211: implementation of lazily read files. Printf and friends now
! 212: have cord variants. Cord traversals are a bit faster.
! 213: - Made ALL_INTERIOR_POINTERS recognition the default.
! 214: - Fixed de so that it can run in constant space, independent
! 215: of file size. Added simple string searching to cords and de.
! 216: - Added the Hull-Ellis C++ interface.
! 217: - Added dynamic library support for OSF/1.
! 218: (Thanks to Al Dosser and Tim Bingham at DEC.)
! 219: - Changed argument to GC_expand_hp to be expressed
! 220: in units of bytes instead of heap blocks. (Necessary
! 221: since the heap block size now varies depending on
! 222: configuration. The old version was never very clean.)
! 223: - Added GC_get_heap_size(). The previous "equivalent"
! 224: was broken.
! 225: - Restructured the Makefile a bit.
! 226:
! 227: Since version 4.0:
! 228: - Changed finalization implementation to guarantee that
! 229: finalization procedures are called outside of the allocation
! 230: lock, making direct use of the interface a little less dangerous.
! 231: MAY BREAK EXISTING CLIENTS that assume finalizers
! 232: are protected by a lock. Since there seem to be few multithreaded
! 233: clients that use finalization, this is hopefully not much of
! 234: a problem.
! 235: - Fixed a gross bug in CORD_prev.
! 236: - Fixed a bug in blacklst.c that could result in unbounded
! 237: heap growth during startup on machines that do not clear
! 238: memory obtained from the OS (e.g. win32S).
! 239: - Ported de editor to win32/win32S. (This is now the only
! 240: version with a mouse-sensitive UI.)
! 241: - Added GC_malloc_ignore_off_page to allocate large arrays
! 242: in the presence of ALL_INTERIOR_POINTERS.
! 243: - Changed GC_call_with_alloc_lock to not disable signals in
! 244: the single-threaded case.
! 245: - Reduced retry count in GC_collect_or_expand for garbage
! 246: collecting when out of memory.
! 247: - Made uncollectable allocations bypass black-listing, as they
! 248: should.
! 249: - Fixed a bug in typed_test in test.c that could cause (legitimate)
! 250: GC crashes.
! 251: - Fixed some potential synchronization problems in finalize.c
! 252: - Fixed a real locking problem in typd_mlc.c.
! 253: - Worked around an AIX 3.2 compiler feature that results in
! 254: out of bounds memory references.
! 255: - Partially worked around an IRIX5.2 beta problem (which may
! 256: or may not persist to the final release).
! 257: - Fixed a bug in the heap integrity checking code that could
! 258: result in explicitly deallocated objects being identified as
! 259: smashed. Fixed a bug in the dbg_mlc stack saving code
! 260: that caused old argument pointers to be considered live.
! 261: - Fixed a bug in CORD_ncmp (and hence CORD_str).
! 262: - Repaired the OS2 port, which had suffered from bit rot
! 263: in 4.0. Worked around what appears to be CSet/2 V1.0
! 264: optimizer bug.
! 265: - Fixed a Makefile bug for target "c++".
! 266:
! 267: Since version 4.1:
! 268: - Multiple bug fixes/workarounds in the Solaris threads version.
! 269: (It occasionally failed to locate some register contents for
! 270: marking. It also turns out that thr_suspend and friends are
! 271: unreliable in Solaris 2.3. Dirty bit reads appear
! 272: to be unreliable under some weird
! 273: circumstances. My stack marking code
! 274: contained a serious performance bug. The new code is
! 275: extremely defensive, and has not failed in several cpu
! 276: hours of testing. But no guarantees ...)
! 277: - Added MacOS support (thanks to Patrick Beard.)
! 278: - Fixed several syntactic bugs in gc_c++.h and friends. (These
! 279: didn't bother g++, but did bother most other compilers.)
! 280: Fixed gc_c++.h finalization interface. (It didn't.)
! 281: - 64 bit alignment for allocated objects was not guaranteed in a
! 282: few cases in which it should have been.
! 283: - Added GC_malloc_atomic_ignore_off_page.
! 284: - Added GC_collect_a_little.
! 285: - Added some prototypes to gc.h.
! 286: - Some other minor bug fixes (notably in Makefile).
! 287: - Fixed OS/2 / EMX port (thanks to Ari Huttunen).
! 288: - Fixed AmigaDOS port. (thanks to Michel Schinz).
! 289: - Fixed the DATASTART definition under Solaris. There
! 290: was a 1 in 16K chance of the collector missing the first
! 291: 64K of static data (and thus crashing).
! 292: - Fixed some blatant anachronisms in the README file.
! 293: - Fixed PCR-Makefile for upcoming PPCR release.
! 294:
! 295: Since version 4.2:
! 296: - Fixed SPARC alignment problem with GC_DEBUG.
! 297: - Fixed Solaris threads /proc workaround. The real
! 298: problem was an interaction with mprotect.
! 299: - Incorporated fix from Patrick Beard for gc_c++.h (now gc_cpp.h).
! 300: - Slightly improved allocator space utilization by
! 301: fixing the GC_size_map mechanism.
! 302: - Integrated some Sony News and MIPS RISCos 4.51
! 303: patches. (Thanks to Nobuyuki Hikichi of
! 304: Software Research Associates, Inc. Japan)
! 305: - Fixed HP_PA alignment problem. (Thanks to
! 306: xjam@cork.cs.berkeley.edu.)
! 307: - Added GC_same_obj and friends. Changed GC_base
! 308: to return 0 for pointers past the end of large objects.
! 309: Improved GC_base performance with ALL_INTERIOR_POINTERS
! 310: on machines with a slow integer mod operation.
! 311: Added GC_PTR_ADD, GC_PTR_STORE, etc. to prepare
! 312: for preprocessor.
! 313: - changed the default on most UNIX machines to be that
! 314: signals are not disabled during critical GC operations.
! 315: This is still ANSI-conforming, though somewhat dangerous
! 316: in the presence of signal handlers. But the performance
! 317: cost of the alternative is sometimes problematic.
! 318: Can be changed back with a minor Makefile edit.
! 319: - renamed IS_STRING in gc.h, to CORD_IS_STRING, thus
! 320: following my own naming convention. Added the function
! 321: CORD_to_const_char_star.
! 322: - Fixed a gross bug in GC_finalize. Symptom: occasional
! 323: address faults in that function. (Thanks to Anselm
! 324: Baird-Smith (Anselm.BairdSmith@inria.fr)
! 325: - Added port to ICL DRS6000 running DRS/NX. Restructured
! 326: things a bit to factor out common code, and remove obsolete
! 327: code. Collector should now run under SUNOS5 with either
! 328: mprotect or /proc dirty bits. (Thanks to Douglas Steel
! 329: (doug@wg.icl.co.uk)).
! 330: - More bug fixes and workarounds for Solaris 2.X. (These were
! 331: mostly related to putting the collector in a dynamic library,
! 332: which didn't really work before. Also SOLARIS_THREADS
! 333: didn't interact well with dl_open.) Thanks to btlewis@eng.sun.com.
! 334: - Fixed a serious performance bug on the DEC Alpha. The text
! 335: segment was getting registered as part of the root set.
! 336: (Amazingly, the result was still fast enough that the bug
! 337: was not conspicuous.) The fix works on OSF/1, version 1.3.
! 338: Hopefully it also works on other versions of OSF/1 ...
! 339: - Fixed a bug in GC_clear_roots.
! 340: - Fixed a bug in GC_generic_malloc_words_small that broke
! 341: gc_inl.h. (Reported by Antoine de Maricourt. I broke it
! 342: in trying to tweak the Mac port.)
! 343: - Fixed some problems with cord/de under Linux.
! 344: - Fixed some cord problems, notably with CORD_riter4.
! 345: - Added DG/UX port.
! 346: Thanks to Ben A. Mesander (ben@piglet.cr.usgs.gov)
! 347: - Added finalization registration routines with weaker ordering
! 348: constraints. (This is necessary for C++ finalization with
! 349: multiple inheritance, since the compiler often adds self-cycles.)
! 350: - Filled the holes in the SCO port. (Thanks to Michael Arnoldus
! 351: <chime@proinf.dk>.)
! 352: - John Ellis' additions to the C++ support: From John:
! 353:
! 354: * I completely rewrote the documentation in the interface gc_c++.h
! 355: (later renamed gc_cpp.h). I've tried to make it both clearer and more
! 356: precise.
! 357:
! 358: * The definition of accessibility now ignores pointers from an
! 359: finalizable object (an object with a clean-up function) to itself.
! 360: This allows objects with virtual base classes to be finalizable by the
! 361: collector. Compilers typically implement virtual base classes using
! 362: pointers from an object to itself, which under the old definition of
! 363: accessibility prevented objects with virtual base classes from ever
! 364: being collected or finalized.
! 365:
! 366: * gc_cleanup now includes gc as a virtual base. This was enabled by
! 367: the change in the definition of accessibility.
! 368:
! 369: * I added support for operator new[]. Since most (all?) compilers
! 370: don't yet support operator new[], it is conditionalized on
! 371: -DOPERATOR_NEW_ARRAY. The code is untested, but its trivial and looks
! 372: correct.
! 373:
! 374: * The test program test_gc_c++ (later renamed test_cpp.cc)
! 375: tries to test for the C++-specific functionality not tested by the
! 376: other programs.
! 377: - Added <unistd.h> include to misc.c. (Needed for ppcr.)
! 378: - Added PowerMac port. (Thanks to Patrick Beard again.)
! 379: - Fixed "srcdir"-related Makefile problems. Changed things so
! 380: that all externally visible include files always appear in the
! 381: include subdirectory of the source. Made gc.h directly
! 382: includable from C++ code. (These were at Per
! 383: Bothner's suggestion.)
! 384: - Changed Intel code to also mark from ebp (Kevin Warne's
! 385: suggestion).
! 386: - Renamed C++ related files so they could live in a FAT
! 387: file system. (Charles Fiterman's suggestion.)
! 388: - Changed Windows NT Makefile to include C++ support in
! 389: gc.lib. Added C++ test as Makefile target.
! 390:
! 391: Since version 4.3:
! 392: - ASM_CLEAR_CODE was erroneously defined for HP
! 393: PA machines, resulting in a compile error.
! 394: - Fixed OS/2 Makefile to create a library. (Thanks to
! 395: Mark Boulter (mboulter@vnet.ibm.com)).
! 396: - Gc_cleanup objects didn't work if they were created on
! 397: the stack. Fixed.
! 398: - One copy of Gc_cpp.h in the distribution was out of
! 399: synch, and failed to document some known compiler
! 400: problems with explicit destructor invocation. Partially
! 401: fixed. There are probably other compilers on which
! 402: gc_cleanup is miscompiled.
! 403: - Fixed Makefile to pass C compiler flags to C++ compiler.
! 404: - Added Mac fixes.
! 405: - Fixed os_dep.c to work around what appears to be
! 406: a new and different VirtualQuery bug under newer
! 407: versions of win32S.
! 408: - GC_non_gc_bytes was not correctly maintained by
! 409: GC_free. Fixed. Thanks to James Clark (jjc@jclark.com).
! 410: - Added GC_set_max_heap_size.
! 411: - Changed allocation code to ignore blacklisting if it is preventing
! 412: use of a very large block of memory. This has the advantage
! 413: that naive code allocating very large objects is much more
! 414: likely to work. The downside is you might no
! 415: longer find out that such code should really use
! 416: GC_malloc_ignore_off_page.
! 417: - Changed GC_printf under win32 to close and reopen the file
! 418: between calls. FAT file systems otherwise make the log file
! 419: useless for debugging.
! 420: - Added GC_try_to_collect and GC_get_bytes_since_gc. These
! 421: allow starting an abortable collection during idle times.
! 422: This facility does not require special OS support. (Thanks to
! 423: Michael Spertus of Geodesic Systems for suggesting this. It was
! 424: actually an easy addition. Kumar Srikantan previously added a similar
! 425: facility to a now ancient version of the collector. At the time
! 426: this was much harder, and the result was less convincing.)
! 427: - Added some support for the Borland development environment. (Thanks
! 428: to John Ellis and Michael Spertus.)
! 429: - Removed a misfeature from checksums.c that caused unexpected
! 430: heap growth. (Thanks to Scott Schwartz.)
! 431: - Changed finalize.c to call WARN if it encounters a finalization cycle.
! 432: WARN is defined in gc_priv.h to write a message, usually to stdout.
! 433: In many environments, this may be inappropriate.
! 434: - Renamed NO_PARAMS in gc.h to GC_NO_PARAMS, thus adhering to my own
! 435: naming convention.
! 436: - Added GC_set_warn_proc to intercept warnings.
! 437: - Fixed Amiga port. (Thanks to Michel Schinz (schinz@alphanet.ch).)
! 438: - Fixed a bug in mark.c that could result in an access to unmapped
! 439: memory from GC_mark_from_mark_stack on machines with unaligned
! 440: pointers.
! 441: - Fixed a win32 specific performance bug that could result in scanning of
! 442: objects allocated with the system malloc.
! 443: - Added REDIRECT_MALLOC.
! 444:
! 445: Since version 4.4:
! 446: - Fixed many minor and one major README bugs. (Thanks to Franklin Chen
! 447: (chen@adi.com) for pointing out many of them.)
! 448: - Fixed ALPHA/OSF/1 dynamic library support. (Thanks to Jonathan Bachrach
! 449: (jonathan@harlequin.com)).
! 450: - Added incremental GC support (MPROTECT_VDB) for Linux (with some
! 451: help from Bruno Haible).
! 452: - Altered SPARC recognition tests in gc.h and config.h (mostly as
! 453: suggested by Fergus Henderson).
! 454: - Added basic incremental GC support for win32, as implemented by
! 455: Windows NT and Windows 95. GC_enable_incremental is a noop
! 456: under win32s, which doesn't implement enough of the VM interface.
! 457: - Added -DLARGE_CONFIG.
! 458: - Fixed GC_..._ignore_off_page to also function without
! 459: -DALL_INTERIOR_POINTERS.
! 460: - (Hopefully) fixed RS/6000 port. (Only the test was broken.)
! 461: - Fixed a performance bug in the nonincremental collector running
! 462: on machines supporting incremental collection with MPROTECT_VDB
! 463: (e.g. SunOS 4, DEC AXP). This turned into a correctness bug under
! 464: win32s with win32 incremental collection. (Not all memory protection
! 465: was disabled.)
! 466: - Fixed some ppcr related bit rot.
! 467: - Caused dynamic libraries to be unregistered before reregistering.
! 468: The old way turned out to be a performance bug on some machines.
! 469: - GC_root_size was not properly maintained under MSWIN32.
! 470: - Added -DNO_DEBUGGING and GC_dump.
! 471: - Fixed a couple of bugs arising with SOLARIS_THREADS +
! 472: REDIRECT_MALLOC.
! 473: - Added NetBSD/M68K port. (Thanks to Peter Seebach
! 474: <seebs@taniemarie.solon.com>.)
! 475: - Fixed a serious realloc bug. For certain object sizes, the collector
! 476: wouldn't scan the expanded part of the object. (Thanks to Clay Spence
! 477: (cds@peanut.sarnoff.com) for noticing the problem, and helping me to
! 478: track it down.)
! 479:
! 480: Since version 4.5:
! 481: - Added Linux ELF support. (Thanks to Arrigo Triulzi <arrigo@ic.ac.uk>.)
! 482: - GC_base crashed if it was called before any other GC_ routines.
! 483: This could happen if a gc_cleanup object was allocated outside the heap
! 484: before any heap allocation.
! 485: - The heap expansion heuristic was not stable if all objects had finalization
! 486: enabled. Fixed finalize.c to count memory in finalization queue and
! 487: avoid explicit deallocation. Changed alloc.c to also consider this count.
! 488: (This is still not recommended. It's expensive if nothing else.) Thanks
! 489: to John Ellis for pointing this out.
! 490: - GC_malloc_uncollectable(0) was broken. Thanks to Phong Vo for pointing
! 491: this out.
! 492: - The collector didn't compile under Linux 1.3.X. (Thanks to Fred Gilham for
! 493: pointing this out.) The current workaround is ugly, but expected to be
! 494: temporary.
! 495: - Fixed a formatting problem for SPARC stack traces.
! 496: - Fixed some '=='s in os_dep.c that should have been assignments.
! 497: Fortunately these were in code that should never be executed anyway.
! 498: (Thanks to Fergus Henderson.)
! 499: - Fixed the heap block allocator to only drop blacklisted blocks in small
! 500: chunks. Made BL_LIMIT self adjusting. (Both of these were in response
! 501: to heap growth observed by Paul Graham.)
! 502: - Fixed the Metrowerks/68K Mac code to also mark from a6. (Thanks
! 503: to Patrick Beard.)
! 504: - Significantly updated README.debugging.
! 505: - Fixed some problems with longjmps out of signal handlers, especially under
! 506: Solaris. Added a workaround for the fact that siglongjmp doesn't appear to
! 507: do the right thing with -lthread under Solaris.
! 508: - Added MSDOS/djgpp port. (Thanks to Mitch Harris (maharri@uiuc.edu).)
! 509: - Added "make reserved_namespace" and "make user_namespace". The
! 510: first renames ALL "GC_xxx" identifiers as "_GC_xxx". The second is the
! 511: inverse transformation. Note that doing this is guaranteed to break all
! 512: clients written for the other names.
! 513: - descriptor field for kind NORMAL in GC_obj_kinds with ADD_BYTE_AT_END
! 514: defined should be -ALIGNMENT not WORDS_TO_BYTES(-1). This is
! 515: a serious bug on machines with pointer alignment of less than a word.
! 516: - GC_ignore_self_finalize_mark_proc didn't handle pointers to very near the
! 517: end of the object correctly. Caused failures of the C++ test on a DEC Alpha
! 518: with g++.
! 519: - gc_inl.h still had problems. Partially fixed. Added warnings at the
! 520: beginning to hopefully specify the remaining dangers.
! 521: - Added DATAEND definition to config.h.
! 522: - Fixed some of the .h file organization. Fixed "make floppy".
! 523:
! 524: Since version 4.6:
! 525: - Fixed some compilation problems with -DCHECKSUMS (thanks to Ian Searle)
! 526: - Updated some Mac specific files to synchronize with Patrick Beard.
! 527: - Fixed a serious bug for machines with non-word-aligned pointers.
! 528: (Thanks to Patrick Beard for pointing out the problem. The collector
! 529: should fail almost any conceivable test immediately on such machines.)
! 530:
! 531: Since version 4.7:
! 532: - Changed a "comment" in a MacOS specific part of mach-dep.c that caused
! 533: gcc to fail on other platforms.
! 534:
! 535: Since version 4.8
! 536: - More README.debugging fixes.
! 537: - Objects ready for finalization, but not finalized in the same GC
! 538: cycle, could be prematurely collected. This occasionally happened
! 539: in test_cpp.
! 540: - Too little memory was obtained from the system for very large
! 541: objects. That could cause a heap explosion if these objects were
! 542: not contiguous (e.g. under PCR), and too much of them was blacklisted.
! 543: - Due to an improper initialization, the collector was too hesitant to
! 544: allocate blacklisted objects immediately after system startup.
! 545: - Moved GC_arrays from the data into the bss segment by not explicitly
! 546: initializing it to zero. This significantly
! 547: reduces the size of executables, and probably avoids some disk accesses
! 548: on program startup. It's conceivable that it might break a port that I
! 549: didn't test.
! 550: - Fixed EMX_MAKEFILE to reflect the gc_c++.h to gc_cpp.h renaming which
! 551: occurred a while ago.
! 552:
! 553: Since 4.9:
! 554: - Fixed a typo around a call to GC_collect_or_expand in alloc.c. It broke
! 555: handling of out of memory. (Thanks to Patrick Beard for noticing.)
! 556:
! 557: Since 4.10:
! 558: - Rationalized (hopefully) GC_try_to_collect in an incremental collection
! 559: environment. It appeared to not handle a call while a collection was in
! 560: progress, and was otherwise too conservative.
! 561: - Merged GC_reclaim_or_delete_all into GC_reclaim_all to get rid of some
! 562: code.
! 563: - Added Patrick Beard's Mac fixes, with substantial completely untested
! 564: modifications.
! 565: - Fixed the MPROTECT_VDB code to deal with large pages and imprecise
! 566: fault addresses (as on an UltraSPARC running Solaris 2.5). Note that this
! 567: was not a problem in the default configuration, which uses PROC_VDB.
! 568: - The DEC Alpha assembly code needed to restore $gp between calls.
! 569: Thanks to Fergus Henderson for tracking this down and supplying a
! 570: patch.
! 571: - The write command for "de" was completely broken for large files.
! 572: I used the easiest portable fix, which involved changing the semantics
! 573: so that f.new is written instead of overwriting f. That's safer anyway.
! 574: - Added README.solaris2 with a discussion of the possible problems of
! 575: mixing the collector's sbrk allocation with malloc/realloc.
! 576: - Changed the data segment starting address for SGI machines. The
! 577: old code failed under IRIX6.
! 578: - Required double word alignment for MIPS.
! 579: - Various minor fixes to remove warnings.
! 580: - Attempted to fix some Solaris threads problems reported by Zhiying Chen.
! 581: In particular, the collector could try to fork a thread with the
! 582: world stopped as part of GC_thr_init. It also failed to deal with
! 583: the case in which the original thread terminated before the whole
! 584: process did.
! 585: - Added -DNO_EXECUTE_PERMISSION. This has a major performance impact
! 586: on the incremental collector under Irix, and perhaps under other
! 587: operating systems.
! 588: - Added some code to support allocating the heap with mmap. This may
! 589: be preferable under some circumstances.
! 590: - Integrated dynamic library support for HP.
! 591: (Thanks to Knut Tvedten <knuttv@ifi.uio.no>.)
! 592: - Integrated James Clark's win32 threads support, and made a number
! 593: of changes to it, many of which were suggested by Pontus Rydin.
! 594: This is still not 100% solid.
! 595: - Integrated Alistair Crooks' support for UTS4 running on an Amdahl
! 596: 370-class machine.
! 597: - Fixed a serious bug in explicitly typed allocation. Objects requiring
! 598: large descriptors where handled in a way that usually resulted in
! 599: a segmentation fault in the marker. (Thanks to Jeremy Fitzhardinge
! 600: for helping to track this down.)
! 601: - Added partial support for GNU win32 development. (Thanks to Fergus
! 602: Henderson.)
! 603: - Added optional support for Java-style finalization semantics. (Thanks
! 604: to Patrick Bridges.) This is recommended only for Java implementations.
! 605: - GC_malloc_uncollectable faulted instead of returning 0 when out of
! 606: memory. (Thanks to dan@math.uiuc.edu for noticing.)
! 607: - Calls to GC_base before the collector was initialized failed on a
! 608: DEC Alpha. (Thanks to Matthew Flatt.)
! 609: - Added base pointer checking to GC_REGISTER_FINALIZER in debugging
! 610: mode, at the suggestion of Jeremy Fitzhardinge.
! 611: - GC_debug_realloc failed for uncollectable objects. (Thanks to
! 612: Jeremy Fitzhardinge.)
! 613: - Explicitly typed allocation could crash if it ran out of memory.
! 614: (Thanks to Jeremy Fitzhardinge.)
! 615: - Added minimal support for a DEC Alpha running Linux.
! 616: - Fixed a problem with allocation of objects whose size overflowed
! 617: ptrdiff_t. (This now fails unconditionally, as it should.)
! 618: - Added the beginning of Irix pthread support.
! 619: - Integrated Xiaokun Zhu's fixes for djgpp 2.01.
! 620: - Added SGI-style STL allocator support (gc_alloc.h).
! 621: - Fixed a serious bug in README.solaris2. Multithreaded programs must include
! 622: gc.h with SOLARIS_THREADS defined.
! 623: - Changed GC_free so it actually deallocates uncollectable objects.
! 624: (Thanks to Peter Chubb for pointing out the problem.)
! 625: - Added Linux ELF support for dynamic libararies. (Thanks again to
! 626: Patrick Bridges.)
! 627: - Changed the Borland cc configuration so that the assembler is not
! 628: required.
! 629: - Fixed a bug in the C++ test that caused it to fail in 64-bit
! 630: environments.
! 631:
! 632: Since 4.11:
! 633: - Fixed ElfW definition in dyn_load.c. (Thanks to Fergus Henderson.)
! 634: This prevented the dynamic library support from compiling on some
! 635: older ELF Linux systems.
! 636: - Fixed UTS4 port (which I apparently mangled during the integration)
! 637: (Thanks to again to Alistair Crooks.)
! 638: - "Make C++" failed on Suns with SC4.0, due to a problem with "bool".
! 639: Fixed in gc_priv.h.
! 640: - Added more pieces for GNU win32. (Thanks to Timothy N. Newsham.)
! 641: The current state of things should suffice for at least some
! 642: applications.
! 643: - Changed the out of memory retry count handling as suggested by
! 644: Kenjiro Taura. (This matters only if GC_max_retries > 0, which
! 645: is no longer the default.)
! 646: - If a /proc read failed repeatedly, GC_written_pages was not updated
! 647: correctly. (Thanks to Peter Chubb for diagnosing this.)
! 648: - Under unlikely circumstances, the allocator could infinite loop in
! 649: an out of memory situation. (Thanks again to Kenjiro Taura for
! 650: identifying the problem and supplying a fix.)
! 651: - Fixed a syntactic error in the DJGPP code. (Thanks to Fergus
! 652: Henderson for finding this by inspection.) Also fixed a test program
! 653: problem with DJGPP (Thanks to Peter Monks.)
! 654: - Atomic uncollectable objects were not treated correctly by the
! 655: incremental collector. This resulted in weird log statistics and
! 656: occasional performance problems. (Thanks to Peter Chubb for pointing
! 657: this out.)
! 658: - Fixed some problems resulting from compilers that dont define
! 659: __STDC__. In this case void * and char * were used inconsistently
! 660: in some cases. (Void * should not have been used at all. If
! 661: you have an ANSI superset compiler that does not define __STDC__,
! 662: please compile with -D__STDC__=0. Thanks to Manuel Serrano and others
! 663: for pointing out the problem.)
! 664: - Fixed a compilation problem on Irix with -n32 and -DIRIX_THREADS.
! 665: Also fixed some other IRIX_THREADS problems which may or may not have
! 666: had observable symptoms.
! 667: - Fixed an HP PA compilation problem in dyn_load.c. (Thanks to
! 668: Philippe Queinnec.)
! 669: - SEGV fault handlers sometimes did not get reset correctly. (Thanks
! 670: to David Pickens.)
! 671: - Added a fix for SOLARIS_THREADS on Intel. (Thanks again to David
! 672: Pickens.) This probably needs more work to become functional.
! 673: - Fixed struct sigcontext_struct in os_dep.c for compilation under
! 674: Linux 2.1.X. (Thanks to Fergus Henderson.)
! 675: - Changed the DJGPP STACKBOTTOM and DATASTART values to those suggested
! 676: by Kristian Kristensen. These may still not be right, but it is
! 677: it is likely to work more often than what was there before. They may
! 678: even be exactly right.
! 679: - Added a #include <string.h> to test_cpp.cc. This appears to help
! 680: with HP/UX and gcc. (Thanks to assar@sics.se.)
! 681: - Version 4.11 failed to run in incremental mode on recent 64-bit Irix
! 682: kernels. This was a problem related to page unaligned heap segments.
! 683: Changed the code to page align heap sections on all platforms.
! 684: (I had mistakenly identified this as a kernel problem earlier.
! 685: It was not.)
! 686: - Version 4.11 did not make allocated storage executable, except on
! 687: one or two platforms, due to a bug in a #if test. (Thanks to Dave
! 688: Grove for pointing this out.)
! 689: - Added sparc_sunos4_mach_dep.s to support Sun's compilers under SunOS4.
! 690: - Added GC_exclude_static_roots.
! 691: - Fixed the object size mapping algorithm. This shouldn't matter,
! 692: but the old code was ugly.
! 693: - Heap checking code could die if one of the allocated objects was
! 694: larger than its base address. (Unsigned underflow problem. Thanks
! 695: to Clay Spence for isolating the problem.)
! 696: - Added RS6000 (AIX) dynamic library support and fixed STACK_BOTTOM.
! 697: (Thanks to Fred Stearns.)
! 698: - Added Fergus Henderson's patches for improved robustness with large
! 699: heaps and lots of blacklisting.
! 700: - Added Peter Chubb's changes to support Solaris Pthreads, to support
! 701: MMAP allocation in Solaris, to allow Solaris to find dynamic libraries
! 702: through /proc, to add malloc_typed_ignore_off_page, and a few other
! 703: minor features and bug fixes.
! 704: - The Solaris 2 port should not use sbrk. I received confirmation from
! 705: Sun that the use of sbrk and malloc in the same program is not
! 706: supported. The collector now defines USE_MMAP by default on Solaris.
! 707: - Replaced the djgpp makefile with Gary Leavens' version.
! 708: - Fixed MSWIN32 detection test.
! 709: - Added Fergus Henderson's patches to allow putting the collector into
! 710: a DLL under GNU win32.
! 711: - Added Ivan V. Demakov's port to Watcom C on X86.
! 712: - Added Ian Piumarta's Linux/PowerPC port.
! 713: - On Brian Burton's suggestion added PointerFreeGC to the placement
! 714: options in gc_cpp.h. This is of course unsafe, and may be controversial.
! 715: On the other hand, it seems to be needed often enough that it's worth
! 716: adding as a standard facility.
! 717:
! 718: Since 4.12:
! 719: - Fixed a crucial bug in the Watcom port. There was a redundant decl
! 720: of GC_push_one in gc_priv.h.
! 721: - Added FINALIZE_ON_DEMAND.
! 722: - Fixed some pre-ANSI cc problems in test.c.
! 723: - Removed getpagesize() use for Solaris. It seems to be missing in one
! 724: or two versions.
! 725: - Fixed bool handling for SPARCCompiler version 4.2.
! 726: - Fixed some files in include that had gotten unlinked from the main
! 727: copy.
! 728: - Some RS/6000 fixes (missing casts). Thanks to Toralf Foerster.
! 729: - Fixed several problems in GC_debug_realloc, affecting mostly the
! 730: FIND_LEAK case.
! 731: - GC_exclude_static_roots contained a buggy unsigned comparison to
! 732: terminate a loop. (Thanks to Wilson Ho.)
! 733: - CORD_str failed if the substring occurred at the last possible position.
! 734: (Only affects cord users.)
! 735: - Fixed Linux code to deal with RedHat 5.0 and integrated Peter Bigot's
! 736: os_dep.c code for dealing with various Linux versions.
! 737: - Added workaround for Irix pthreads sigaction bug and possible signal
! 738: misdirection problems.
! 739: Since alpha1:
! 740: - Changed RS6000 STACKBOTTOM.
! 741: - Integrated Patrick Beard's Mac changes.
! 742: - Alpha1 didn't compile on Irix m.n, m < 6.
! 743: - Replaced Makefile.dj with a new one from Gary Leavens.
! 744: - Added Andrew Stitcher's changes to support SCO OpenServer.
! 745: - Added PRINT_BLACK_LIST, to allow debugging of high densities of false
! 746: pointers.
! 747: - Added code to debug allocator to keep track of return address
! 748: in GC_malloc caller, thus giving a bit more context.
! 749: - Changed default behavior of large block allocator to more
! 750: aggressively avoid fragmentation. This is likely to slow down the
! 751: collector when it succeeds at reducing space cost.
! 752: - Integrated Fergus Henderson's CYGWIN32 changes. They are untested,
! 753: but needed for newer versions.
! 754: - USE_MMAP had some serious bugs. This caused the collector to fail
! 755: consistently on Solaris with -DSMALL_CONFIG.
! 756: - Added Linux threads support, thanks largely to Fergus Henderson.
! 757: Since alpha2:
! 758: - Fixed more Linux threads problems.
! 759: - Changed default GC_free_space_divisor to 3 with new large block allocation.
! 760: (Thanks to Matthew Flatt for some measurements that suggest the old
! 761: value sometimes favors space too much over time.)
! 762: - More CYGWIN32 fixes.
! 763: - Integrated Tyson-Dowd's Linux-M68K port.
! 764: - Minor HP PA and DEC UNIX fixes from Fergus Henderson.
! 765: - Integrated Christoffe Raffali's Linux-SPARC changes.
! 766: - Allowed for one more GC fixup iteration after a full GC in incremental
! 767: mode. Some quick measurements suggested that this significantly
! 768: reduces pause times even with smaller GC_RATE values.
! 769: - Moved some more GC data structures into GC_arrays. This decreases
! 770: pause times and GC overhead, but makes debugging slightly less convenient.
! 771: - Fixed namespace pollution problem ("excl_table").
! 772: - Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking
! 773: that slightly.
! 774: - Added some win32 threads fixes.
! 775: - Integrated Ivan Demakov and David Stes' Watcom fixes.
! 776: - Various other minor fixes contributed by many people.
! 777: - Renamed config.h to gcconfig.h, since config.h tends to be used for
! 778: many other things.
! 779: - Integrated Matthew Flatt's support for 68K MacOS "far globals".
! 780: - Fixed up some of the dynamic library Makefile targets for consistency
! 781: across platforms.
! 782: - Fixed a USE_MMAP typo that caused out-of-memory handling to fail
! 783: on Solaris.
! 784: - Added code to test.c to test thread creation a bit more.
! 785: - Integrated GC_win32_free_heap, as suggested by Ivan Demakov.
! 786: - Fixed Solaris 2.7 stack base finding problem. (This may actually
! 787: have been done in an earlier alpha release.)
! 788: Since alpha3:
! 789: - Fixed MSWIN32 recognition test, which interfered with cygwin.
! 790: - Removed unnecessary gc_watcom.asm from distribution. Removed
! 791: some obsolete README.win32 text.
! 792: - Added Alpha Linux incremental GC support. (Thanks to Philipp Tomsich
! 793: for code for retrieving the fault address in a signal handler.)
! 794: Changed Linux signal handler context argument to be a pointer.
! 795: - Took care of some new warnings generated by the 7.3 SGI compiler.
! 796: - Integrated Phillip Musumeci's FreeBSD/ELF fixes.
! 797: - -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h>
! 798:
! 799: Since 4.13:
! 800: - Fixed GC_print_source_ptr to not use a prototype.
! 801: - generalized CYGWIN test.
! 802: - gc::new did the wrong thing with PointerFreeGC placement.
! 803: (Thanks to Rauli Ruohonen.)
! 804: - In the ALL_INTERIOR_POINTERS (default) case, some callee-save register
! 805: values could fail to be scanned if the register was saved and
! 806: reused in a GC frame. This showed up in verbose mode with gctest
! 807: compiled with an unreleased SGI compiler. I vaguely recall an old
! 808: bug report that may have been related. The bug was probably quite old.
! 809: (The problem was that the stack scanning could be deferred until
! 810: after the relevant frame was overwritten, and the new save location
! 811: might be outside the scanned area. Fixed by more eager stack scanning.)
! 812: - PRINT_BLACK_LIST had some problems. A few source addresses were garbage.
! 813: - Replaced Makefile.dj and added -I flags to cord make targets.
! 814: (Thanks to Gary Leavens.)
! 815: - GC_try_to_collect was broken with the nonincremental collector.
! 816: - gc_cleanup destructors could pass the wrong address to
! 817: GC_register_finalizer_ignore_self in the presence of multiple
! 818: inheritance. (Thanks to Darrell Schiebel.)
! 819: - Changed PowerPC Linux stack finding code.
! 820:
! 821: Since 4.14alpha1
! 822: - -DSMALL_CONFIG did not work reliably with large (> 4K) pages.
! 823: Recycling the mark stack during expansion could result in a size
! 824: zero heap segment, which confused things. (This was probably also an
! 825: issue with the normal config and huge pages.)
! 826: - Did more work to make sure that callee-save registers were scanned
! 827: completely, even with the setjmp-based code. Added USE_GENERIC_PUSH_REGS
! 828: macro to facilitate testing on machines I have access to.
! 829: - Added code to explicitly push register contents for win32 threads.
! 830: This seems to be necessary. (Thanks to Pierre de Rop.)
! 831:
! 832: Since 4.14alpha2
! 833: - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea).
! 834:
! 835: Since 4.14
! 836: - Reworked large block allocator. Now uses multiple doubly linked free
! 837: lists to approximate best fit.
! 838: - Changed heap expansion heuristic. Entirely free blocks are no longer
! 839: counted towards the heap size. This seems to have a major impact on
! 840: heap size stability; the old version could expand the heap way too
! 841: much in the presence of large block fragmentation.
! 842: - added -DGC_ASSERTIONS and some simple assertions inside the collector.
! 843: This is mainlyt for collector debugging.
! 844: - added -DUSE_MUNMAP to allow the heap to shrink. Suupported on only
! 845: a few UNIX-like platforms for now.
! 846: - added GC_dump_regions() for debugging of fragmentation issues.
! 847: - Changed PowerPC pointer alignment under Linux to 4. (This needs
! 848: checking by someone who has one. The suggestions came to me via a
! 849: rather circuitous path.)
! 850: - Changed the Linux/Alpha port to walk the data segment backwards until
! 851: it encounters a SIGSEGV. The old way to find the start of the data
! 852: segment broke with a recent release.
! 853: - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of
! 854: GC_register_finalizer, so that it would continue to work with GC_DEBUG.
! 855: - allochblk sometimes cleared the wrong block for debugging purposes
! 856: when it dropped blacklisted blocks. This could result in spurious
! 857: error reports with GC_DEBUG.
! 858: - added MACOS X Server support. (Thanks to Andrew Stone.)
! 859: - Changed the Solaris threads code to ignore stack limits > 8 MB with
! 860: a warning. Empirically, it is not safe to access arbitrary pages
! 861: in such large stacks. And the dirty bit implementation does not
! 862: guarantee that none of them will be accessed.
! 863: - Integrated Martin Tauchmann's Amiga changes.
! 864: - Integrated James Dominy's OpenBSD/SPARC port.
! 865:
! 866: Since 5.0alpha1
! 867: - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization).
! 868: - Added -DKEEP_BACK_PTRS and backptr.h interface. (The implementation
! 869: idea came from Al Demers.)
! 870:
! 871: Since 5.0alpha2
! 872: - Added some highly incomplete code to support a copied young generation.
! 873: Comments on nursery.h are appreciated.
! 874: - Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND,
! 875: so the same effect could be obtained with a runtime switch. This is
! 876: a step towards standardizing on a single dynamic GC library.
! 877: - Significantly changed the way leak detection is handled, as a consequence
! 878: of the above.
! 879:
! 880: Since 5.0 alpha3
! 881: - Added protection fault handling patch for Linux/M68K from Fergus
! 882: Henderson and Roman Hodek.
! 883: - Removed the tests for SGI_SOURCE in new_gc_alloc.h. This was causing that
! 884: interface to fail on nonSGI platforms.
! 885: - Changed the Linux stack finding code to use /proc, after changing it
! 886: to use HEURISTIC1. (Thanks to David Mossberger for pointing out the
! 887: /proc hook.)
! 888: - Added HP/UX incremental GC support and HP/UX 11 thread support.
! 889: Thread support is currently still flakey.
! 890: - Added basic Linux/IA64 support.
! 891: - Integrated Anthony Green's PicoJava support.
! 892: - Integrated Scott Ananian's StrongARM/NetBSD support.
! 893: - Fixed some fairly serious performance bugs in the incremental
! 894: collector. These have probably been there essentially forever.
! 895: (Mark bits were sometimes set before scanning dirty pages.
! 896: The reclaim phase unnecessarily dirtied full small object pages.)
! 897: - Changed the reclaim phase to ignore nearly full pages to avoid
! 898: touching them.
! 899: - Limited GC_black_list_spacing to roughly the heap growth increment.
! 900: - Changed full collection triggering heuristic to decrease full GC
! 901: frequency by default, but to explicitly trigger full GCs during
! 902: heap growth. This doesn't always improve things, but on average it's
! 903: probably a win.
! 904: - GC_debug_free(0, ...) failed. Thanks to Fergus Henderson for the
! 905: bug report and fix.
! 906:
! 907: Since 5.0 alpha4
! 908: - GC_malloc_explicitly_typed and friends sometimes failed to
! 909: initialize first word.
! 910: - Added allocation routines and support in the marker for mark descriptors
! 911: in a type structure referenced by the first word of an object. This was
! 912: introduced to support gcj, but hopefully in a way that makes it
! 913: generically useful.
! 914: - Added GC_requested_heapsize, and inhibited collections in nonincremental
! 915: mode if the actual used heap size is less than what was explicitly
! 916: requested.
! 917: - The Solaris pthreads version of GC_pthread_create didn't handle a NULL
! 918: attribute pointer. Solaris thread support used the wrong default thread
! 919: stack size. (Thanks to Melissa O'Neill for the patch.)
! 920: - Changed PUSH_CONTENTS macro to no longer modify first parameter.
! 921: This usually doesn't matter, but it was certainly an accident waiting
! 922: to happen ...
! 923: - Added GC_register_finalizer_no_order and friends to gc.h. They're
! 924: needed by Java implementations.
! 925: - Integrated a fix for a win32 deadlock resulting from clock() calling
! 926: malloc. (Thanks to Chris Dodd.)
! 927: - Integrated Hiroshi Kawashima's port to Linux/MIPS. This was designed
! 928: for a handheld platform, and may or may not be sufficient for other
! 929: machines.
! 930: - Fixed a va_arg problem with the %c specifier in cordprnt.c. It appears
! 931: that this was always broken, but recent versions of gcc are the first to
! 932: report the (statically detectable) bug.
! 933: - Added an attempt at a more general solution to dlopen races/deadlocks.
! 934: GC_dlopen now temporarily disables collection. Still not ideal, but ...
! 935: - Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64
! 936: prefetch instructions. May improve performance measurably, but I'm not
! 937: sure the code will run correctly on processors that don't support the
! 938: instruction. Won't build except with very recent gcc.
! 939: - Added caching for header lookups in the marker. This seems to result
! 940: in a barely measurable performance gain. Added support for interleaved
! 941: lookups of two pointers, but unconfigured that since the performance
! 942: gain is currently near zero, and it adds to code size.
! 943: - Changed Linux DATA_START definition to check both data_start and
! 944: __data_start, since nothing else seems to be portable.
! 945: - Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function
! 946: wrapping mechanism. Probably currently useful only on Linux.
! 947: - Moved some variables for the scratch allocator into GC_arrays, on
! 948: Martin Hirzel's suggestion.
! 949: - Fixed a win32 threads bug that caused the collector to not look for
! 950: interior pointers from one of the thread stacks without
! 951: ALL_INTERIOR_POINTERS. (Thanks to Jeff Sturm.)
! 952: - Added Mingw32 support. (Thanks again to Jeff Sturm for the patch.)
! 953: - Changed the alpha port to use the generic register scanning code instead
! 954: of alpha_mach_dep.s. Alpha_mach_dep.s doesn't look for pointers in fp
! 955: registers, but gcc sometimes spills pointers there. (Thanks to Manuel
! 956: Serrano for helping me debug this by email.) Changed the IA64 code to
! 957: do something similar for similar reasons.
! 958:
! 959: [5.0alpha5 doesn't really exist, but it may have escaped.]
! 960:
! 961: Since 5.0alpha6:
! 962: - -DREDIRECT_MALLOC was broken in alpha6. Fixed.
! 963: - Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to
! 964: accept it.
! 965: - Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be
! 966: linked into every executable.
! 967: - Added PREFETCH to bitmap marker. Changed it to use the header cache.
! 968: - GC_push_marked sometimes pushed one object too many, resulting in a
! 969: segmentation fault in GC_mark_from_mark_stack. This was probably an old
! 970: bug. It finally showed up in gctest on win32.
! 971: - Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE
! 972: when SMALL_CONFIG was defined. This was no doubt a major performance bug for
! 973: the default win32 configuration.
! 974: - Removed -DSMALL_CONFIG from NT_MAKEFILE. It seemed like an anchronism now
! 975: that the average PC has 64MB or so.
! 976: - Integrated Bryce McKinley's patches for linux threads and dynamic loading
! 977: from the libgcj tree. Turned on dynamic loading support for Linux/PPC.
! 978: - Changed the stack finding code to use environ on HP/UX. (Thanks
! 979: to Gustavo Rodriguez-Rivera for the suggestion.) This should probably
! 980: be done on other platforms, too. Since I can't test those, that'll
! 981: wait until after 5.0.
! 982:
! 983: Since 5.0alpha7:
! 984: - Fixed threadlibs.c for linux threads. -DUSE_LD_WRAP was broken and
! 985: -ldl was omitted. Fixed Linux stack finding code to handle
! 986: -DUSE_LD_WRAP correctly.
! 987: - Added MSWIN32 exception handler around marker, so that the collector
! 988: can recover from root segments that are unmapped during the collection.
! 989: This caused occasional failures under Windows 98, and may also be
! 990: an issue under Windows NT/2000.
! 991:
! 992: Since 5.0
! 993: - Fixed a gc.h header bug which showed up under Irix. (Thanks to
! 994: Dan Sullivan.)
! 995: - Fixed a typo in GC_double_descr in typd_mlc.c.
! 996: This probably could result in objects described by array descriptors not
! 997: getting traced correctly. (Thanks to Ben Hutchings for pointing this out.)
! 998: - The block nearly full tests in reclaim.c were not correct for 64 bit
! 999: environments. This could result in unnecessary heap growth under unlikely
! 1000: conditions.
! 1001:
! 1002: Since 5.1
! 1003: - dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it
! 1004: was defined as a macro. This prevented the collector from building on
! 1005: Irix.
! 1006: - We quietly assumed that indirect mark descriptors were never 0.
! 1007: Our own typed allocation interface violated that. This could result
! 1008: in segmentation faults in the marker with typed allocation.
! 1009: - Fixed a _DUSE_MUNMAP bug in the heap block allocation code.
! 1010: (Thanks to Ben Hutchings for the patch.)
! 1011: - Taught the collector about VC++ handling array operator new.
! 1012: (Thanks again to Ben Hutchings for the patch.)
! 1013: - The two copies of gc_hdrs.h had diverged. Made one a link to the other
! 1014: again.
! 1015:
! 1016: Since 5.2 (A few 5.2 patches are not in 6.0alpha1)
! 1017: - Fixed _end declaration for OSF1.
! 1018: - There were lots of spurious leak reports in leak detection mode, caused
! 1019: by the fact that some pages were not being swept, and hence unmarked
! 1020: objects weren't making it onto free lists. (This bug dated back to 5.0.)
! 1021: - Fixed a typo in the liblinuxgc.so Makefile rule.
! 1022: - Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work
! 1023: around a Windows 95 GetOpenFileName problem. (Thanks to Jacob Navia.)
! 1024:
! 1025: Since 5.3
! 1026: - Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH.
! 1027: (Thanks to Shawn Wagner for actually testing this.)
! 1028: - Fixed GC_is_thread_stack in solaris_threads.c. It forgot to return a value
! 1029: in the common case. I wonder why nobody noticed?
! 1030: - Fixed another silly syntax problem in GC_double_descr. (Thanks to
! 1031: Fergus Henderson for finding it.)
! 1032: - Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice.
! 1033:
! 1034: Since 5.4 (A few 5.3 patches are not in 6.0alpha2)
! 1035: - Added HP/PA prefetch support.
! 1036: - Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve
! 1037: the reliability of generating pointer backtrace information, e.g. in
! 1038: the Bigloo environment.
! 1039: - Added parallel marking support (-DPARALLEL_MARK). This currently
! 1040: works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt
! 1041: to other platforms. This is intended to be a lighter-weight (less
! 1042: new code, probably not as scalable) solution than the work by Toshio Endo
! 1043: et al, at the University of Tokyo. A number of their ideas were
! 1044: reused, though the code wasn't, and the underlying data structure
! 1045: is significantly different. In particular, we keep the global mark
! 1046: stack as a single shared data structure, but most of the work is done
! 1047: on smaller thread-local mark stacks.
! 1048: - Changed GC_malloc_many to be cheaper, and to require less mutual exclusion
! 1049: with -DPARALLEL_MARK.
! 1050: - Added full support for thread local allocation under Linux
! 1051: (-DTHREAD_LOCAL_ALLOC). This is a thin veneer on GC_malloc_many, and
! 1052: should be easily portable to other platforms, especially those that
! 1053: support pthreads.
! 1054: - CLEAR_DOUBLE was not always getting invoked when it should have been.
! 1055: - GC_gcj_malloc and friends used different out of memory handling than
! 1056: everything else, probably because I forgot about one when I implemented
! 1057: the other. They now both call GC_oom_fn(), not GC_oom_action().
! 1058: - Integrated Jakub Jelinek's fixes for Linux/SPARC.
! 1059: - Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of
! 1060: GC_arrays, and separately registered the first two as excluded roots.
! 1061: This makes code compiled with gc_inl.h less dependent on the
! 1062: collector version. (It would be nice to remove the inclusion of
! 1063: gc_priv.h by gc_inl.h completely, but we're not there yet. The
! 1064: locking definitions in gc_priv.h are still referenced.)
! 1065: This change was later coniditoned on SEPARATE_GLOBALS, which
! 1066: is not defined by default, since it involves a performance hit.
! 1067: - Register GC_obj_kinds separately as an excluded root region. The
! 1068: attempt to register it with GC_arrays was usually failing. (This wasn't
! 1069: serious, but seemed to generate some confusion.)
! 1070: - Moved backptr.h to gc_backptr.h.
! 1071:
! 1072: Since 6.0alpha1
! 1073: - Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms
! 1074: for which that's expensive.
! 1075: - Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems.
! 1076: - Added a missing volatile to OR_WORD and renamed the parameter to
! 1077: GC_compare_and_swap so it's not a C++ reserved word. (Thanks to
! 1078: Toshio Endo for pointing out both of those.)
! 1079: - Changed Linux dynamic library registration code to look at /proc/self/maps
! 1080: instead of the rld data structures when REDIRECT_MALLOC is defined.
! 1081: Otherwise some of the rld data data structures may be prematurely garbage
! 1082: collected. (Thanks to Eric Benson for helping to track this down.)
! 1083: - Fixed USE_LD_WRAP a bit more, so it should now work without threads.
! 1084: - Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness.
! 1085: Tomporarily added some backward compatibility definitions. Renamed
! 1086: USE_LD_WRAP to GC_USE_LD_WRAP.
! 1087: - Many MACOSX POWERPC changes, some additions to the gctest output, and
! 1088: a few minor generic bug fixes. (Thanks to Dietmar Planitzer.)
! 1089:
! 1090: Since 6.0 alpha2
! 1091: - Fixed the /proc/self/maps code to not seek, since that apparently is not
! 1092: reliable across all interesting kernels.
! 1093: - Fixed some compilation problems in the absence of PARALLEL_MARK
! 1094: (introduced in alpha2).
! 1095: - Fixed an algorithmic problem with PARALLEL_MARK. If work needs to
! 1096: be given back to the main mark "stack", the BOTTOM entries of the local
! 1097: stack should be given away, not the top ones. This has substantial
! 1098: performance impact, especially for > 2 processors, from what I can tell.
! 1099: - Extracted gc_lock.h from gc_priv.h. This should eventually make it a
! 1100: bit easier to avoid including gc_priv.h in clients.
! 1101: - Moved all include files to include/ and removed duplicate links to the
! 1102: same file. The old scheme was a bad idea because it was too easy to get the
! 1103: copies out of sync, and many systems don't support hard links.
! 1104: Unfortunately, it's likely that I broke some of the non-Unix Makefiles in
! 1105: the process, although I tried to update them appropriately.
! 1106: - Removed the partial support for a copied nursery. It's not clear that
! 1107: this would be a tremendous win, since we don't consistently lose to
! 1108: generational copying collectors. And it would significantly complicate
! 1109: many things. May be reintroduced if/when it really turns out to win.
! 1110: - Removed references to IRIX_JDK_THREADS, since I believe there never
! 1111: were and never will be any clients.
! 1112: - Added some code to linux_threads.c to possibly support HPUX threads
! 1113: using the Linux code. Unfortunately, it doesn't work yet, and is
! 1114: currently disabled.
! 1115: - Added support under Linux/X86 for saving the call chain, both in (debug)
! 1116: objects for client debugging, and in GC_arrays._last_stack for GC
! 1117: debugging. This was previously supported only under Solaris. It is
! 1118: not enabled by default under X86, since it requires that code be compiled
! 1119: to explicitly dave frame pointers on the call stack. (With gcc this
! 1120: currently happens by default, but is often turned off explicitly.)
! 1121: To turn it on, define SAVE_CALL_CHAIN.
! 1122:
! 1123: Since 6.0 alpha3
! 1124: - Moved up the detection of mostly full blocks to the initiatiation of the
! 1125: sweep phase. This eliminates some lock conention in the PARALLEL_MARK case,
! 1126: as multiple threads try to look at mostly full blocks concurrently.
! 1127: - Restored the code in GC_malloc_many that grabs a prefix of the global
! 1128: free list. This avoids the case in which every GC_malloc_many call
! 1129: tries and fails to allocate a new heap block, and the returns a single
! 1130: object from the global free list.
! 1131: - Some minor fixes in new_hblk.c. (Attempted to build free lists in order
! 1132: of increasing addresses instead of decreasing addresses for cache performance
! 1133: reasons. But this seems to be only a very minor gain with -DEAGER_SWEEP,
! 1134: and a loss in other cases. So the change was backed out.)
! 1135: - Fixed some of the documentation. (Thanks in large part to Fergus
! 1136: Henderson.)
! 1137: - Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform
! 1138: large numbers of mmaps. (Thanks to Eric Benson.) Also fixed that code to
! 1139: deal with short reads.
! 1140: - Added GC_get_total_bytes().
! 1141: - Fixed leak detection mode to avoid spurious messages under linuxthreads.
! 1142: (This should also now be easy for the other supported threads packages.
! 1143: But the code is tricky enough that I'm hesitant to do it without being able
! 1144: to test. Everything allocated in the GC thread support itself should be
! 1145: explicitly deallocated.)
! 1146: - Made it possible (with luck) to redirect malloc to GC_local_malloc.
! 1147:
! 1148: Since 6.0 alpha4
! 1149: - Changed the definition of GC_pause in linux_threads.c to use a volatile
! 1150: asm. Some versions of gcc apparently optimize away writes to local volatile
! 1151: variables. This caused poor locking behaviour starting at about
! 1152: 4 processors.
! 1153: - Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep
! 1154: to linux_threads.c.
! 1155: The first two calls could be used to generally avoid sending GC signals to
! 1156: blocked threads, avoiding both premature wakeups and unnecessary overhead.
! 1157: - Fixed a serious bug in thread-local allocation. At thread termination,
! 1158: GC_free could get called on small integers. Changed the code for thread
! 1159: termination to more efficiently return left-over free-lists.
! 1160: - Integrated Kjetil Matheussen's BeOS support.
! 1161: - Rearranged the directory structure to create the doc and tests
! 1162: subdirectories.
! 1163: - Sort of integrated Eric Benson's patch for OSF1. This provided basic
! 1164: OSF1 thread support by suitably extending hpux_irix_threads.c. Based
! 1165: on earlier email conversations with David Butenhof, I suspect that it
! 1166: will be more reliable in the long run to base this on linux_threads.c
! 1167: instead. Thus I attempted to patch up linux_threads.c based on Eric's code.
! 1168: The result is almost certainly broken, but hopefully close enough that
! 1169: someone with access to a machine can pick it up.
! 1170: - Integrated lots of minor changes from the NetBSD distribution. (These
! 1171: were supplied by David Brownlee. I'm not sure about the original
! 1172: authors.)
! 1173: - Hacked a bit more on the HP/UX thread-support in linux_threads.c. It
! 1174: now appears to work in the absence of incremental collection. Renamed
! 1175: hpux_irix_threads.c back to irix_threads.c, and removed the attempt to
! 1176: support HPUX there.
! 1177: - Changed gc.h to define _REENTRANT in cases in which it should already
! 1178: have been defined. It is still safer to also define it on the command
! 1179: line.
! 1180:
! 1181: Since 6.0alpha5:
! 1182: - Changed the definition of DATASTART on ALPHA and IA64, where data_start
! 1183: and __data_start are not defined by earlier versions of glibc. This might
! 1184: need to be fixed on other platforms as well.
! 1185: - Changed the way the stack base and backing store base are found on IA64.
! 1186: This should now remain reliable on future kernels. But since it relies
! 1187: on /proc, it will no longer work in the simulated NUE environment.
! 1188: - Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent
! 1189: on the OS. On non-Unix systems, rand() should be used instead. Handled
! 1190: small RAND_MAX. (Thanks to Peter Ross for pointing this out.)
! 1191: - Fixed the cord make rules to create the cord subdirectory, if necessary.
! 1192: (Thanks to Doug Moen.)
! 1193: - Changed fo_object_size calculation in finalize.c. Turned finalization
! 1194: of nonheap object into a no-op. Removed anachronism from GC_size()
! 1195: implementation.
! 1196: - Changed GC_push_dirty call in solaris_threads.c to GC_push_selected.
! 1197: It was missed in a previous renaming. (Thanks to Vladimir Tsichevski
! 1198: for pointing this out.)
! 1199: - Arranged to not not mask SIGABRT in linux_threads.c. (Thanks to Bryce
! 1200: McKinlay.)
! 1201: - Added GC_no_dls hook for applications that want to register their own
! 1202: roots.
! 1203: - Integrated Kjetil Matheussen's Amiga changes.
! 1204: - Added FREEBSD_STACKBOTTOM. Changed the X86/FreeBSD port to use it.
! 1205: (Thanks to Matthew Flatt.)
! 1206: - Added pthread_detach interception for platforms supported by linux_threads.c
! 1207: and irix_threads.c. Should also be added for Solaris?
! 1208: - Changed the USE_MMAP code to check for the case in which we got the
! 1209: high end of the address space, i.e. mem_ptr + mem_sz == 0. It appears
! 1210: that this can happen under Solaris 7. It seems to be allowed by what
! 1211: I would claim is an oversight in the mmap specification. (Thanks to Toshio
! 1212: Endo for pointing out the problem.)
! 1213: - Cleanup of linux_threads.c. Some code was originally cloned from
! 1214: irix_threads.c and now unnecessary. Some comments were obviously wrong.
! 1215: - (Mostly) fixed a longstanding problem with setting of dirty bits from
! 1216: a signal handler. In the presence of threads, dirty bits could get lost,
! 1217: since the etting of a bit in the bit vector was not atomic with respect
! 1218: to other updates. The fix is 100% correct only for platforms for which
! 1219: GC_test_and_set is defined. The goal is to make that all platforms with
! 1220: thread support. Matters only if incremental GC and threads are both
! 1221: enabled.
! 1222: - made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an
! 1223: initialization time, instead of build-time option. This is a
! 1224: nontrivial, high risk change. It should slow down the code measurably
! 1225: only if MERGE_SIZES is not defined, which is a very nonstandard
! 1226: configuration.
! 1227: - Added doc/README.environment, and implemented what it describes. This
! 1228: allows a number of additional configuration options to be set through
! 1229: the environment. It documents a few previously undocumented options.
! 1230: - Integrated Eric Benson's leak testing improvements.
! 1231: - Removed the option to throw away the beginning of each page (DISCARD_WORDS).
! 1232: This became less and less useful as processors enforce stricter alignment.
! 1233: And it hadn't been tested in ages, and was thus probably broken anyway.
! 1234:
! 1235: Since 6.0alpha6:
! 1236: - Added GC_finalizer_notifier. Fixed GC_finalize_on_demand. (The variable
! 1237: actually wasn't being tested at the right points. The build-time flag
! 1238: was.)
! 1239: - Added Tom Tromey's S390 Linux patch.
! 1240: - Added code to push GC_finalize_now in GC_push_finalizer_structures.
! 1241: (Thanks to Matthew Flatt.)
! 1242: - Added GC_push_gc_structures() to push all GC internal roots.
! 1243: - Integrated some FreeBSD changes from Matthew Flatt.
! 1244: - It looks like USRSTACK is not always correctly defined under Solaris.
! 1245: Hacked gcconfig.h to attempt to work around the problem. The result
! 1246: is not well tested. (Thanks again to Matthew Flatt for pointing this
! 1247: out. The gross hack is mine. - HB)
! 1248: - Added Ji-Yong Chung's win32 threads and C++ fixes.
! 1249: - Arranged for hpux_test_and_clear.s to no longer be needed or built.
! 1250: It was causing build problems with gas, and it's not clear this is
! 1251: better than the pthreads alternative on this platform.
! 1252: - Some MINGW32 fixes from Hubert Garavel.
! 1253: - Added Initial Hitachi SH4 port from Kaz Kojima.
! 1254: - Ported thread-local allocation and parallel mark code to HP/UX on PA_RISC.
! 1255: - Made include/gc_mark.h more public and separated out the really private
! 1256: pieces. This is probably still not quite sufficient for clients that
! 1257: want to supply their own kind of type information. But it's a start.
! 1258: This involved lots of identifier renaming to make it namespace clean.
! 1259: - Added GC_dont_precollect for clients that need complete control over
! 1260: the root set.
! 1261: - GC_is_visible didn't do the right thing with gcj objects. (Not that
! 1262: many people are likely to care, but ...)
! 1263: - Don't redefine read with GC_USE_LD_WRAP.
! 1264: - Initial port to LINUX/HP_PA. Incremental collection and threads are not
! 1265: yet supported. (Incremental collection should work if you have the
! 1266: right kernel. Threads may work with a sufficiently patched pthread
! 1267: library.)
! 1268: - Changed gcconfig.h to recognize __i386__ as an alternative to i386 in
! 1269: many places. (Thanks to Benjamin Lerman.)
! 1270: - Made win32_threads.c more tolerant of detaching a thread that it didn't
! 1271: know about. (Thanks to Paul Nash.)
! 1272: - Added Makefile.am and configure.in from gcc to the distribution, with
! 1273: minimal changes. For the moment, those are just placeholders. In the
! 1274: future, we're planning to switch to a GNU-style build environment for
! 1275: Un*x-like systems, though the old Makefile will remain as a backup.
! 1276: - Turned off STUBBORN_ALLOC by default, and added it back as a Makefile
! 1277: option.
! 1278: - Redistributed some functions between malloc.c and mallocx.c, so that
! 1279: simple statically linked apps no longer pull in mallocx.o.
! 1280: - Changed large object allocation to clear the first and last few words
! 1281: of each block before releassing the lock. Otherwise the marker could see
! 1282: objects with nonsensical type descriptors.
! 1283: - Fixed a couple of subtle problems that could result in not recognizing
! 1284: interior pointers from the stack. (I believe these were introduced
! 1285: in 6.0alpha6.)
! 1286: - GC_debug_free_inner called GC_free, which tried to reacquire the
! 1287: allocator lock, and hence deadlocked. (DBG_HDRS_ALL probably never worked
! 1288: with threads?)
! 1289: - Fixed several problems with back traces. Accidental references to a free
! 1290: list could cause the free list pointer to be overwritten by a back pointer.
! 1291: There seemed to be some problems with the encoding of root and finalizer
! 1292: references.
! 1293:
! 1294: Since 6.0alpha7:
! 1295: - Changed GC_debug_malloc_replacement and GC_debug_realloc_replacement
! 1296: so that they compile under Irix. (Thanks to Dave Love.)
! 1297: - Updated powerpc_macosx_mach_dep.s so that it works if the collector
! 1298: is in a dynamic library. (Thanks to Andrew Begel.)
! 1299: - Transformed README.debugging into debugging.html, updating and
! 1300: expanding it in the process. Added gcdescr.html and tree.html
! 1301: from the web site to the GC distribution.
! 1302: - Fixed several problems related to PRINT_BLACK_LIST. This involved
! 1303: restructuring some of the marker macros.
! 1304: - Fixed some problems with the sizing of objects with debug information.
! 1305: Finalization was broken KEEP_BACK_PTRS or PRINT_BLACK_LIST. Reduced the
! 1306: object size with SHORT_DEBUG_HDRS by another word.
! 1307: - The "Needed to allocate blacklisted ..." warning had inadvertently
! 1308: been turned off by default, due to a buggy test in allchblk.c. Turned
! 1309: it back on.
! 1310: - Removed the marker macros to deal with 2 pointers in interleaved fashion.
! 1311: They were messy and the performance improvement seemed minimal. We'll
! 1312: leave such scheduling issues to the compiler.
! 1313: - Changed Linux/PowerPC test to also check for __powerpc__ in response
! 1314: to a discussion on the gcc mailing list.
! 1315: - On Matthew Flatt's suggestion removed the "static" from the jmp_buf
! 1316: declaration in GC_generic_push_regs. This was causing problems in
! 1317: systems that register all of their own roots. It looks far more correct
! 1318: to me without the "static" anyway.
! 1319: - Fixed several problems with thread local allocation of pointerfree or
! 1320: typed objects. The collector was reclaiming thread-local free lists, since
! 1321: it wasn't following the link fields.
! 1322: - There was apparently a long-standing race condition related to multithreaded
! 1323: incremental collection. A collection could be started and a thread stopped
! 1324: between the memory unprotect system call and the setting of the
! 1325: corresponding dirt bit. I believe this did not affect Solaris or PCR, which
! 1326: use a different dirty-bit implementation. Fixed this by installing
! 1327: signal handlers with sigaction instead of signal, and disabling the thread
! 1328: suspend signal while in the write-protect handler. (It is unclear
! 1329: whether this scenario ever actually occurred. I found it while tracking
! 1330: down the following:)
! 1331: - Incremental collection did not cooperate correctly with the PARALLEL_MARK
! 1332: implementation of GC_malloc_many or the local_malloc primitves. It still
! 1333: doesn't work well, but it shouldn't lose memory anymore.
! 1334: - Integrated some changes from the gcc source tree that I had previously
! 1335: missed. (Thanks to Bryce McKinley for the reminder/diff.)
! 1336: - Added Makefile.direct as a copy of the default Makefile, which would
! 1337: normally be overwritten if configure is run.
! 1338: - Changed the gc.tar target in Makefile.direct to embed the version number
! 1339: in the gc directory name. This will affect future tar file distributions.
! 1340: - Changed the Irix dynamic library finding code to no longer try to
! 1341: eliminate writable text segments under Irix6.x, since that is probably no
! 1342: longer necessary, and can apparently be unsafe on occasion. (Thanks to
! 1343: Shiro Kawai for pointing this out.)
! 1344: - GC_cleanup with GC_DEBUG enabled passed a real object base address to
! 1345: GC_debug_register_finalizer_ignore_self, which expected a pointer past the
! 1346: debug header. Call GC_register_finalizer_ignore_self instead, even with
! 1347: debugging enabled. (Thanks to Jean-Daniel Fekete for catching this.)
! 1348: - The collector didn't build with call chain saving enabled but NARGS=0.
! 1349: (Thanks to Maarten Thibaut.)
! 1350: - Fixed up the GNU-style build files enough so that they work in some
! 1351: obvious cases.
! 1352: - Added initial port to Digital Mars compiler for win32. (Thanks to Walter
! 1353: Bright.)
! 1354:
! 1355: Since 6.0alpha8:
! 1356: - added README.macros.
! 1357: - Made gc.mak a symbolic link to work around winzip's tendency to ignore
! 1358: hard links.
! 1359: - Simplified the setting of NEED_FIND_LIMIT in os_dep.c, possibly breaking
! 1360: it on untested platforms.
! 1361: - Integrated initial GNU HURD port. (Thanks to Chris Lingard and Igor
! 1362: Khavkine.)
! 1363: - A few more fixes for Digital Mars compiler (Walter Bright).
! 1364: - Fixed gcc version recognition. Renamed OPERATOR_NEW_ARRAY to
! 1365: GC_OPERATOR_NEW_ARRAY. Changed GC_OPERATOR_NEW_ARRAY to be the default.
! 1366: It can be overridden with -DGC_NO_OPERATOR_NEW_ARRAY. (Thanks to
! 1367: Cesar Eduardo Barros.)
! 1368: - Changed the byte size to free-list mapping in thread local allocation
! 1369: so that size 0 allocations are handled correctly.
! 1370: - Fixed Linux/MIPS stackbottom for new toolchain. (Thanks to Ryan Murray.)
! 1371: - Changed finalization registration to invoke GC_oom_fn when it runs out
! 1372: of memory.
! 1373: - Removed lvalue cast in finalize.c. This caused some debug configurations
! 1374: not to build with some non-gcc compilers.
! 1375:
! 1376: Since 6.0alpha9:
! 1377: - Two more bug fixes for KEEP_BACK_PTRS and DBG_HDRS_ALL.
! 1378: - Fixed a stack clearing problem that resulted in SIGILL with a
! 1379: misaligned stack pointer for multithreaded SPARC builds.
! 1380: - Integrated another HURD patch (thanks to Igor Khavkine).
! 1381:
! 1382: Since 6.0:
! 1383: - Non-debug, atomic allocations could result in bogus smashed object
! 1384: reports with debugging on. (Thanks to Patrick Doyle for the small
! 1385: test case.)
! 1386: - Fixed GC_get_register_stack_base (Itanium only) to work around a glibc
! 1387: 2.2.4 bug.
! 1388: - Initial port to HP/UX on Itanium. Thread support and both 32 and 64
! 1389: bit ABIs appear to work. Parallel mark support doesn't yet, due to
! 1390: some inline assembly code issues. Thread local allocation does appear
! 1391: to work.
! 1392: - ifdef'ed out glibc2.1/Itanium workaround. I suspect nobody is using
! 1393: that combination anymore.
! 1394: - Added a patch to make new_gc_alloc.h usable with gcc3.0. (Thanks to
! 1395: Dimitris Vyzovitis for the patch.)
! 1396: - Debugged 64-bit support on HP/UX PA-RISC.
! 1397: - Turned on dynamic loading support for FreeBSD/ELF. (Thanks to Peter
! 1398: Housel.)
! 1399: - Unregistering of finalizers with debugging allocation was broken.
! 1400: (Thanks to Jani Kajala for the test case.)
! 1401: - Old finalizers were not returned correctly from GC_debug_register_finalizer.
! 1402: - Disabled MPROTECT_VDB for Linux/M68K based on a report that it doesn't work.
! 1403: - Cleaned up some statistics gathering code in reclaim.c (Thanks to Walter
! 1404: Bright.)
! 1405: - Added some support for OpenBSD/ELF/Linux. (Thanks to Suzuki Toshiya.)
! 1406: - Added Jakub Jelinek's patch to use dl_iterate_phdr for dynamic library
! 1407: traversal to dyn_load.c. Changed it to weakly reference dl_iterate_phdr,
! 1408: so that the old code is stilll used with old versions of glibc.
! 1409: - Cleaned up feature test macros for various threads packages and
! 1410: integrated (partially functional) FreeBSD threads code from Loren Rittle.
! 1411: It's likely that the cleanup broke something, since it touched lots of
! 1412: code. It's also likelly that it fixed some unreported bugs in the
! 1413: less common thread implementations, since some of the original code
! 1414: didn't stand up to close scrutiny. Support for the next pthreads
! 1415: implementation should be easier to add.
! 1416:
! 1417: Since 6.1alpha1:
! 1418: - No longer wrap read by default in multithreaded applications. It was
! 1419: pointed out on the libgcj list that this holds the allocation lock for
! 1420: way too long if the read blocks. For now, reads into the heap are
! 1421: broken with incremental collection. It's possible to turn this back on
! 1422: if you make sure that read calls don't block (e.g. by calling select
! 1423: first).
! 1424: - Fix ifdef in Solaris_threads.h to refer to GC_SOLARIS_THREADS.
! 1425: - Added check for environment variable GC_IGNORE_GCJ_INFO.
! 1426: - Added printing of stop-the-world GC times if GC_PRINT_STATS environment
! 1427: variable is set.
! 1428: - The calloc definition in leak_detector.h was missing parentheses, and
! 1429: realloc was missing a second argument to GC_REALLOC.
! 1430: (Thanks to Elrond (elrond<at>samba-tng.org).)
! 1431: - Added GC_PRINT_BACK_HEIGHT environment variable and associated
! 1432: code, mostly in the new file backgraph.c. See doc/README.environment.
! 1433: - Added -DUSE_GLOBAL_ALLOC to work around a Windows NT issue. (Thanks to
! 1434: Jonathan Clark.)
! 1435: - Integrated port to NEC EWS4800 (MIPS-based workstation, with somewhat
! 1436: different address-space layout). This may help for other machines with
! 1437: holes in the data segment. (Thanks to Hironori Sakamoto.)
! 1438: - Changed the order in which GC_push_roots and friends push things onto
! 1439: the mark stack. GC_push_all calls need to come first, since we can't
! 1440: necessarily recovere if those overflow the mark stack. (Thanks to
! 1441: Matthew Flatt for tracking down the problem.)
! 1442: - Some minor cleanups to mostly support the Intel compiler on Linux/IA64.
! 1443:
! 1444: Since 6.1 alpha2:
! 1445: - Minor cleanup on the gcconfig.h section for SPARC.
! 1446: - Minor fix to support Intel compiler for I386/Linux. (Thanks to Sven
! 1447: Hartrumpf.)
! 1448: - Added SPARC V9 (64-bit) support. (Thanks to Jeff Sturm.)
! 1449: - Restructured the way in which we determine whether or not to keep
! 1450: call stacks for debug allocation. By default SAVE_CALL_COUNT is
! 1451: now zero on all platforms. Added SAVE_CALL_NARGS parameters.
! 1452: If possible, use execinfo.h to capture call stack. (This should
! 1453: add support for a number of new platforms, though often at
! 1454: considerable runtime expense.)
! 1455: - Try to print symbolic information for call stacks. On Linux, we
! 1456: do this with a combination of execinfo.h and running addr2line in
! 1457: a separate process. This is both much more expensive and much more
! 1458: useful. Amazingly, it seems to be fast enough for most purposes.
! 1459: - Redefined strdup if -DREDIRECT_MALLOC is given.
! 1460: - Changed incremental collector and MPROTECT_VDB implementation so that,
! 1461: under favorable conditions, pointerfree objects are not protected.
! 1462: Added GC_incremental_protection_needs() to determine ahead of time whether
! 1463: pointerfree objects may be protected. Replaced GC_write_hint() with
! 1464: GC_remove_protection().
! 1465: - Added test for GC_ENABLE_INCREMENTAL environment variable.
! 1466: - Made GC_time_limit runtime configurable. Added GC_PAUSE_TIME_TARGET
! 1467: environment variable.
! 1468: - Eliminated GC_page_sz, a duplicate of GC_page_size.
! 1469: - Caused the Solaris and Irix thread creation primitives to call
! 1470: GC_init_inner().
! 1471:
! 1472: Since 6.1alpha3:
! 1473: - Fixed typo in sparc_mach_dep.S, preventing the 64-bit version from
! 1474: building. Increased 64-bit heap size limit in test.c slightly, since
! 1475: a functional SPARC collector seems to slightly exceed the old limits.
! 1476: (Thanks again to Jeff Sturm.)
! 1477: - Use NPRGREG in solaris_threads.c, thus printing all registers if things
! 1478: go wrong.
! 1479: - Added GC_MARKERS environment variable to allow use of a single marker
! 1480: thread on an MP without confusing the lock implementation.
! 1481: - Collect much less aggressively in incremental mode with GC_TIME_UNLIMITED.
! 1482: This is really a purely generational mode, and we can afford to
! 1483: postpone the collection until the heap is (nearly) full.
! 1484: - Remove read() wrapper for MPROTECT_VDB. It was causing more harm than
! 1485: good. It is often no longer needed if system calls avoid writing to
! 1486: pointerfull heap objects.
! 1487: - Fix MACOSX test in gcconfig.h. (Thanks to John Clements.)
! 1488: - Change GC_test_and_set so that it consistently has one argument.
! 1489: Add spaces to ::: in powerpc assembly code in gc_locks.h.
! 1490: (Thanks to Ryan Murray.)
! 1491: - Fixed a formatting error in dbg_mlc.c. Added prototype to GC_abort()
! 1492: declaration. (Thanks to Michael Smith.)
! 1493: - Removed "source" argument to GC_find_start(). Eliminate GC_FIND_START().
! 1494: - Added win32 recognition code in configure.in. Changed some of the
! 1495: dllimport/export defines in gc.h. (Thanks to Adam Megacz.)
! 1496: - GC_malloc_many didn't set hb_last_reclaimed when it called
! 1497: GC_reclaim_generic. (I'm not sure this matters much, but ...)
! 1498: - Allocating uncollectable objects with debug information sometimes
! 1499: allocated objects that were one byte too small, since uncollectable
! 1500: objects don't have the extra byte added at the end. (Thanks to
! 1501: Wink Saville for pointing this out.)
! 1502: - Added a bit more assertion checking to make sure that gcj objects
! 1503: on free lists never have a nonzero second word.
! 1504: - Replaced BCC_MAKEFILE with an up-to-date one. (Thanks to
! 1505: Andre Leiradella.)
! 1506: - Upgraded libtool, cinfigure.in and some related files to hopefully
! 1507: support NetBSD/SPARC. (Thanks to Adrian Bunk.) Unfortunately,
! 1508: libtool 1.4.2 seemed to be buggy due to missing quotes in several
! 1509: "test" invocations. Fixed those in the ltmain.sh script.
! 1510: - Some win32-specific patches, including the introduction of
! 1511: GC_CreateThread. (Thanks to Adam Megacz.)
! 1512: - Merged in gcj changes from Anthony Green to support embedded systems.
! 1513: - Tried to consistently rename preprocessed assembly files with a capital
! 1514: .S extension.
! 1515: - Use alpha_mach_dep.S on ALPHA again. It doesn't really matter, but this
! 1516: makes our distribution consistent with the gcc one, avoiding future merge
! 1517: problems.
! 1518: - Move GET_MEM definition into gcconfig.h. Include gcconfig.h slightly
! 1519: later in gc_priv.h to avoid forward references to ptr_t.
! 1520: - Add some testing of local allocation to test.c.
! 1521: - Change definition of INVALID_QTID in specific.h. The -1 value was used
! 1522: inconsistently, and too likely to collide with a valid stack address.
! 1523: Some general clean-up of specific.[ch]. Added assertions. (Thanks
! 1524: to Michael Smith for tracking down an intermittent bug to this
! 1525: general area. I'm not sure it has been squashed yet, however.)
! 1526: - On Pthread systems it was not safe to call GC_malloc() between fork()
! 1527: and exec(). According to the applicable standards, it doesn't appear
! 1528: to be safe to call malloc() or many other libc functions either, thus
! 1529: it's not clear this is fixable. Added experimental support for
! 1530: -DHANDLE_FORK in linux_threads.c which tries to support it. It may
! 1531: succeed if libc does the right thing. I'm not sure whether it does.
! 1532: (Thanks to Kenneth Schalk for pointing out this issue.)
! 1533: - Documented thread local allocation primitives to require an
! 1534: explicit GC_init call. GC_init_parallel is no longer declared to
! 1535: be a constructor function, since that isn't portable and often
! 1536: seems to lead to initialization order problems.
! 1537: - Changed gc_cpp.cc and gc_cpp.h in one more attempt to make them
! 1538: compatible with Visual C++ 6. (Thanks to Wink Saville for the
! 1539: patch.)
! 1540: - Some more patches for Linux on HP PA-RISC.
! 1541: - Added include/gc_allocator.h. It implements (hopefully) standard
! 1542: conforming (as opposed to SGI-style) allocators that allocate
! 1543: collectable (gc_allocator) or GC-traceable, but not collectable
! 1544: (traceable_allocator) objects. This borrows heavily from libstc++,
! 1545: which borrows heavily from the SGI implementation, this part of
! 1546: which was written by Matt Austern. Changed test_cpp.cc to very
! 1547: minimally test this.
! 1548: - On Linux/X86, retry mmap with a different start argument. That should
! 1549: allow the collector to use more (closer to 3GB) of the address space.
! 1550: (Thanks to Jeffrey Mark Siskind for tracking this down.)
! 1551: - Force 64 bit alignment with GCJ support. (Reflects Bryce McKinley's
! 1552: patch to the gcc tree.)
! 1553: - Refined the choice of sa_handler vs. sa_sigaction in GC_dirty_init
! 1554: to accomodate some glibc5 systems. (Thanks to Dan Fandrich for the
! 1555: patch.)
! 1556: - Compensated for the fact that current versions of glibc set
! 1557: __libc_stack_end incorrectly on Linux/IA64 while initialization code
! 1558: is running. This could cause the collector to miss 16 bytes of
! 1559: the memory stack if GC_malloc or friends where called before main().
! 1560: - Mostly integrated Takis Psarogiannakopoulos' port to DG/UX Inix 86.
! 1561: This will probably take another iteration to work, since his
! 1562: patch conflicted with the libtool upgrade.
! 1563: - Added README.arm.cross containing some information about cross-
! 1564: compiling to an ARM processor from Margaret Fleck.
! 1565:
! 1566: Since 6.1alpha4:
! 1567: - Added GC_finalizer_mem_freed, and changed some of the code that
! 1568: decided on heap expansion to look at it. Memory explicitly
! 1569: deallocated by finalizers essentially needs to be counted as reclaimed
! 1570: by the GC. Otherwise there are cases in which the heap can grow
! 1571: unboundedly. (Thanks to Mark Reichert for the test case.)
! 1572: - Integrated Adam Megacz patches to not scan dynamic libraries if
! 1573: we are compiling with gcc on win32. Otherwise we need structured
! 1574: exception handling to deal with asynchronously unmapped root
! 1575: segments, and gcc doesn't directly support that.
! 1576: - Integrated Anthony Green's patch to support Wine.
! 1577: - GC_OPERATOR_NEW_ARRAY was misspelled OPERATOR_NEW_ARRAY in several
! 1578: places, including gc_cpp.cc. (Thanks to Wink Saville for pointing
! 1579: this out.)
! 1580: - Integrated Loren James Rittle's Alpha FreeBSD patches. In
! 1581: response to Richard Henderson's suggestion, these also
! 1582: changed the declarations of symbols like _end on many platforms to
! 1583: that they wouldn't mistakenly be declared as short data symbols.
! 1584: - Integrated changes from the Debian distribution. (Thanks to Ryan Murray
! 1585: for pointing these out.) Fix C++ comments in POWERPC port. Add ARM32
! 1586: incremental GC support. Get rid of USE_GENERIC_PUSH_REGS for alpha/Linux,
! 1587: this time for real. Use va_copy to get rid of cord printf problems
! 1588: (finally).
! 1589: - Close file descriptor used to count cpus. Thanks to Jeff Sturm for
! 1590: pointing out the omission.
! 1591: - Don't just drop gcj free lists in GC_start_reclaim, since that can
! 1592: eventually cause the marker to see a bogus mark descriptor in the
! 1593: dropped objects. The usual symptom was a very intermittent segmentation
! 1594: fault in the marker. This mattered only if one of the GC_gcj_malloc
! 1595: variants was used. (Thanks to Michael Smith, Jeff Sturm, Bryce
! 1596: McKinley and Tom Tromey for helping to track this down.)
! 1597: - Fixed Linux and Solaris/64 SPARC configuration. (Thanks to David Miller,
! 1598: Jeff Sturm, Tom Tromey, and Christian Joensson.)
! 1599: - Fixed a typo in strdup definition. (Thanks to Gerard A Allan.)
! 1600: - Changed Makefile.direct to invoke $(CC) to assemble alpha_mach_dep.S.
! 1601: This is needed on Linux. I'm not sure whether it's better or worse
! 1602: on Tru64.
! 1603: - Changed gc_cpp.h once more to declare operator new and friends only in
! 1604: a Microsoft environment. This may need further fine tuning. (Thanks to
! 1605: Johannes Schmidt for pointing out that the older code breaks on gcc3.0.4.)
! 1606: - Don't ever override strdup if it's already macro defined. (Thanks to
! 1607: Adnan Ali for pointing out the problem.)
! 1608: - Changed gc_cpp.h yet again to also overload placement new. Due to the
! 1609: C++ overloading rules, the other overloaded new operations otherwise hide
! 1610: placement new, which causes many STL uses to break. (Thanks to Reza
! 1611: Shahidi for reporting this, and to Matt Austern for proposing a fix.)
! 1612: - Integrated cygwin pthreads support from Dan Bonachea.
! 1613: - Turn on DYNAMIC_LOADING for NetBSD. (Thanks to Krister Walfridsson.)
! 1614: - Changed printing code to print more complete GC times.
! 1615: - Applied Mark Mitchell's Irix patch to correct some bitrot.
! 1616: - Clarified which object-printing routines in dbg_mlc.c should hold
! 1617: the allocation lock. Restructured the code to allow reasonable object
! 1618: printing with -DREDIRECT_MALLOC.
! 1619: - Fix the Linux mmap code to always start with 0x1000 as the initial hint.
! 1620: Minor patches for 64-bit AIX, particularly to STACKBOTTOM.
! 1621: (Thanks again to Jeffrey Mark Siskind.)
! 1622: - Renamed "SUSPENDED" flag for Solaris threads support to avoid a conflict
! 1623: with a system header. (Thanks to Philp Brown.)
! 1624:
! 1625:
! 1626: To do:
! 1627: - --enable-redirect-malloc is mostly untested and known not to work
! 1628: on some platforms.
! 1629: - The win32 collector ends up tracing some (most?) objects allocated with
! 1630: the system allocator, in spite if the fact that it tries not to.
! 1631: This costs time and space, though it remains correct.
! 1632: We need a way to identify memory regions used by the system malloc(),
! 1633: or an alternate way to locate dll data areas. A very partial
! 1634: workaround is to use GC_malloc_atomic_uncollectable() instead of
! 1635: the system malloc() for most allocation.
! 1636: - There seem to be outstanding issues on Solaris/X86, possibly with
! 1637: finding the data segment starting address. Information/patches would
! 1638: be appreciated.
! 1639: - Very large root set sizes (> 16 MB or so) could cause the collector
! 1640: to abort with an unexpected mark stack overflow. (Thanks again to
! 1641: Peter Chubb.) NOT YET FIXED. Workaround is to increase the initial
! 1642: size.
! 1643: - The SGI version of the collector marks from mmapped pages, even
! 1644: if they are not part of dynamic library static data areas. This
! 1645: causes performance problems with some SGI libraries that use mmap
! 1646: as a bitmap allocator. NOT YET FIXED. It may be possible to turn
! 1647: off DYNAMIC_LOADING in the collector as a workaround. It may also
! 1648: be possible to conditionally intercept mmap and use GC_exclude_static_roots.
! 1649: The real fix is to walk rld data structures, which looks possible.
! 1650: - Incremental collector should handle large objects better. Currently,
! 1651: it looks like the whole object is treated as dirty if any part of it
! 1652: is.
! 1653:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>