1This is a rough history of garbage collector bugs and versions. 2 3This has been maintained with varying diligence over the years. 4 5I made an attempt to include recent contributors here. I apologize for any 6omissions. 7 8------------------------- 9 10 Version 1.3 and immediately preceding versions contained spurious 11assembly language assignments to TMP_SP. Only the assignment in the PC/RT 12code is necessary. On other machines, with certain compiler options, 13the assignments can lead to an unsaved register being overwritten. 14Known 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, 16but that's another story.) 17 18 Version 1.4 and earlier versions used compile time determined values 19for the stack base. This no longer works on Sun 3s, since Sun 3/80s use 20a different stack base. We now use a straightforward heuristic on all 21machines on which it is known to work (incl. Sun 3s) and compile-time 22determined values for the rest. There should really be library calls 23to determine such values. 24 25 Version 1.5 and earlier did not ensure 8 byte alignment for objects 26allocated 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 33routines and added support for registering dynamic library data segments 34in the standard mark_roots.c. Most of the data structures were revamped. 35The treatment of interior pointers was completely changed. Finalization 36was added. Support for locking was added. Object kinds were added. 37We added a black listing facility to avoid allocating at addresses known 38to occur as integers somewhere in the address space. Much of this 39was accomplished by adapting ideas and code from the PCR collector. 40The test program was changed and expanded. 41 42 Version 2.1 was the first stable version since 1.9, and added support 43for 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 173Version 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 179Version 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 184Version 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 227Since 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 267Since 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 295Since 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 356precise. 357 358* The definition of accessibility now ignores pointers from an 359finalizable object (an object with a clean-up function) to itself. 360This allows objects with virtual base classes to be finalizable by the 361collector. Compilers typically implement virtual base classes using 362pointers from an object to itself, which under the old definition of 363accessibility prevented objects with virtual base classes from ever 364being collected or finalized. 365 366* gc_cleanup now includes gc as a virtual base. This was enabled by 367the change in the definition of accessibility. 368 369* I added support for operator new[]. Since most (all?) compilers 370don't yet support operator new[], it is conditionalized on 371-DOPERATOR_NEW_ARRAY. The code is untested, but its trivial and looks 372correct. 373 374* The test program test_gc_c++ (later renamed test_cpp.cc) 375tries to test for the C++-specific functionality not tested by the 376other 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 391Since 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 445Since 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 480Since 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 524Since 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 531Since 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 535Since 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 553Since 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 557Since 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 632Since 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 718Since 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. 739Since 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. 757Since 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.) 788Since 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 799Since 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 821Since 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 832Since 4.14alpha2 833 - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea). 834 835Since 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 866Since 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 871Since 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 880Since 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 907Since 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 961Since 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 983Since 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 992Since 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 1002Since 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 1016Since 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 1025Since 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 1034Since 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 1072Since 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 1090Since 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 1123Since 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 1148Since 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 1181Since 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 1235Since 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 1294Since 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 1355Since 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 1376Since 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 1382Since 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 1417Since 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 1444Since 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 1472Since 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 1566Since 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 - Cause win32_threads.c to handle an out of range stack pointer correctly, 1625 though currently with a warning. (Thanks to Jonathan Clark for 1626 observing that win32 applications may temporarily use the stack 1627 pointer for other purposes, and suggesting a fix. Unfortunately, it's 1628 not clear that there is a complete solution to this problem.) 1629 1630Since 6.1alpha5: 1631 - Added GC_MAXIMUM_HEAP_SIZE environment variable. 1632 - Fix configure.in for MIPS/LINUX. (Thanks to H.J. Lu.) 1633 - Double page hash table size for -DLARGE_CONFIG. 1634 - Integrated Bo Thorsen's X86-64 support. 1635 - STACKBOTTOM definition for LINUX/MIPS was partially changed back. 1636 (Thanks to H.J. Lu and Hiroshi Kawashima for resolving this.) 1637 - Replaced all occurrences of LINUX_DATA_START in gcconfig.h with 1638 SEARCH_FOR_DATA_START. It doesn't hurt to falll back to a search. 1639 And __data_start doesn't seem to get defined correctly of the GC 1640 library is loaded with LD_PRELOAD, e.g. for leak detection. 1641 - If the GC_find_leak environment variable is set, do a 1642 atexit(GC_gcollect) to give us at least one chance to detect leaks. 1643 This may report some very benign leaks, but ... 1644 - Addeded REDIRECT_FREE. It's necessary if we want leak detection with 1645 LD_PRELOAD. 1646 - Defer printing of leaked objects, as for smashed objects. 1647 - Fixed process and descriptor leak in GC_print_callers. Try for 1648 line number even if we got function name.) 1649 - Ported parallel GC support and thread local allocation to Alpha. 1650 Not yet well-tested. 1651 - Added GC_DUMP_REGULARLY and added finalization statistics to GC_dump(). 1652 - Fixed Makefile.am to mention alpha_mach_dep.S instead of the defunct 1653 alpha_mach_dep.s. (Thanks to Fergus Henderson.) 1654 - Incorporated a change to new_gc_alloc.h, suggested by Johannes Schmidt, 1655 which should make it work with gcc3.1. (I would still like to encourage 1656 use of gc_allocator.h instead.) 1657 - Use alpha_mach_dep.S only on Linux. (It's not clear that this is 1658 optimal, but it otherwise didn't build on Tru64. Thanks to Fergus 1659 Henderson.) 1660 - Added ifdef to guard free() in os_dep.c. Otherwise we get a 1661 compilation error on Irix. (Thanks to Dai Sato.) 1662 - Added an experimental version of GC_memalign to mallocx.c. This can't 1663 always work, since we don't handle alignment requests in the hblk-level 1664 allocator, and we can't handle arbitrary pointer displacements unless 1665 GC_all_interior_pointers is enabled. But it should work for alignment 1666 requests up to HBLKSIZE. This is not yet documented in the standard 1667 places. 1668 - Finally debugged the OSF1/Tru64 thread support. This needs more testing, 1669 since I needed to add a somewhat unconvincing workaround for signal 1670 delivery issues that I don't yet completely understand. But it does 1671 pass my tests, even in parallel GC mode. Incremental GC support is 1672 disabled if thread support is enabled, due to the signal issues. 1673 - Eliminated name-space-incorrect definition of _cdecl from gc_cpp.h. 1674 - Added GC_debug_malloc_replacement and GC_debug_realloc_replacement 1675 declarations to gc.h. On IA64, this is required for REDIRECT_MALLOC 1676 to work correctly with these. 1677 - Fixed Linux USE_PROC_FOR_LIBRARIES to work with a 64-bit /proc format. 1678 1679Since 6.1: 1680 - Guard the test for GC_DUMP_REGULARLY in misc.c with 1681 "#ifndef NO_DEBUGGING". Otherwise it fails to build with NO_DEBUGGING 1682 defined. (Thanks to Manuel Serrano.) 1683 - Message about retrying suspend signals was incorrectly generated even when 1684 flag was not set. 1685 - Cleaned up MACOSX/NEXT root registration code. There was apparently a 1686 separate ifdef case in GC_register_data_segments() for no reason. 1687 - Removed MPROTECT_VDB for MACOSX port, based on one negative report. 1688 - Arrange for gc.h and friends to be correctly installed with GNU-style 1689 "make install". 1690 - Enable the GNU-style build facility include C++ support in the library 1691 with --enable-cplusplus. (Thanks to Thomas Maier for some of the patch.) 1692 - Mark from GC_thread_key in linux_threads.c, in case that's allocated 1693 from the garbage collected heap, as it is with our own thread-specific 1694 storage implementation. (Thanks to Jeff Sturm.) 1695 - Mark all free list header blocks if they are heap allocated. This avoids 1696 some unnecessary tracing. And it remains correct if we clear the 1697 root set. (Thanks to Jeff Sturm for identifying the bug.) 1698 - Improved S390/Linux support. Add S390/Linux 64-bit support. (Thanks 1699 to Ulrich Weigand.) 1700 - Corrected the spelling of GC_{M,C}ALLOC_EXPLICTLY_TYPED to 1701 GC_{M,C}ALLOC_EXPLICITLY_TYPED in gc_typed.h. This is technically 1702 an interface change. Based on the fact that nobody reported this, 1703 I suspect/hope there were no clients. 1704 - Cleaned up gc_typed.h so that (1) it adds an extern "C" declaration 1705 when appropriate, (2) doesn't generate references to undefined internal 1706 macros, and (3) allows easier manual construction of descriptors. 1707 - Close the file descriptor used by GC_print_address_map(). 1708 - Set the "close-on-exec" bit for various file descriptors maintained 1709 for the collector's internal use. 1710 - Added a hack to find memory segments owned by the system allocator 1711 under win32. Based on my tests, this tends to eventually find all 1712 segments, though it may take a while. There appear to be cleaner, 1713 but slower solutions under NT/XP. But they rely on an API that's 1714 unsupported under 9X. 1715 - Changed Linux PowerPC stack finding to LINUX_STACKBOTTOM. (Thanks 1716 to Akira Tagoh for pointing out that HEURISTIC1 doesn't work on 1717 64-bit kernels.) 1718 - Added GC_set_free_space_divisor to avoid some Windows dll issues. 1719 - Added FIXUP_POINTER, POINTER_SHIFT, POINTER_MASK to allow preprocessing 1720 of candidate pointers for tagging, etc. 1721 - Always lock around GC_notify_full_gc(). Simplified code for 1722 invoking GC_notify_full_gc(). 1723 - Changed the way DATASTART is defined on FreeBSD to be robust against 1724 an unmapped page after etext. (Thanks to Hironori Sakamoto for 1725 tracking down the intermittent failure.) 1726 - Made GC_enable() and GC_disable() official. Deprecated direct update 1727 of GC_dont_gc. Changed GC_gcollect to be a noop when garbage collection 1728 is disabled. 1729 - Call GC_register_dynamic_libraries before stopping the world on Linux, 1730 in order to avoid a potential deadlock due to the dl_iterate_phdr lock. 1731 - Introduced a more general mechanism for platform-dependent code to 1732 decide whether the main data segment should be handled separately 1733 from dynamic libraries, or registered by GC_register_dynamic_libraries. 1734 The latter is more reliable and easier on Linux with dl_iterate_phdr. 1735 1736Since 6.2alpha1: 1737 - Fixed the completely broken FreeBSD code in 6.2alpha1. (Thanks to 1738 Hironori Sakamoto for the patch.) 1739 - Changed IRIX reference in dbg_mlc.c to IRIX5. (Thanks to Marcus Herbert.) 1740 - Attempted to work around the problems with .S filenames and the SGI 1741 compiler. (Reported by several people. Untested.) 1742 - Worked around an HP/UX make issue with the GNU-style build process. 1743 - Fixed the --enable-cplusplus build machinery to allow builds without 1744 a C++ compiler. (That was always the intent ...) 1745 - Changed the debugging allocation macros to explicitly pass the return 1746 address for Linux and XXXBSD on hardware for which we can't get stack 1747 traces. Use __builtin_return_address(0) to generate it when possible. 1748 Some of the configuration work was cleaned up (good) and moved to gc.h 1749 (bad, but necessary). This should make leak detection more useful 1750 on a number of platforms. (Thanks to Fabian Thylman for the suggestion.) 1751 - Fixed compilation problems in dbg_mlc.c with GC_ADD_CALLER. 1752 - Bumped revision number for dynamic library. 1753 1754Since 6.2alpha2: 1755 - Don't include execinfo.h in os_dep.c when it's not needed, and may not exist. 1756 1757Since 6.2alpha3: 1758 - Use LINUX_STACKBOTTOM for >= glibc2.2 on Linux/MIPS. (See Debian bug 1759 # 177204) 1760 - Integrated Jeff Sturm and Jesse Rosenstock's MACOSX threads patches. 1761 - Integrated Grzegorz Jakacki's substantial GNU build patch. "Make dist" 1762 should now work for the GNU build process. Documentation files 1763 are installed under share/gc. 1764 - Tweaked gc_cpp.h to again support the Borland compiler. (Thanks to 1765 Rene Girard for pointing out the problems.) 1766 - Updated BCC_MAKEFILE (thanks to Rene Girard). 1767 - Added GC_ASSERT check for minimum thread stack size. 1768 - Added --enable-gc-assertions. 1769 - Added some web documentation to the distribution. Updated it in the 1770 process. 1771 - Separate gc_conf_macros.h from gc.h. 1772 - Added generic GC_THREADS client-defined macro to set the appropriate 1773 GC_XXX_THREADS internal macro. (gc_config_macros.h.) 1774 - Add debugging versions of _ignore_off_page allocation primitves. 1775 - Moved declarations of GC_make_closure and GC_debug_invoke_finalizer 1776 from gc.h to gc_priv.h. 1777 - Reset GC_fail_count even if only a small allocation succeeds. 1778 - Integrated Brian Alliet's patch for dynamic library support on Darwin. 1779 - gc_cpp.h's gc_cleanup destructor called GC_REGISTER_FINALIZER_IGNORE_SELF 1780 when it should have called the lower case version, since it was 1781 explicitly computing a base pointer. 1782 1783Since 6.2alpha4: 1784 - GC_invoke_finalizers could, under rare conditions, set 1785 GC_finalizer_mem_freed to an essentially random value. This could 1786 possibly cause unbounded heap growth for long-running applications 1787 under some conditions. (The bug was introduced in 6.1alpha5, and 1788 is not in gcc3.3. Thanks to Ben Hutchings for finding it.) 1789 - Attempted to sanitize the various DLL macros. GC_USE_DLL disappeared. 1790 GC_DLL is used instead. All internal tests are now on GC_DLL. 1791 README.macros is now more precise about the intended meaning. 1792 - Include DllMain in the multithreaded win32 version only if the 1793 collector is actually built as a dll. (Thanks to Mohan Embar for 1794 a version of the patch.) 1795 - Hide the cygwin threadAttach/Detach functions. They were violating our 1796 namespace rules. 1797 - Fixed an assertion in GC_check_heap_proc. Added GC_STATIC_ASSERT. 1798 (Thanks again to Ben Hutchings.) 1799 - Removed some obsolete definitions for Linux/PowerPC in gcconfig.h. 1800 - CORD_cat was not rebalancing unbalanced trees in some cases, violating 1801 a CORD invariant. Also tweaked the rebalancing rule for 1802 CORD_cat_char_star. (Thanks to Alexandr Petrosian for the bug report 1803 and patch.) 1804 - Added hand-coded structured exception handling support to mark.c. 1805 This should enable support of dynamic libraries under win32 with 1806 gcc-compiled code. (Thanks to Ranjit Mathew for the patch.) 1807 Turned on dynamic library scanning for win32/gcc. 1808 - Removed some remnants of read wrapping. (Thanks to Kenneth Schalk.) 1809 GC_USE_LD_WRAP ws probably broken in recent versions. 1810 - The build could fail on some platforms since gcconfig.h could include 1811 declarations mentioning ptr_t, which was not defined, e.g. when if_mach 1812 was built. (Thanks to Yann Dirson for pointing this out.) Also 1813 cleaned up tests for GC_PRIVATE_H in gcconfig.h a bit. 1814 - The GC_LOOP_ON_ABORT environment variable interfered with incremental 1815 collection, since the write fault handler was erroneously overridden. 1816 Handlers are now set up in the correct order. 1817 - It used to be possible to call GC_mark_thread_local_free_lists() while 1818 the world was not stopped during an incremental GC. This was not safe. 1819 Fortunately, it was also unnecessary. Added GC_world_stopped flag 1820 to avoid it. (This caused occasional crashes in GC_set_fl_marks 1821 with thread local allocation and incremental GC. This probably happened 1822 primarily on old, slow multiprocessors.) 1823 - Allowed overriding of MAX_THREADS in win32_threads.c from the build 1824 command line. (Patch from Yannis Bres.) 1825 - Taught the IA64/linux code to determine the register backing store base from 1826 /proc/self/maps after checking the __libc symbol, but before guessing. 1827 (__libc symbols are on the endangered list, and the guess is likely to not 1828 always be right for 2.6 kernels.) Restructured the code to read and parse 1829 /proc/self/maps so it only exists in one place (all platforms). 1830 - The -DUSE_PROC_FOR_LIBRARIES code was broken on Linux. It claimed that it 1831 also registered the main data segment, but didn't actually do so. (I don't 1832 think anyone actually uses this configuration, but ...) 1833 - Made another attempt to get --enablecplusplus to do the right thing. 1834 Since there are unavoidable problems with C programs linking against a 1835 dynamic library that includes C++ code, I separated out the c++ code into 1836 libgccpp. 1837 1838Since 6.2alpha5: 1839 - There was extra underscore in the name of GC_save_registers_in_stack 1840 for NetBSD/SPARC. (Thanks to Jaap Boender for the patch.) 1841 - Integrated Brian Alliet's patch for Darwin. This restructured the 1842 linuxthreads/pthreads support to separate generic pthreads support 1843 from more the system-dependent thread-stopping code. I believe this 1844 should make it easier to eliminate the code duplication between 1845 pthreads platforms in the future. The patch included some other 1846 code cleanups. 1847 - Integrated Dan Bonachea's patch to support AIX threads. This required 1848 substantial manual integration, mostly due to conflicts with other 1849 recent threads changes. It may take another iteration to 1850 get it to work. 1851 - Removed HPUX/PA-RISC support from aix_irix_threads.c. It wasn't used 1852 anyway and it cluttered up the code. And anything we can do to migrate 1853 towards generic pthreads support is a good thing. 1854 - Added a more explicit test for tracing of function arguments to test.c. 1855 (Thanks to Dan Grayson.) 1856 - Added Akira Tagoh's PowerPC64 patch. 1857 - Fixed some bit rot in the Cygwin port. (Thanks to Dan Bonachea for 1858 pointing it out.) Gc.h now includes just windows.h, not winbase.h. 1859 - Declared GC_save_regs_in_stack() in gc_priv.h. Remove other declarations. 1860 - Changed --enable-cplusplus to use automake consitionals. The old way 1861 confused libtool. "Make install" didn't work correctly for the old version. 1862 Previously --enable-cplusplus was broken on cygwin. 1863 - Changed the C version of GC_push_regs to fail at compile time if it is 1864 generated with an empty body. This seems to have been the cause of one 1865 or two subtle failures on unusual platforms. Those failures should 1866 now occur at build time and be easily fixable. 1867 1868Since 6.2alpha6: 1869 - Integrated a second round of Irix/AIX patches from Dan Bonachea. 1870 Renamed mips_sgi_mach_dep.S back to mips_sgi_mach_dep.s, since it requires 1871 the Irix assembler to do the C preprocessing; gcc -E doesn't work. 1872 - Fixed Makefile.direct for DARWIN. (Thanks to Manuel Serrano.) 1873 - There was a race between GC_pthread_detach and thread exit that could 1874 result in a thread structure being deallocated by GC_pthread_detach 1875 eventhough it was still needed by the thread exit code. (Thanks to 1876 Dick Porter for the small test case that allowed this to be debugged.) 1877 - Fixed version parsing for non-alpha versions in acinclude.m4 and 1878 version checking in version.h. 1879 1880Since 6.2: 1881 - Integrated some NetBSD patches forwarded to me by Marc Recht. These 1882 were already in the NetBSD package. 1883 - GC_pthread_create waited for the semaphore even if pthread_create failed. 1884 Thanks to Dick Porter for the pthread_support.c patch. Applied the 1885 analogous fix for aix_irix_threads.c. 1886 - Added Rainer Orth's Tru64 fixes. 1887 - The check for exceeding the thread table size in win32 threadDetach 1888 was incorrect. (Thanks to Alexandr Petrosian for the patch.) 1889 - Applied Andrew Begel's patch to correct some reentrancy issues 1890 with dynamic loading on Darwin. 1891 - GC_CreateThread() was neglecting to duplicate the thread handle in 1892 the table. (Thanks to Tum Nguyen for the patch.) 1893 - Pass +ESdbgasm only on PA-RISC machines with vendor compiler. 1894 (Thanks to Roger Sayle for the patch.) 1895 - Applied more AIX threads patches from Scott Ananian. 1896 1897To do: 1898 - A dynamic libgc.so references dlopen unconditionally, but doesn't link 1899 against libdl. 1900 - GC_proc_fd for Solaris is not correctly updated in response to a 1901 fork() call. Thus incremental collection in the child won't work 1902 correctly. (Thanks to Ben Cottrell for pointing this out.) 1903 - --enable-redirect-malloc is mostly untested and known not to work 1904 on some platforms. 1905 - There seem to be outstanding issues on Solaris/X86, possibly with 1906 finding the data segment starting address. Information/patches would 1907 be appreciated. 1908 - Very large root set sizes (> 16 MB or so) could cause the collector 1909 to abort with an unexpected mark stack overflow. (Thanks again to 1910 Peter Chubb.) NOT YET FIXED. Workaround is to increase the initial 1911 size. 1912 - The SGI version of the collector marks from mmapped pages, even 1913 if they are not part of dynamic library static data areas. This 1914 causes performance problems with some SGI libraries that use mmap 1915 as a bitmap allocator. NOT YET FIXED. It may be possible to turn 1916 off DYNAMIC_LOADING in the collector as a workaround. It may also 1917 be possible to conditionally intercept mmap and use GC_exclude_static_roots. 1918 The real fix is to walk rld data structures, which looks possible. 1919 - Incremental collector should handle large objects better. Currently, 1920 it looks like the whole object is treated as dirty if any part of it 1921 is. 1922 1923