📄 readme.changes
字号:
Dan Sullivan.) - Fixed a typo in GC_double_descr in typd_mlc.c. This probably could result in objects described by array descriptors not getting traced correctly. (Thanks to Ben Hutchings for pointing this out.) - The block nearly full tests in reclaim.c were not correct for 64 bit environments. This could result in unnecessary heap growth under unlikely conditions.Since 5.1 - dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it was defined as a macro. This prevented the collector from building on Irix. - We quietly assumed that indirect mark descriptors were never 0. Our own typed allocation interface violated that. This could result in segmentation faults in the marker with typed allocation. - Fixed a _DUSE_MUNMAP bug in the heap block allocation code. (Thanks to Ben Hutchings for the patch.) - Taught the collector about VC++ handling array operator new. (Thanks again to Ben Hutchings for the patch.) - The two copies of gc_hdrs.h had diverged. Made one a link to the other again.Since 5.2 (A few 5.2 patches are not in 6.0alpha1) - Fixed _end declaration for OSF1. - There were lots of spurious leak reports in leak detection mode, caused by the fact that some pages were not being swept, and hence unmarked objects weren't making it onto free lists. (This bug dated back to 5.0.) - Fixed a typo in the liblinuxgc.so Makefile rule. - Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work around a Windows 95 GetOpenFileName problem. (Thanks to Jacob Navia.)Since 5.3 - Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH. (Thanks to Shawn Wagner for actually testing this.) - Fixed GC_is_thread_stack in solaris_threads.c. It forgot to return a value in the common case. I wonder why nobody noticed? - Fixed another silly syntax problem in GC_double_descr. (Thanks to Fergus Henderson for finding it.) - Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice.Since 5.4 (A few 5.3 patches are not in 6.0alpha2) - Added HP/PA prefetch support. - Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve the reliability of generating pointer backtrace information, e.g. in the Bigloo environment. - Added parallel marking support (-DPARALLEL_MARK). This currently works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt to other platforms. This is intended to be a lighter-weight (less new code, probably not as scalable) solution than the work by Toshio Endo et al, at the University of Tokyo. A number of their ideas were reused, though the code wasn't, and the underlying data structure is significantly different. In particular, we keep the global mark stack as a single shared data structure, but most of the work is done on smaller thread-local mark stacks. - Changed GC_malloc_many to be cheaper, and to require less mutual exclusion with -DPARALLEL_MARK. - Added full support for thread local allocation under Linux (-DTHREAD_LOCAL_ALLOC). This is a thin veneer on GC_malloc_many, and should be easily portable to other platforms, especially those that support pthreads. - CLEAR_DOUBLE was not always getting invoked when it should have been. - GC_gcj_malloc and friends used different out of memory handling than everything else, probably because I forgot about one when I implemented the other. They now both call GC_oom_fn(), not GC_oom_action(). - Integrated Jakub Jelinek's fixes for Linux/SPARC. - Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of GC_arrays, and separately registered the first two as excluded roots. This makes code compiled with gc_inl.h less dependent on the collector version. (It would be nice to remove the inclusion of gc_priv.h by gc_inl.h completely, but we're not there yet. The locking definitions in gc_priv.h are still referenced.) This change was later coniditoned on SEPARATE_GLOBALS, which is not defined by default, since it involves a performance hit. - Register GC_obj_kinds separately as an excluded root region. The attempt to register it with GC_arrays was usually failing. (This wasn't serious, but seemed to generate some confusion.) - Moved backptr.h to gc_backptr.h.Since 6.0alpha1 - Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms for which that's expensive. - Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems. - Added a missing volatile to OR_WORD and renamed the parameter to GC_compare_and_swap so it's not a C++ reserved word. (Thanks to Toshio Endo for pointing out both of those.) - Changed Linux dynamic library registration code to look at /proc/self/maps instead of the rld data structures when REDIRECT_MALLOC is defined. Otherwise some of the rld data data structures may be prematurely garbage collected. (Thanks to Eric Benson for helping to track this down.) - Fixed USE_LD_WRAP a bit more, so it should now work without threads. - Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness. Tomporarily added some backward compatibility definitions. Renamed USE_LD_WRAP to GC_USE_LD_WRAP. - Many MACOSX POWERPC changes, some additions to the gctest output, and a few minor generic bug fixes. (Thanks to Dietmar Planitzer.)Since 6.0 alpha2 - Fixed the /proc/self/maps code to not seek, since that apparently is not reliable across all interesting kernels. - Fixed some compilation problems in the absence of PARALLEL_MARK (introduced in alpha2). - Fixed an algorithmic problem with PARALLEL_MARK. If work needs to be given back to the main mark "stack", the BOTTOM entries of the local stack should be given away, not the top ones. This has substantial performance impact, especially for > 2 processors, from what I can tell. - Extracted gc_lock.h from gc_priv.h. This should eventually make it a bit easier to avoid including gc_priv.h in clients. - Moved all include files to include/ and removed duplicate links to the same file. The old scheme was a bad idea because it was too easy to get the copies out of sync, and many systems don't support hard links. Unfortunately, it's likely that I broke some of the non-Unix Makefiles in the process, although I tried to update them appropriately. - Removed the partial support for a copied nursery. It's not clear that this would be a tremendous win, since we don't consistently lose to generational copying collectors. And it would significantly complicate many things. May be reintroduced if/when it really turns out to win. - Removed references to IRIX_JDK_THREADS, since I believe there never were and never will be any clients. - Added some code to linux_threads.c to possibly support HPUX threads using the Linux code. Unfortunately, it doesn't work yet, and is currently disabled. - Added support under Linux/X86 for saving the call chain, both in (debug) objects for client debugging, and in GC_arrays._last_stack for GC debugging. This was previously supported only under Solaris. It is not enabled by default under X86, since it requires that code be compiled to explicitly dave frame pointers on the call stack. (With gcc this currently happens by default, but is often turned off explicitly.) To turn it on, define SAVE_CALL_CHAIN. Since 6.0 alpha3 - Moved up the detection of mostly full blocks to the initiatiation of the sweep phase. This eliminates some lock conention in the PARALLEL_MARK case, as multiple threads try to look at mostly full blocks concurrently. - Restored the code in GC_malloc_many that grabs a prefix of the global free list. This avoids the case in which every GC_malloc_many call tries and fails to allocate a new heap block, and the returns a single object from the global free list. - Some minor fixes in new_hblk.c. (Attempted to build free lists in order of increasing addresses instead of decreasing addresses for cache performance reasons. But this seems to be only a very minor gain with -DEAGER_SWEEP, and a loss in other cases. So the change was backed out.) - Fixed some of the documentation. (Thanks in large part to Fergus Henderson.) - Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform large numbers of mmaps. (Thanks to Eric Benson.) Also fixed that code to deal with short reads. - Added GC_get_total_bytes(). - Fixed leak detection mode to avoid spurious messages under linuxthreads. (This should also now be easy for the other supported threads packages. But the code is tricky enough that I'm hesitant to do it without being able to test. Everything allocated in the GC thread support itself should be explicitly deallocated.) - Made it possible (with luck) to redirect malloc to GC_local_malloc.Since 6.0 alpha4 - Changed the definition of GC_pause in linux_threads.c to use a volatile asm. Some versions of gcc apparently optimize away writes to local volatile variables. This caused poor locking behaviour starting at about 4 processors. - Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep to linux_threads.c. The first two calls could be used to generally avoid sending GC signals to blocked threads, avoiding both premature wakeups and unnecessary overhead. - Fixed a serious bug in thread-local allocation. At thread termination, GC_free could get called on small integers. Changed the code for thread termination to more efficiently return left-over free-lists. - Integrated Kjetil Matheussen's BeOS support. - Rearranged the directory structure to create the doc and tests subdirectories. - Sort of integrated Eric Benson's patch for OSF1. This provided basic OSF1 thread support by suitably extending hpux_irix_threads.c. Based on earlier email conversations with David Butenhof, I suspect that it will be more reliable in the long run to base this on linux_threads.c instead. Thus I attempted to patch up linux_threads.c based on Eric's code. The result is almost certainly broken, but hopefully close enough that someone with access to a machine can pick it up. - Integrated lots of minor changes from the NetBSD distribution. (These were supplied by David Brownlee. I'm not sure about the original authors.) - Hacked a bit more on the HP/UX thread-support in linux_threads.c. It now appears to work in the absence of incremental collection. Renamed hpux_irix_threads.c back to irix_threads.c, and removed the attempt to support HPUX there. - Changed gc.h to define _REENTRANT in cases in which it should already have been defined. It is still safer to also define it on the command line. Since 6.0alpha5: - Changed the definition of DATASTART on ALPHA and IA64, where data_start and __data_start are not defined by earlier versions of glibc. This might need to be fixed on other platforms as well. - Changed the way the stack base and backing store base are found on IA64. This should now remain reliable on future kernels. But since it relies on /proc, it will no longer work in the simulated NUE environment. - Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent on the OS. On non-Unix systems, rand() should be used instead. Handled small RAND_MAX. (Thanks to Peter Ross for pointing this out.) - Fixed the cord make rules to create the cord subdirectory, if necessary. (Thanks to Doug Moen.) - Changed fo_object_size calculation in finalize.c. Turned finalization of nonheap object into a no-op. Removed anachronism from GC_size() implementation. - Changed GC_push_dirty call in solaris_threads.c to GC_push_selected. It was missed in a previous renaming. (Thanks to Vladimir Tsichevski for pointing this out.) - Arranged to not not mask SIGABRT in linux_threads.c. (Thanks to Bryce McKinlay.) - Added GC_no_dls hook for applications that want to register their own roots. - Integrated Kjetil Matheussen's Amiga changes. - Added FREEBSD_STACKBOTTOM. Changed the X86/FreeBSD port to use it. (Thanks to Matthew Flatt.) - Added pthread_detach interception for platforms supported by linux_threads.c and irix_threads.c. Should also be added for Solaris? - Changed the USE_MMAP code to check for the case in which we got the high end of the address space, i.e. mem_ptr + mem_sz == 0. It appears that this can happen under Solaris 7. It seems to be allowed by what I would claim is an oversight in the mmap specification. (Thanks to Toshio Endo for pointing out the problem.) - Cleanup of linux_threads.c. Some code was originally cloned from irix_threads.c and now unnecessary. Some comments were obviously wrong. - (Mostly) fixed a longstanding problem with setting of dirty bits from a signal handler. In the presence of threads, dirty bits could get lost, since the etting of a bit in the bit vector was not atomic with respect to other updates. The fix is 100% correct only for platforms for which GC_test_and_set is defined. The goal is to make that all platforms with thread support. Matters only if incremental GC and threads are both enabled. - made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an initialization time, instead of build-time option. This is a nontrivial, high risk change. It should slow down the code measurably only if MERGE_SIZES is not defined, which is a very nonstandard configuration. - Added doc/README.environment, and implemented what it describes. This allows a number of additional configuration options to be set through the environment. It documents a few previously undocumented options. - Integrated Eric Benson's leak testing improvements. - Removed the option to throw away the beginning of each page (DISCARD_WORDS). This became less and less useful as processors enforce stricter alignment. And it hadn't been tested in ages, and was thus probably broken anyway.Since 6.0alpha6: - Added GC_finalizer_notifier. Fixed GC_finalize_on_demand. (The variable actually wasn't being tested at the right points. The build-time flag was.) - Added Tom Tromey's S390 Linux patch. - Add
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -