From aec5061ba2487186e07012b1b9d2684c04dd027f Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Tue, 20 Jun 2000 01:04:58 +0000 Subject: [PATCH] Imported version 5.1. 2000-06-20 Bryce McKinlay Imported version 5.1. * acinclude.m4: Push version to 5.1. From-SVN: r34610 --- boehm-gc/ChangeLog | 5 +++++ boehm-gc/README | 14 ++++++++++++- boehm-gc/acinclude.m4 | 2 +- boehm-gc/aclocal.m4 | 2 +- boehm-gc/gc.h | 3 +-- boehm-gc/reclaim.c | 49 ++++++++++++++++++++++++++++--------------- boehm-gc/typd_mlc.c | 2 +- boehm-gc/version.h | 2 +- 8 files changed, 55 insertions(+), 24 deletions(-) diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index f5b5fb4488e..de895eb1dd1 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/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/boehm-gc/README b/boehm-gc/README index 083c7a7259d..7e333dbcf10 100644 --- a/boehm-gc/README +++ b/boehm-gc/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/boehm-gc/acinclude.m4 b/boehm-gc/acinclude.m4 index 27478584e6d..6491f994143 100644 --- a/boehm-gc/acinclude.m4 +++ b/boehm-gc/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/boehm-gc/aclocal.m4 b/boehm-gc/aclocal.m4 index 797bddc1665..a0f394fd55f 100644 --- a/boehm-gc/aclocal.m4 +++ b/boehm-gc/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/boehm-gc/gc.h b/boehm-gc/gc.h index e35f54f7d3f..d7cd8996085 100644 --- a/boehm-gc/gc.h +++ b/boehm-gc/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/boehm-gc/reclaim.c b/boehm-gc/reclaim.c index 57c652ef265..4ace1107d62 100644 --- a/boehm-gc/reclaim.c +++ b/boehm-gc/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/boehm-gc/typd_mlc.c b/boehm-gc/typd_mlc.c index ce769d60fec..a198f6c154d 100644 --- a/boehm-gc/typd_mlc.c +++ b/boehm-gc/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/boehm-gc/version.h b/boehm-gc/version.h index 2c69e44dd31..04787d85be3 100644 --- a/boehm-gc/version.h +++ b/boehm-gc/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