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