import gc6.1alpha5
This commit is contained in:
@@ -9,8 +9,9 @@ Copyright (c) 1998 by Fergus Henderson. All rights reserved.
|
||||
The files Makefile.am, and configure.in are
|
||||
Copyright (c) 2001 by Red Hat Inc. All rights reserved.
|
||||
|
||||
The files config.guess and a few others are copyrighted by the Free
|
||||
Software Foundation.
|
||||
Several files supporting GNU-style builds are copyrighted by the Free
|
||||
Software Foundation, and carry a different license from that given
|
||||
below.
|
||||
|
||||
THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
|
||||
OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
|
||||
@@ -27,7 +28,7 @@ are GPL'ed, but with an exception that should cover all uses in the
|
||||
collector. (If you are concerned about such things, I recommend you look
|
||||
at the notice in config.guess or ltmain.sh.)
|
||||
|
||||
This is version 6.1alpha2 of a conservative garbage collector for C and C++.
|
||||
This is version 6.1alpha5 of a conservative garbage collector for C and C++.
|
||||
|
||||
You might find a more recent version of this at
|
||||
|
||||
|
||||
215
gc/doc/README.DGUX386
Normal file
215
gc/doc/README.DGUX386
Normal file
@@ -0,0 +1,215 @@
|
||||
Garbage Collector (parallel iversion) for ix86 DG/UX Release R4.20MU07
|
||||
|
||||
|
||||
*READ* the file README.QUICK.
|
||||
|
||||
You need the GCC-3.0.3 rev (DG/UX) compiler to build this tree.
|
||||
This compiler has the new "dgux386" threads package implemented.
|
||||
It also supports the switch "-pthread" needed to link correctly
|
||||
the DG/UX's -lrte -lthread with -lgcc and the system's -lc.
|
||||
Finally we support parralleli-mark for the SMP DG/UX machines.
|
||||
To build the garbage collector do:
|
||||
|
||||
./configure --enable-parallel-mark
|
||||
make
|
||||
make gctest
|
||||
|
||||
Before you run "gctest" you need to set your LD_LIBRARY_PATH
|
||||
correctly so that "gctest" can find the shared library libgc.
|
||||
Alternatively you can do a configuration
|
||||
|
||||
./configure --enable-parallel-mark --disable-shared
|
||||
|
||||
to build only the static version of libgc.
|
||||
|
||||
To enable debugging messages please do:
|
||||
1) Add the "--enable-full-debug" flag during configuration.
|
||||
2) Edit the file linux-threads.c and uncommnect the line:
|
||||
|
||||
/* #define DEBUG_THREADS 1 */ to --->
|
||||
|
||||
#define DEBUG_THREADS 1
|
||||
|
||||
Then give "make" as usual.
|
||||
|
||||
In a machine with 4 CPUs (my own machine) the option parallel
|
||||
mark (aka --enable-parallel-mark) makes a BIG difference.
|
||||
|
||||
Takis Psarogiannakopoulos
|
||||
University of Cambridge
|
||||
Centre for Mathematical Sciences
|
||||
Department of Pure Mathematics
|
||||
Wilberforce Road
|
||||
Cambridge CB3 0WB ,UK , <takis@XFree86.Org>
|
||||
January 2002
|
||||
|
||||
|
||||
Note (HB):
|
||||
The integration of this patch is currently not complete.
|
||||
The following patches against 6.1alpha3 where hard to move
|
||||
to alpha4, and are not integrated. There may also be minor
|
||||
problems with stylistic corrections made by me.
|
||||
|
||||
|
||||
--- ltconfig.ORIG Mon Jan 28 20:22:18 2002
|
||||
+++ ltconfig Mon Jan 28 20:44:00 2002
|
||||
@@ -689,6 +689,11 @@
|
||||
pic_flag=-Kconform_pic
|
||||
fi
|
||||
;;
|
||||
+ dgux*)
|
||||
+ pic_flag='-fPIC'
|
||||
+ link_static='-Bstatic'
|
||||
+ wl='-Wl,'
|
||||
+ ;;
|
||||
*)
|
||||
pic_flag='-fPIC'
|
||||
;;
|
||||
@@ -718,6 +723,12 @@
|
||||
# We can build DLLs from non-PIC.
|
||||
;;
|
||||
|
||||
+ dgux*)
|
||||
+ pic_flag='-KPIC'
|
||||
+ link_static='-Bstatic'
|
||||
+ wl='-Wl,'
|
||||
+ ;;
|
||||
+
|
||||
osf3* | osf4* | osf5*)
|
||||
# All OSF/1 code is PIC.
|
||||
wl='-Wl,'
|
||||
@@ -1154,6 +1165,22 @@
|
||||
fi
|
||||
;;
|
||||
|
||||
+ dgux*)
|
||||
+ ld_shlibs=yes
|
||||
+ # For both C/C++ ommit the deplibs. This is because we relying on the fact
|
||||
+ # that compilation of execitables will put them in correct order
|
||||
+ # in any case and sometimes are wrong when listed as deplibs (or missing some deplibs)
|
||||
+ # However when GNU ld and --whole-archive needs to be used we have the problem
|
||||
+ # that if the -fPIC *_s.a archive is linked through deplibs list we ommiting crucial
|
||||
+ # .lo/.o files from the created shared lib. This I think is not the case here.
|
||||
+ archive_cmds='$CC -shared -h $soname -o $lib $libobjs $linkopts'
|
||||
+ thread_safe_flag_spec='-pthread'
|
||||
+ wlarc=
|
||||
+ hardcode_libdir_flag_spec='-L$libdir'
|
||||
+ hardcode_shlibpath_var=no
|
||||
+ ac_cv_archive_cmds_needs_lc=no
|
||||
+ ;;
|
||||
+
|
||||
cygwin* | mingw*)
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
@@ -1497,7 +1524,7 @@
|
||||
;;
|
||||
|
||||
dgux*)
|
||||
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
|
||||
+ archive_cmds='$CC -shared -h $soname -o $lib $libobjs $linkopts'
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
hardcode_shlibpath_var=no
|
||||
;;
|
||||
@@ -2092,12 +2119,17 @@
|
||||
;;
|
||||
|
||||
dgux*)
|
||||
- version_type=linux
|
||||
+ version_type=dgux
|
||||
need_lib_prefix=no
|
||||
need_version=no
|
||||
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
|
||||
- soname_spec='${libname}${release}.so$major'
|
||||
+ library_names_spec='$libname.so$versuffix'
|
||||
+ soname_spec='$libname.so$versuffix'
|
||||
shlibpath_var=LD_LIBRARY_PATH
|
||||
+ thread_safe_flag_spec='-pthread'
|
||||
+ wlarc=
|
||||
+ hardcode_libdir_flag_spec='-L$libdir'
|
||||
+ hardcode_shlibpath_var=no
|
||||
+ ac_cv_archive_cmds_needs_lc=no
|
||||
;;
|
||||
|
||||
sysv4*MP*)
|
||||
|
||||
|
||||
--- ltmain.sh.ORIG Mon Jan 28 20:31:18 2002
|
||||
+++ ltmain.sh Tue Jan 29 00:11:29 2002
|
||||
@@ -1072,11 +1072,38 @@
|
||||
esac
|
||||
;;
|
||||
|
||||
+ -thread*)
|
||||
+ # DG/UX GCC 2.95.x, 3.x.x rev (DG/UX) links -lthread
|
||||
+ # with the switch -threads
|
||||
+ if test "$arg" = "-threads"; then
|
||||
+ case "$host" in
|
||||
+ i[3456]86-*-dgux*)
|
||||
+ deplibs="$deplibs $arg"
|
||||
+ continue
|
||||
+ ;;
|
||||
+ esac
|
||||
+ fi
|
||||
+ ;;
|
||||
+
|
||||
+ -pthread*)
|
||||
+ # DG/UX GCC 2.95.x, 3.x.x rev (DG/UX) links -lthread
|
||||
+ # with the switch -pthread
|
||||
+ if test "$arg" = "-pthread"; then
|
||||
+ case "$host" in
|
||||
+ i[3456]86-*-dgux*)
|
||||
+ deplibs="$deplibs $arg"
|
||||
+ continue
|
||||
+ ;;
|
||||
+ esac
|
||||
+ fi
|
||||
+ ;;
|
||||
+
|
||||
-l*)
|
||||
if test "$arg" = "-lc"; then
|
||||
case "$host" in
|
||||
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
|
||||
+ *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos* | i[3456]86-*-dgux*)
|
||||
# These systems don't actually have c library (as such)
|
||||
+ # It is wrong in DG/UX to add -lc when creating shared/dynamic objs/libs
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
@@ -1248,6 +1275,12 @@
|
||||
temp_deplibs=
|
||||
for deplib in $dependency_libs; do
|
||||
case "$deplib" in
|
||||
+ -thread*)
|
||||
+ temp_deplibs="$temp_deplibs $deplib"
|
||||
+ ;;
|
||||
+ -pthread)
|
||||
+ temp_deplibs="$temp_deplibs $deplib"
|
||||
+ ;;
|
||||
-R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
|
||||
case " $rpath $xrpath " in
|
||||
*" $temp_xrpath "*) ;;
|
||||
@@ -1709,6 +1742,13 @@
|
||||
done
|
||||
;;
|
||||
|
||||
+ dgux)
|
||||
+ # Leave mostly blank for DG/UX
|
||||
+ major=
|
||||
+ versuffix=".$current.$revision";
|
||||
+ verstring=
|
||||
+ ;;
|
||||
+
|
||||
linux)
|
||||
major=.`expr $current - $age`
|
||||
versuffix="$major.$age.$revision"
|
||||
@@ -1792,8 +1832,9 @@
|
||||
|
||||
dependency_libs="$deplibs"
|
||||
case "$host" in
|
||||
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
|
||||
+ *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos* | i[3456]86-*-dgux*)
|
||||
# these systems don't actually have a c library (as such)!
|
||||
+ # It is wrong in DG/UX to add -lc when creating shared/dynamic objs/libs
|
||||
;;
|
||||
*)
|
||||
# Add libc to deplibs on all other systems.
|
||||
68
gc/doc/README.arm.cross
Executable file
68
gc/doc/README.arm.cross
Executable file
@@ -0,0 +1,68 @@
|
||||
From: Margaret Fleck
|
||||
|
||||
Here's the key details of what worked for me, in case anyone else needs them.
|
||||
There may well be better ways to do some of this, but ....
|
||||
-- Margaret
|
||||
|
||||
|
||||
The badge4 has a StrongArm-1110 processor and a StrongArm-1111 coprocessor.
|
||||
|
||||
Assume that the garbage collector distribution is unpacked into /home/arm/gc6.0,
|
||||
which is visible to both the ARM machine and a linux desktop (e.g. via NFS mounting).
|
||||
|
||||
Assume that you have a file /home/arm/config.site with contents something like the
|
||||
example attached below. Notice that our local ARM toolchain lives in
|
||||
/skiff/local.
|
||||
|
||||
Go to /home/arm/gc6.0 directory. Do
|
||||
CONFIG_SITE=/home/arm/config.site ./configure --target=arm-linux
|
||||
--prefix=/home/arm/gc6.0
|
||||
|
||||
On your desktop, do:
|
||||
make
|
||||
make install
|
||||
The main garbage collector library should now be in ../gc6.0/lib/libgc.so.
|
||||
|
||||
To test the garbage collector, first do the following on your desktop
|
||||
make gctest
|
||||
./gctest
|
||||
Then do the following on the ARM machine
|
||||
cd .libs
|
||||
./lt-gctest
|
||||
|
||||
Do not try to do "make test" (the usual way of running the test
|
||||
program). This does not work and seems to erase some of the important
|
||||
files.
|
||||
|
||||
The gctest program claims to have succeeded. Haven't run any further tests
|
||||
with it, though I'll be doing so in the near future.
|
||||
|
||||
-------------------------------
|
||||
# config.site for configure
|
||||
|
||||
# Modified from the one provided by Bradley D. LaRonde
|
||||
# Edited by Andrej Cedilnik <acedil1@csee.umbc.edu>
|
||||
# Used some of solutions by Tilman Vogel <Tilman.Vogel@web.de>
|
||||
# Ported for iPAQ Familiar by Oliver Kurth <oliver.kurth@innominate.com>
|
||||
# Further modified by Margaret Fleck for the badge4
|
||||
|
||||
HOSTCC=gcc
|
||||
|
||||
# Names of the cross-compilers
|
||||
CC=/skiff/local/bin/arm-linux-gcc
|
||||
CXX=/skiff/local/bin/arm-linux-gcc
|
||||
|
||||
# The cross compiler specific options
|
||||
CFLAGS="-O2 -fno-exceptions"
|
||||
CXXFLAGS="-O2 -fno-exceptions"
|
||||
CPPFLAGS="-O2 -fno-exceptions"
|
||||
LDFLAGS=""
|
||||
|
||||
# Some other programs
|
||||
AR=/skiff/local/bin/arm-linux-ar
|
||||
RANLIB=/skiff/local/bin/arm-linux-ranlib
|
||||
NM=/skiff/local/bin/arm-linux-nm
|
||||
ac_cv_path_NM=/skiff/local/bin/arm-linux-nm
|
||||
ac_cv_func_setpgrp_void=yes
|
||||
x_includes=/skiff/local/arm-linux/include/X11
|
||||
x_libraries=/skiff/local/arm-linux/lib/X11
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -27,10 +27,26 @@ GC_PRINT_ADDRESS_MAP - Linux only. Dump /proc/self/maps, i.e. various address
|
||||
GC_NPROCS=<n> - Linux w/threads only. Explicitly sets the number of processors
|
||||
that the GC should expect to use. Note that setting this to 1
|
||||
when multiple processors are available will preserve
|
||||
correctness, but may lead to really horrible performance.
|
||||
correctness, but may lead to really horrible performance,
|
||||
since the lock implementation will immediately yield without
|
||||
first spinning.
|
||||
|
||||
GC_MARKERS=<n> - Linux w/threads and parallel marker only. Set the number
|
||||
of marker threads. This is normaly set to the number of
|
||||
processors. It is safer to adjust GC_MARKERS than GC_NPROCS,
|
||||
since GC_MARKERS has no impact on the lock implementation.
|
||||
|
||||
GC_NO_BLACKLIST_WARNING - Prevents the collector from issuing
|
||||
"Needed to allocate blacklisted block at ..." warnings.
|
||||
warnings about allocations of very large blocks.
|
||||
Deprecated. Use GC_LARGE_ALLOC_WARN_INTERVAL instead.
|
||||
|
||||
GC_LARGE_ALLOC_WARN_INTERVAL=<n> - Print every nth warning about very large
|
||||
block allocations, starting with the nth one. Small values
|
||||
of n are generally benign, in that a bounded number of
|
||||
such warnings generally indicate at most a bounded leak.
|
||||
For best results it should be set at 1 during testing.
|
||||
Default is 5. Very large numbers effectively disable the
|
||||
warning.
|
||||
|
||||
GC_IGNORE_GCJ_INFO - Ignore the type descriptors implicitly supplied by
|
||||
GC_gcj_malloc and friends. This is useful for debugging
|
||||
@@ -57,6 +73,26 @@ The following turn on runtime flags that are also program settable. Checked
|
||||
only during initialization. We expect that they will usually be set through
|
||||
other means, but this may help with debugging and testing:
|
||||
|
||||
GC_ENABLE_INCREMENTAL - Turn on incremental collection at startup. Note that,
|
||||
depending on platform and collector configuration, this
|
||||
may involve write protecting pieces of the heap to
|
||||
track modifications. These pieces may include pointerfree
|
||||
objects or not. Although this is intended to be
|
||||
transparent, it may cause unintended system call failures.
|
||||
Use with caution.
|
||||
|
||||
GC_PAUSE_TIME_TARGET - Set the desired garbage collector pause time in msecs.
|
||||
This only has an effect if incremental collection is
|
||||
enabled. If a collection requires appreciably more time
|
||||
than this, the client will be restarted, and the collector
|
||||
will need to do additional work to compensate. The
|
||||
special value "999999" indicates that pause time is
|
||||
unlimited, and the incremental collector will behave
|
||||
completely like a simple generational collector. If
|
||||
the collector is configured for parallel marking, and
|
||||
run on a multiprocessor, incremental collection should
|
||||
only be used with unlimited pause time.
|
||||
|
||||
GC_FIND_LEAK - Turns on GC_find_leak and thus leak detection.
|
||||
|
||||
GC_ALL_INTERIOR_POINTERS - Turns on GC_all_interior_pointers and thus interior
|
||||
|
||||
@@ -73,3 +73,9 @@ GC on EWS4800
|
||||
--
|
||||
Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||
|
||||
|
||||
When using the new "configure; make" build process, please
|
||||
run configure with the --disable-shared option. "Make check" does not
|
||||
yet pass with dynamic libraries. Ther reasons for that are not yet
|
||||
understood. (HB, paraphrasing message from Hironori SAKAMOTO.)
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@ registrations are ignored, but not terribly quickly.)
|
||||
pointers. And the VirtualQuery call has different semantics under
|
||||
the two systems, and under different versions of win32s.)
|
||||
|
||||
Win32 applications compiled with some flavor of gcc currently behave
|
||||
like win32s applications, in that dynamic library data segments are
|
||||
not scanned. (Gcc does not directly support Microsoft's "structured
|
||||
exception handling". It turns out that use of this feature is
|
||||
unavoidable if you scan arbirtray memory segments obtained from
|
||||
VirtualQuery.)
|
||||
|
||||
The collector test program "gctest" is linked as a GUI application,
|
||||
but does not open any windows. Its output appears in the file
|
||||
"gc.log". It may be started from the file manager. The hour glass
|
||||
@@ -50,7 +57,8 @@ This appears to cause problems under Windows NT and Windows 2000 (but
|
||||
not Windows 95/98) if the memory is later passed to CreateDIBitmap.
|
||||
To work around this problem, build the collector with -DUSE_GLOBAL_ALLOC.
|
||||
This is currently incompatible with -DUSE_MUNMAP. (Thanks to Jonathan
|
||||
Clark for tracking this down.)
|
||||
Clark for tracking this down. There's some chance this may be fixed
|
||||
in 6.1alpha4, since we now separate heap sections with an unused page.)
|
||||
|
||||
For Microsoft development tools, rename NT_MAKEFILE as
|
||||
MAKEFILE. (Make sure that the CPU environment variable is defined
|
||||
@@ -64,7 +72,7 @@ absence of thread support).
|
||||
For GNU-win32, use the regular makefile, possibly after uncommenting
|
||||
the line "include Makefile.DLLs". The latter should be necessary only
|
||||
if you want to package the collector as a DLL. The GNU-win32 port is
|
||||
believed to work only for b18, not b19, probably dues to linker changes
|
||||
believed to work only for b18, not b19, probably due to linker changes
|
||||
in b19. This is probably fixable with a different definition of
|
||||
DATASTART and DATAEND in gcconfig.h.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user