import gc6.1alpha5
This commit is contained in:
		@@ -1413,7 +1413,8 @@ Since 6.0:
 | 
			
		||||
   less common thread implementations, since some of the original code
 | 
			
		||||
   didn't stand up to close scrutiny.  Support for the next pthreads
 | 
			
		||||
   implementation should be easier to add.
 | 
			
		||||
Since 6.0alpha1:
 | 
			
		||||
 | 
			
		||||
Since 6.1alpha1:
 | 
			
		||||
 - No longer wrap read by default in multithreaded applications.  It was
 | 
			
		||||
   pointed out on the libgcj list that this holds the allocation lock for
 | 
			
		||||
   way too long if the read blocks.  For now, reads into the heap are
 | 
			
		||||
@@ -1425,7 +1426,8 @@ Since 6.0alpha1:
 | 
			
		||||
 - Added printing of stop-the-world GC times if GC_PRINT_STATS environment
 | 
			
		||||
   variable is set.
 | 
			
		||||
 - The calloc definition in leak_detector.h was missing parentheses, and
 | 
			
		||||
   realloc was missing a second argument to GC_REALLOC.  (Thanks to Elrond.)
 | 
			
		||||
   realloc was missing a second argument to GC_REALLOC.
 | 
			
		||||
   (Thanks to Elrond (elrond<at>samba-tng.org).)
 | 
			
		||||
 - Added GC_PRINT_BACK_HEIGHT environment variable and associated
 | 
			
		||||
   code, mostly in the new file backgraph.c.  See doc/README.environment.
 | 
			
		||||
 - Added -DUSE_GLOBAL_ALLOC to work around a Windows NT issue.  (Thanks to
 | 
			
		||||
@@ -1435,11 +1437,202 @@ Since 6.0alpha1:
 | 
			
		||||
   holes in the data segment.  (Thanks to Hironori Sakamoto.)
 | 
			
		||||
 - Changed the order in which GC_push_roots and friends push things onto
 | 
			
		||||
   the mark stack.  GC_push_all calls need to come first, since we can't
 | 
			
		||||
   necessarily recovere if thos overflow the mark stack.  (Thanks to
 | 
			
		||||
   necessarily recovere if those overflow the mark stack.  (Thanks to
 | 
			
		||||
   Matthew Flatt for tracking down the problem.)
 | 
			
		||||
 - Some minor cleanups to mostly support the Intel compiler on Linux/IA64.
 | 
			
		||||
 | 
			
		||||
Since 6.1 alpha2:
 | 
			
		||||
 - Minor cleanup on the gcconfig.h section for SPARC.
 | 
			
		||||
 - Minor fix to support Intel compiler for I386/Linux. (Thanks to Sven
 | 
			
		||||
   Hartrumpf.)
 | 
			
		||||
 - Added SPARC V9 (64-bit) support.  (Thanks to Jeff Sturm.)
 | 
			
		||||
 - Restructured the way in which we determine whether or not to keep
 | 
			
		||||
   call stacks for debug allocation.  By default SAVE_CALL_COUNT is
 | 
			
		||||
   now zero on all platforms.  Added SAVE_CALL_NARGS parameters.
 | 
			
		||||
   If possible, use execinfo.h to capture call stack.  (This should
 | 
			
		||||
   add support for a number of new platforms, though often at
 | 
			
		||||
   considerable runtime expense.)
 | 
			
		||||
 - Try to print symbolic information for call stacks.  On Linux, we
 | 
			
		||||
   do this with a combination of execinfo.h and running addr2line in
 | 
			
		||||
   a separate process.  This is both much more expensive and much more
 | 
			
		||||
   useful.  Amazingly, it seems to be fast enough for most purposes.
 | 
			
		||||
 - Redefined strdup if -DREDIRECT_MALLOC is given.
 | 
			
		||||
 - Changed incremental collector and MPROTECT_VDB implementation so that,
 | 
			
		||||
   under favorable conditions, pointerfree objects are not protected.
 | 
			
		||||
   Added GC_incremental_protection_needs() to determine ahead of time whether
 | 
			
		||||
   pointerfree objects may be protected.  Replaced GC_write_hint() with
 | 
			
		||||
   GC_remove_protection().
 | 
			
		||||
 - Added test for GC_ENABLE_INCREMENTAL environment variable.
 | 
			
		||||
 - Made GC_time_limit runtime configurable.  Added GC_PAUSE_TIME_TARGET
 | 
			
		||||
   environment variable.
 | 
			
		||||
 - Eliminated GC_page_sz, a duplicate of GC_page_size.
 | 
			
		||||
 - Caused the Solaris and Irix thread creation primitives to call
 | 
			
		||||
   GC_init_inner().
 | 
			
		||||
 
 | 
			
		||||
Since 6.1alpha3:
 | 
			
		||||
 - Fixed typo in sparc_mach_dep.S, preventing the 64-bit version from
 | 
			
		||||
   building.  Increased 64-bit heap size limit in test.c slightly, since
 | 
			
		||||
   a functional SPARC collector seems to slightly exceed the old limits.
 | 
			
		||||
   (Thanks again to Jeff Sturm.)
 | 
			
		||||
 - Use NPRGREG in solaris_threads.c, thus printing all registers if things
 | 
			
		||||
   go wrong.
 | 
			
		||||
 - Added GC_MARKERS environment variable to allow use of a single marker
 | 
			
		||||
   thread on an MP without confusing the lock implementation.
 | 
			
		||||
 - Collect much less aggressively in incremental mode with GC_TIME_UNLIMITED.
 | 
			
		||||
   This is really a purely generational mode, and we can afford to 
 | 
			
		||||
   postpone the collection until the heap is (nearly) full.
 | 
			
		||||
 - Remove read() wrapper for MPROTECT_VDB.  It was causing more harm than
 | 
			
		||||
   good.  It is often no longer needed if system calls avoid writing to
 | 
			
		||||
   pointerfull heap objects.
 | 
			
		||||
 - Fix MACOSX test in gcconfig.h. (Thanks to John Clements.)
 | 
			
		||||
 - Change GC_test_and_set so that it consistently has one argument.
 | 
			
		||||
   Add spaces to ::: in powerpc assembly code in gc_locks.h.
 | 
			
		||||
   (Thanks to Ryan Murray.)
 | 
			
		||||
 - Fixed a formatting error in dbg_mlc.c.  Added prototype to GC_abort()
 | 
			
		||||
   declaration.   (Thanks to Michael Smith.)
 | 
			
		||||
 - Removed "source" argument to GC_find_start().  Eliminate GC_FIND_START().
 | 
			
		||||
 - Added win32 recognition code in configure.in.  Changed some of the
 | 
			
		||||
   dllimport/export defines in gc.h.  (Thanks to Adam Megacz.)
 | 
			
		||||
 - GC_malloc_many didn't set hb_last_reclaimed when it called 
 | 
			
		||||
   GC_reclaim_generic.  (I'm not sure this matters much, but ...)
 | 
			
		||||
 - Allocating uncollectable objects with debug information sometimes
 | 
			
		||||
   allocated objects that were one byte too small, since uncollectable
 | 
			
		||||
   objects don't have the extra byte added at the end.  (Thanks to
 | 
			
		||||
   Wink Saville for pointing this out.)
 | 
			
		||||
 - Added a bit more assertion checking to make sure that gcj objects
 | 
			
		||||
   on free lists never have a nonzero second word.
 | 
			
		||||
 - Replaced BCC_MAKEFILE with an up-to-date one.  (Thanks to 
 | 
			
		||||
   Andre Leiradella.)
 | 
			
		||||
 - Upgraded libtool, cinfigure.in and some related files to hopefully
 | 
			
		||||
   support NetBSD/SPARC.  (Thanks to Adrian Bunk.)  Unfortunately,
 | 
			
		||||
   libtool 1.4.2 seemed to be buggy due to missing quotes in several
 | 
			
		||||
   "test" invocations.  Fixed those in the ltmain.sh script.
 | 
			
		||||
 - Some win32-specific patches, including the introduction of
 | 
			
		||||
   GC_CreateThread.  (Thanks to Adam Megacz.)
 | 
			
		||||
 - Merged in gcj changes from Anthony Green to support embedded systems.
 | 
			
		||||
 - Tried to consistently rename preprocessed assembly files with a capital
 | 
			
		||||
   .S extension.
 | 
			
		||||
 - Use alpha_mach_dep.S on ALPHA again.  It doesn't really matter, but this
 | 
			
		||||
   makes our distribution consistent with the gcc one, avoiding future merge
 | 
			
		||||
   problems.
 | 
			
		||||
 - Move GET_MEM definition into gcconfig.h.  Include gcconfig.h slightly
 | 
			
		||||
   later in gc_priv.h to avoid forward references to ptr_t.
 | 
			
		||||
 - Add some testing of local allocation to test.c.
 | 
			
		||||
 - Change definition of INVALID_QTID in specific.h.  The -1 value was used
 | 
			
		||||
   inconsistently, and too likely to collide with a valid stack address.
 | 
			
		||||
   Some general clean-up of specific.[ch].  Added assertions.  (Thanks
 | 
			
		||||
   to Michael Smith for tracking down an intermittent bug to this
 | 
			
		||||
   general area.  I'm not sure it has been squashed yet, however.)
 | 
			
		||||
 - On Pthread systems it was not safe to call GC_malloc() between fork()
 | 
			
		||||
   and exec().  According to the applicable standards, it doesn't appear
 | 
			
		||||
   to be safe to call malloc() or many other libc functions either, thus
 | 
			
		||||
   it's not clear this is fixable.  Added experimental support for
 | 
			
		||||
   -DHANDLE_FORK in linux_threads.c which tries to support it.  It may
 | 
			
		||||
   succeed if libc does the right thing.  I'm not sure whether it does.
 | 
			
		||||
   (Thanks to Kenneth Schalk for pointing out this issue.)
 | 
			
		||||
 - Documented thread local allocation primitives to require an
 | 
			
		||||
   explicit GC_init call.  GC_init_parallel is no longer declared to
 | 
			
		||||
   be a constructor function, since that isn't portable and often
 | 
			
		||||
   seems to lead to initialization order problems.
 | 
			
		||||
 - Changed gc_cpp.cc and gc_cpp.h in one more attempt to make them
 | 
			
		||||
   compatible with Visual C++ 6.  (Thanks to Wink Saville for the
 | 
			
		||||
   patch.)
 | 
			
		||||
 - Some more patches for Linux on HP PA-RISC.
 | 
			
		||||
 - Added include/gc_allocator.h.  It implements (hopefully) standard
 | 
			
		||||
   conforming (as opposed to SGI-style) allocators that allocate
 | 
			
		||||
   collectable (gc_allocator) or GC-traceable, but not collectable
 | 
			
		||||
   (traceable_allocator) objects.  This borrows heavily from libstc++,
 | 
			
		||||
   which borrows heavily from the SGI implementation, this part of
 | 
			
		||||
   which was written by Matt Austern.  Changed test_cpp.cc to very
 | 
			
		||||
   minimally test this.
 | 
			
		||||
 - On Linux/X86, retry mmap with a different start argument.  That should
 | 
			
		||||
   allow the collector to use more (closer to 3GB) of the address space.
 | 
			
		||||
   (Thanks to Jeffrey Mark Siskind for tracking this down.)
 | 
			
		||||
 - Force 64 bit alignment with GCJ support.  (Reflects Bryce McKinley's
 | 
			
		||||
   patch to the gcc tree.)
 | 
			
		||||
 - Refined the choice of sa_handler vs. sa_sigaction in GC_dirty_init
 | 
			
		||||
   to accomodate some glibc5 systems.  (Thanks to Dan Fandrich for the
 | 
			
		||||
   patch.)
 | 
			
		||||
 - Compensated for the fact that current versions of glibc set
 | 
			
		||||
   __libc_stack_end incorrectly on Linux/IA64 while initialization code
 | 
			
		||||
   is running.  This could cause the collector to miss 16 bytes of
 | 
			
		||||
   the memory stack if GC_malloc or friends where called before main().
 | 
			
		||||
 - Mostly integrated Takis Psarogiannakopoulos' port to DG/UX Inix 86.
 | 
			
		||||
   This will probably take another iteration to work, since his
 | 
			
		||||
   patch conflicted with the libtool upgrade. 
 | 
			
		||||
 - Added README.arm.cross containing some information about cross-
 | 
			
		||||
   compiling to an ARM processor from Margaret Fleck.
 | 
			
		||||
 | 
			
		||||
Since 6.1alpha4:
 | 
			
		||||
 - Added GC_finalizer_mem_freed, and changed some of the code that
 | 
			
		||||
   decided on heap expansion to look at it.  Memory explicitly
 | 
			
		||||
   deallocated by finalizers essentially needs to be counted as reclaimed
 | 
			
		||||
   by the GC.  Otherwise there are cases in which the heap can grow
 | 
			
		||||
   unboundedly.  (Thanks to Mark Reichert for the test case.)
 | 
			
		||||
 - Integrated Adam Megacz patches to not scan dynamic libraries if
 | 
			
		||||
   we are compiling with gcc on win32.  Otherwise we need structured
 | 
			
		||||
   exception handling to deal with asynchronously unmapped root
 | 
			
		||||
   segments, and gcc doesn't directly support that.
 | 
			
		||||
 - Integrated Anthony Green's patch to support Wine.
 | 
			
		||||
 - GC_OPERATOR_NEW_ARRAY was misspelled OPERATOR_NEW_ARRAY in several
 | 
			
		||||
   places, including gc_cpp.cc.  (Thanks to Wink Saville for pointing
 | 
			
		||||
   this out.)
 | 
			
		||||
 - Integrated Loren James Rittle's Alpha FreeBSD patches.  In
 | 
			
		||||
   response to Richard Henderson's suggestion, these also
 | 
			
		||||
   changed the declarations of symbols like _end on many platforms to
 | 
			
		||||
   that they wouldn't mistakenly be declared as short data symbols.
 | 
			
		||||
 - Integrated changes from the Debian distribution.  (Thanks to Ryan Murray
 | 
			
		||||
   for pointing these out.)  Fix C++ comments in POWERPC port.  Add ARM32
 | 
			
		||||
   incremental GC support.  Get rid of USE_GENERIC_PUSH_REGS for alpha/Linux,
 | 
			
		||||
   this time for real.  Use va_copy to get rid of cord printf problems
 | 
			
		||||
   (finally).
 | 
			
		||||
 - Close file descriptor used to count cpus.  Thanks to Jeff Sturm for
 | 
			
		||||
   pointing out the omission.
 | 
			
		||||
 - Don't just drop gcj free lists in GC_start_reclaim, since that can
 | 
			
		||||
   eventually cause the marker to see a bogus mark descriptor in the 
 | 
			
		||||
   dropped objects.  The usual symptom was a very intermittent segmentation
 | 
			
		||||
   fault in the marker.  This mattered only if one of the GC_gcj_malloc
 | 
			
		||||
   variants was used.  (Thanks to Michael Smith, Jeff Sturm, Bryce
 | 
			
		||||
   McKinley and Tom Tromey for helping to track this down.)
 | 
			
		||||
 - Fixed Linux and Solaris/64 SPARC configuration.  (Thanks to David Miller,
 | 
			
		||||
   Jeff Sturm, Tom Tromey, and Christian Joensson.)
 | 
			
		||||
 - Fixed a typo in strdup definition.  (Thanks to Gerard A Allan.)
 | 
			
		||||
 - Changed Makefile.direct to invoke $(CC) to assemble alpha_mach_dep.S.
 | 
			
		||||
   This is needed on Linux.  I'm not sure whether it's better or worse
 | 
			
		||||
   on Tru64.
 | 
			
		||||
 - Changed gc_cpp.h once more to declare operator new and friends only in
 | 
			
		||||
   a Microsoft environment.  This may need further fine tuning.  (Thanks to
 | 
			
		||||
   Johannes Schmidt for pointing out that the older code breaks on gcc3.0.4.)
 | 
			
		||||
 - Don't ever override strdup if it's already macro defined.  (Thanks to
 | 
			
		||||
   Adnan Ali for pointing out the problem.)
 | 
			
		||||
 - Changed gc_cpp.h yet again to also overload placement new.  Due to the
 | 
			
		||||
   C++ overloading rules, the other overloaded new operations otherwise hide
 | 
			
		||||
   placement new, which causes many STL uses to break.  (Thanks to Reza
 | 
			
		||||
   Shahidi for reporting this, and to Matt Austern for proposing a fix.)
 | 
			
		||||
 - Integrated cygwin pthreads support from Dan Bonachea.
 | 
			
		||||
 - Turn on DYNAMIC_LOADING for NetBSD.  (Thanks to Krister Walfridsson.)
 | 
			
		||||
 - Changed printing code to print more complete GC times.
 | 
			
		||||
 - Applied Mark Mitchell's Irix patch to correct some bitrot.
 | 
			
		||||
 - Clarified which object-printing routines in dbg_mlc.c should hold
 | 
			
		||||
   the allocation lock.  Restructured the code to allow reasonable object
 | 
			
		||||
   printing with -DREDIRECT_MALLOC.
 | 
			
		||||
 - Fix the Linux mmap code to always start with 0x1000 as the initial hint.
 | 
			
		||||
   Minor patches for 64-bit AIX, particularly to STACKBOTTOM.
 | 
			
		||||
   (Thanks again to Jeffrey Mark Siskind.)
 | 
			
		||||
 - Renamed "SUSPENDED" flag for Solaris threads support to avoid a conflict
 | 
			
		||||
   with a system header. (Thanks to Philp Brown.)
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
To do:
 | 
			
		||||
 - --enable-redirect-malloc is mostly untested and known not to work
 | 
			
		||||
   on some platforms. 
 | 
			
		||||
 - The win32 collector ends up tracing some (most?) objects allocated with
 | 
			
		||||
   the system allocator, in spite if the fact that it tries not to.
 | 
			
		||||
   This costs time and space, though it remains correct.
 | 
			
		||||
   We need a way to identify memory regions used by the system malloc(),
 | 
			
		||||
   or an alternate way to locate dll data areas.  A very partial
 | 
			
		||||
   workaround is to use GC_malloc_atomic_uncollectable() instead of
 | 
			
		||||
   the system malloc() for most allocation.
 | 
			
		||||
 - There seem to be outstanding issues on Solaris/X86, possibly with
 | 
			
		||||
   finding the data segment starting address.  Information/patches would
 | 
			
		||||
   be appreciated.
 | 
			
		||||
@@ -1457,7 +1650,4 @@ To do:
 | 
			
		||||
 - Incremental collector should handle large objects better.  Currently,
 | 
			
		||||
   it looks like the whole object is treated as dirty if any part of it
 | 
			
		||||
   is.
 | 
			
		||||
 - Cord/cordprnt.c doesn't build on a few platforms (notably PowerPC), since
 | 
			
		||||
   we make some unwarranted assumptions about how varargs are handled.  This
 | 
			
		||||
   currently makes the cord-aware versions of printf unusable on some platforms.
 | 
			
		||||
   Fixing this is unfortunately not trivial.
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user