From: bryce Date: Tue, 20 Jun 2000 01:04:58 +0000 (+0000) Subject: 2000-06-20 Bryce McKinlay X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eb3d6dda765d1b8d3411edad6b291e25039f570f;p=gc 2000-06-20 Bryce McKinlay Imported version 5.1. * acinclude.m4: Push version to 5.1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34610 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/ChangeLog b/ChangeLog index f5b5fb44..de895eb1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2000-06-20 Bryce McKinlay + + Imported version 5.1. + * acinclude.m4: Push version to 5.1. + 2000-06-19 Andrew Haley * os_dep.c (read): Pass two dummy args to syscall(). diff --git a/README b/README index 083c7a72..7e333dbc 100644 --- a/README +++ b/README @@ -15,7 +15,7 @@ Permission to modify the code and to distribute modified code is granted, provided the above notices are retained, and a notice that the code was modified is included with the above copyright notice. -This is version 5.0 of a conservative garbage collector for C and C++. +This is version 5.1 of a conservative garbage collector for C and C++. You might find a more recent version of this at @@ -1611,6 +1611,18 @@ Since 5.0alpha7: This caused occasional failures under Windows 98, and may also be an issue under Windows NT/2000. +Since 5.0 + - Fixed a gc.h header bug which showed up under Irix. (Thanks to + Dan Sullivan.) + - Fixed a typo in GC_double_descr in typd_mlc.c not getting traced correctly. + This probably could result in objects described by array descriptors not + getting traced correctly. (Thanks to Ben Hutchings for pointing this out.) + - The block nearly full tests in reclaim.c were not correct for 64 bit + environments. This could result in unnecessary heap growth under unlikely + conditions. + - Removed use of CLEAR_DOUBLE from generic reclaim code, since odd sizes + could occur. + To do: - Integrate Linux/SPARC fixes. - Very large root set sizes (> 16 MB or so) could cause the collector diff --git a/acinclude.m4 b/acinclude.m4 index 27478584..6491f994 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -31,7 +31,7 @@ AC_SUBST(boehm_gc_basedir) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(boehm-gc, 5.0, no-define) +AM_INIT_AUTOMAKE(boehm-gc, 5.1, no-define) # FIXME: We temporarily define our own version of AC_PROG_CC. This is # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We diff --git a/aclocal.m4 b/aclocal.m4 index 797bddc1..a0f394fd 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -43,7 +43,7 @@ AC_SUBST(boehm_gc_basedir) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(boehm-gc, 5.0, no-define) +AM_INIT_AUTOMAKE(boehm-gc, 5.1, no-define) # FIXME: We temporarily define our own version of AC_PROG_CC. This is # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We diff --git a/gc.h b/gc.h index e35f54f7..d7cd8996 100644 --- a/gc.h +++ b/gc.h @@ -372,8 +372,7 @@ GC_API GC_PTR GC_malloc_atomic_ignore_off_page GC_PROTO((size_t lb)); #ifdef GC_ADD_CALLER # define GC_EXTRAS GC_RETURN_ADDR, __FILE__, __LINE__ -# define GC_EXTRA_PARAMS GC_word ra, GC_CONST char * s, - int i +# define GC_EXTRA_PARAMS GC_word ra, GC_CONST char * s, int i #else # define GC_EXTRAS __FILE__, __LINE__ # define GC_EXTRA_PARAMS GC_CONST char * s, int i diff --git a/reclaim.c b/reclaim.c index 57c652ef..4ace1107 100644 --- a/reclaim.c +++ b/reclaim.c @@ -236,18 +236,9 @@ register word sz; /* Clear object, advance p to next object in the process */ q = p + sz; p++; /* Skip link field */ -# if defined(SMALL_CONFIG) && defined(ALIGN_DOUBLE) - /* We assert that sz must be even */ - *p++ = 0; - while (p < q) { - CLEAR_DOUBLE(p); - p += 2; - } -# else - while (p < q) { + while (p < q) { *p++ = 0; - } -# endif + } } word_no += sz; } @@ -604,20 +595,32 @@ int report_if_found; /* Abort if a reclaimable object is found */ switch(sz) { # ifndef SMALL_CONFIG case 1: - full = GC_block_nearly_full1(hhdr, 0xffffffffl); +# if CPP_WORDSZ == 64 + full = GC_block_nearly_full1(hhdr, 0xffffffffffffffffl); +# else + full = GC_block_nearly_full1(hhdr, 0xffffffffl); +# endif if (TRUE == full) goto out; if (FALSE == full) GC_write_hint(hbp); /* In the DONT_KNOW case, we let reclaim fault. */ *flh = GC_reclaim1(hbp, hhdr, *flh); break; case 2: - full = GC_block_nearly_full1(hhdr, 0x55555555l); +# if CPP_WORDSZ == 64 + full = GC_block_nearly_full1(hhdr, 0x5555555555555555l); +# else + full = GC_block_nearly_full1(hhdr, 0x55555555l); +# endif if (TRUE == full) goto out; if (FALSE == full) GC_write_hint(hbp); *flh = GC_reclaim_clear2(hbp, hhdr, *flh); break; case 4: - full = GC_block_nearly_full1(hhdr, 0x11111111l); +# if CPP_WORDSZ == 64 + full = GC_block_nearly_full1(hhdr, 0x1111111111111111l); +# else + full = GC_block_nearly_full1(hhdr, 0x11111111l); +# endif if (TRUE == full) goto out; if (FALSE == full) GC_write_hint(hbp); *flh = GC_reclaim_clear4(hbp, hhdr, *flh); @@ -634,19 +637,31 @@ int report_if_found; /* Abort if a reclaimable object is found */ switch(sz) { # ifndef SMALL_CONFIG case 1: - full = GC_block_nearly_full1(hhdr, 0xffffffffl); +# if CPP_WORDSZ == 64 + full = GC_block_nearly_full1(hhdr, 0xffffffffffffffffl); +# else + full = GC_block_nearly_full1(hhdr, 0xffffffffl); +# endif if (TRUE == full) goto out; if (FALSE == full) GC_write_hint(hbp); *flh = GC_reclaim1(hbp, hhdr, *flh); break; case 2: - full = GC_block_nearly_full1(hhdr, 0x55555555l); +# if CPP_WORDSZ == 64 + full = GC_block_nearly_full1(hhdr, 0x5555555555555555l); +# else + full = GC_block_nearly_full1(hhdr, 0x55555555l); +# endif if (TRUE == full) goto out; if (FALSE == full) GC_write_hint(hbp); *flh = GC_reclaim_uninit2(hbp, hhdr, *flh); break; case 4: - full = GC_block_nearly_full1(hhdr, 0x11111111l); +# if CPP_WORDSZ == 64 + full = GC_block_nearly_full1(hhdr, 0x1111111111111111l); +# else + full = GC_block_nearly_full1(hhdr, 0x11111111l); +# endif if (TRUE == full) goto out; if (FALSE == full) GC_write_hint(hbp); *flh = GC_reclaim_uninit4(hbp, hhdr, *flh); diff --git a/typd_mlc.c b/typd_mlc.c index ce769d60..a198f6c1 100644 --- a/typd_mlc.c +++ b/typd_mlc.c @@ -175,7 +175,7 @@ GC_descr GC_double_descr(descriptor, nwords) register GC_descr descriptor; register word nwords; { - if (descriptor && DS_TAGS == DS_LENGTH) { + if (descriptor & DS_TAGS == DS_LENGTH) { descriptor = GC_bm_table[BYTES_TO_WORDS((word)descriptor)]; }; descriptor |= (descriptor & ~DS_TAGS) >> nwords; diff --git a/version.h b/version.h index 2c69e44d..04787d85 100644 --- a/version.h +++ b/version.h @@ -1,5 +1,5 @@ #define GC_VERSION_MAJOR 5 -#define GC_VERSION_MINOR 0 +#define GC_VERSION_MINOR 1 #define GC_ALPHA_VERSION GC_NOT_ALPHA # define GC_NOT_ALPHA 0xff