📄 readme.changes
字号:
- Added PRINT_BLACK_LIST, to allow debugging of high densities of false pointers. - Added code to debug allocator to keep track of return address in GC_malloc caller, thus giving a bit more context. - Changed default behavior of large block allocator to more aggressively avoid fragmentation. This is likely to slow down the collector when it succeeds at reducing space cost. - Integrated Fergus Henderson's CYGWIN32 changes. They are untested, but needed for newer versions. - USE_MMAP had some serious bugs. This caused the collector to fail consistently on Solaris with -DSMALL_CONFIG. - Added Linux threads support, thanks largely to Fergus Henderson.Since alpha2: - Fixed more Linux threads problems. - Changed default GC_free_space_divisor to 3 with new large block allocation. (Thanks to Matthew Flatt for some measurements that suggest the old value sometimes favors space too much over time.) - More CYGWIN32 fixes. - Integrated Tyson-Dowd's Linux-M68K port. - Minor HP PA and DEC UNIX fixes from Fergus Henderson. - Integrated Christoffe Raffali's Linux-SPARC changes. - Allowed for one more GC fixup iteration after a full GC in incremental mode. Some quick measurements suggested that this significantly reduces pause times even with smaller GC_RATE values. - Moved some more GC data structures into GC_arrays. This decreases pause times and GC overhead, but makes debugging slightly less convenient. - Fixed namespace pollution problem ("excl_table"). - Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking that slightly. - Added some win32 threads fixes. - Integrated Ivan Demakov and David Stes' Watcom fixes. - Various other minor fixes contributed by many people. - Renamed config.h to gcconfig.h, since config.h tends to be used for many other things. - Integrated Matthew Flatt's support for 68K MacOS "far globals". - Fixed up some of the dynamic library Makefile targets for consistency across platforms. - Fixed a USE_MMAP typo that caused out-of-memory handling to fail on Solaris. - Added code to test.c to test thread creation a bit more. - Integrated GC_win32_free_heap, as suggested by Ivan Demakov. - Fixed Solaris 2.7 stack base finding problem. (This may actually have been done in an earlier alpha release.)Since alpha3: - Fixed MSWIN32 recognition test, which interfered with cygwin. - Removed unnecessary gc_watcom.asm from distribution. Removed some obsolete README.win32 text. - Added Alpha Linux incremental GC support. (Thanks to Philipp Tomsich for code for retrieving the fault address in a signal handler.) Changed Linux signal handler context argument to be a pointer. - Took care of some new warnings generated by the 7.3 SGI compiler. - Integrated Phillip Musumeci's FreeBSD/ELF fixes. - -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h>Since 4.13: - Fixed GC_print_source_ptr to not use a prototype. - generalized CYGWIN test. - gc::new did the wrong thing with PointerFreeGC placement. (Thanks to Rauli Ruohonen.) - In the ALL_INTERIOR_POINTERS (default) case, some callee-save register values could fail to be scanned if the register was saved and reused in a GC frame. This showed up in verbose mode with gctest compiled with an unreleased SGI compiler. I vaguely recall an old bug report that may have been related. The bug was probably quite old. (The problem was that the stack scanning could be deferred until after the relevant frame was overwritten, and the new save location might be outside the scanned area. Fixed by more eager stack scanning.) - PRINT_BLACK_LIST had some problems. A few source addresses were garbage. - Replaced Makefile.dj and added -I flags to cord make targets. (Thanks to Gary Leavens.) - GC_try_to_collect was broken with the nonincremental collector. - gc_cleanup destructors could pass the wrong address to GC_register_finalizer_ignore_self in the presence of multiple inheritance. (Thanks to Darrell Schiebel.) - Changed PowerPC Linux stack finding code.Since 4.14alpha1 - -DSMALL_CONFIG did not work reliably with large (> 4K) pages. Recycling the mark stack during expansion could result in a size zero heap segment, which confused things. (This was probably also an issue with the normal config and huge pages.) - Did more work to make sure that callee-save registers were scanned completely, even with the setjmp-based code. Added USE_GENERIC_PUSH_REGS macro to facilitate testing on machines I have access to. - Added code to explicitly push register contents for win32 threads. This seems to be necessary. (Thanks to Pierre de Rop.)Since 4.14alpha2 - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea). Since 4.14 - Reworked large block allocator. Now uses multiple doubly linked free lists to approximate best fit. - Changed heap expansion heuristic. Entirely free blocks are no longer counted towards the heap size. This seems to have a major impact on heap size stability; the old version could expand the heap way too much in the presence of large block fragmentation. - added -DGC_ASSERTIONS and some simple assertions inside the collector. This is mainlyt for collector debugging. - added -DUSE_MUNMAP to allow the heap to shrink. Suupported on only a few UNIX-like platforms for now. - added GC_dump_regions() for debugging of fragmentation issues. - Changed PowerPC pointer alignment under Linux to 4. (This needs checking by someone who has one. The suggestions came to me via a rather circuitous path.) - Changed the Linux/Alpha port to walk the data segment backwards until it encounters a SIGSEGV. The old way to find the start of the data segment broke with a recent release. - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of GC_register_finalizer, so that it would continue to work with GC_DEBUG. - allochblk sometimes cleared the wrong block for debugging purposes when it dropped blacklisted blocks. This could result in spurious error reports with GC_DEBUG. - added MACOS X Server support. (Thanks to Andrew Stone.) - Changed the Solaris threads code to ignore stack limits > 8 MB with a warning. Empirically, it is not safe to access arbitrary pages in such large stacks. And the dirty bit implementation does not guarantee that none of them will be accessed. - Integrated Martin Tauchmann's Amiga changes. - Integrated James Dominy's OpenBSD/SPARC port.Since 5.0alpha1 - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization). - Added -DKEEP_BACK_PTRS and backptr.h interface. (The implementation idea came from Al Demers.)Since 5.0alpha2 - Added some highly incomplete code to support a copied young generation. Comments on nursery.h are appreciated. - Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND, so the same effect could be obtained with a runtime switch. This is a step towards standardizing on a single dynamic GC library. - Significantly changed the way leak detection is handled, as a consequence of the above.Since 5.0 alpha3 - Added protection fault handling patch for Linux/M68K from Fergus Henderson and Roman Hodek. - Removed the tests for SGI_SOURCE in new_gc_alloc.h. This was causing that interface to fail on nonSGI platforms. - Changed the Linux stack finding code to use /proc, after changing it to use HEURISTIC1. (Thanks to David Mossberger for pointing out the /proc hook.) - Added HP/UX incremental GC support and HP/UX 11 thread support. Thread support is currently still flakey. - Added basic Linux/IA64 support. - Integrated Anthony Green's PicoJava support. - Integrated Scott Ananian's StrongARM/NetBSD support. - Fixed some fairly serious performance bugs in the incremental collector. These have probably been there essentially forever. (Mark bits were sometimes set before scanning dirty pages. The reclaim phase unnecessarily dirtied full small object pages.) - Changed the reclaim phase to ignore nearly full pages to avoid touching them. - Limited GC_black_list_spacing to roughly the heap growth increment. - Changed full collection triggering heuristic to decrease full GC frequency by default, but to explicitly trigger full GCs during heap growth. This doesn't always improve things, but on average it's probably a win. - GC_debug_free(0, ...) failed. Thanks to Fergus Henderson for the bug report and fix.Since 5.0 alpha4 - GC_malloc_explicitly_typed and friends sometimes failed to initialize first word. - Added allocation routines and support in the marker for mark descriptors in a type structure referenced by the first word of an object. This was introduced to support gcj, but hopefully in a way that makes it generically useful. - Added GC_requested_heapsize, and inhibited collections in nonincremental mode if the actual used heap size is less than what was explicitly requested. - The Solaris pthreads version of GC_pthread_create didn't handle a NULL attribute pointer. Solaris thread support used the wrong default thread stack size. (Thanks to Melissa O'Neill for the patch.) - Changed PUSH_CONTENTS macro to no longer modify first parameter. This usually doesn't matter, but it was certainly an accident waiting to happen ... - Added GC_register_finalizer_no_order and friends to gc.h. They're needed by Java implementations. - Integrated a fix for a win32 deadlock resulting from clock() calling malloc. (Thanks to Chris Dodd.) - Integrated Hiroshi Kawashima's port to Linux/MIPS. This was designed for a handheld platform, and may or may not be sufficient for other machines. - Fixed a va_arg problem with the %c specifier in cordprnt.c. It appears that this was always broken, but recent versions of gcc are the first to report the (statically detectable) bug. - Added an attempt at a more general solution to dlopen races/deadlocks. GC_dlopen now temporarily disables collection. Still not ideal, but ... - Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64 prefetch instructions. May improve performance measurably, but I'm not sure the code will run correctly on processors that don't support the instruction. Won't build except with very recent gcc. - Added caching for header lookups in the marker. This seems to result in a barely measurable performance gain. Added support for interleaved lookups of two pointers, but unconfigured that since the performance gain is currently near zero, and it adds to code size. - Changed Linux DATA_START definition to check both data_start and __data_start, since nothing else seems to be portable. - Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function wrapping mechanism. Probably currently useful only on Linux. - Moved some variables for the scratch allocator into GC_arrays, on Martin Hirzel's suggestion. - Fixed a win32 threads bug that caused the collector to not look for interior pointers from one of the thread stacks without ALL_INTERIOR_POINTERS. (Thanks to Jeff Sturm.) - Added Mingw32 support. (Thanks again to Jeff Sturm for the patch.) - Changed the alpha port to use the generic register scanning code instead of alpha_mach_dep.s. Alpha_mach_dep.s doesn't look for pointers in fp registers, but gcc sometimes spills pointers there. (Thanks to Manuel Serrano for helping me debug this by email.) Changed the IA64 code to do something similar for similar reasons.[5.0alpha5 doesn't really exist, but it may have escaped.]Since 5.0alpha6: - -DREDIRECT_MALLOC was broken in alpha6. Fixed. - Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to accept it. - Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be linked into every executable. - Added PREFETCH to bitmap marker. Changed it to use the header cache. - GC_push_marked sometimes pushed one object too many, resulting in a segmentation fault in GC_mark_from_mark_stack. This was probably an old bug. It finally showed up in gctest on win32. - Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE when SMALL_CONFIG was defined. This was no doubt a major performance bug for the default win32 configuration. - Removed -DSMALL_CONFIG from NT_MAKEFILE. It seemed like an anchronism now that the average PC has 64MB or so. - Integrated Bryce McKinley's patches for linux threads and dynamic loading from the libgcj tree. Turned on dynamic loading support for Linux/PPC. - Changed the stack finding code to use environ on HP/UX. (Thanks to Gustavo Rodriguez-Rivera for the suggestion.) This should probably be done on other platforms, too. Since I can't test those, that'll wait until after 5.0.Since 5.0alpha7: - Fixed threadlibs.c for linux threads. -DUSE_LD_WRAP was broken and -ldl was omitted. Fixed Linux stack finding code to handle -DUSE_LD_WRAP correctly. - Added MSWIN32 exception handler around marker, so that the collector can recover from root segments that are unmapped during the collection. This caused occasional failures under Windows 98, and may also be an issue under Windows NT/2000.Since 5.0 - Fixed a gc.h header bug which showed up under Irix. (Thanks to
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -