import gc6.1alpha5

This commit is contained in:
Fumitoshi UKAI
2002-07-10 14:21:11 +00:00
parent adfa59bd5f
commit bb118b7356
72 changed files with 18916 additions and 8113 deletions

View File

@@ -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.