]> granicus.if.org Git - gc/commitdiff
Rewrite ChangeLog to contain only major per-release changes description
authorIvan Maidanski <ivmai@mail.ru>
Sun, 18 Sep 2011 09:55:04 +0000 (13:55 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Sun, 18 Sep 2011 09:55:04 +0000 (13:55 +0400)
(only starting from 7.2alpha7, the rest remains in the form of commit
log except for versions prior to 7.0alpha9)

ChangeLog
TODO

index c297d15d177c1707ade868a50a6b3b28a8a6bfdd..5e11d28f974f811003b41242cb199277620a6840 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-Retired in favor of Git commit log. No longer updated.
-
-
-2011-07-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * tests/realloc_test.c: New file.
-       * tests/tests.am (TESTS, check_PROGRAMS): Add realloc_test.
-       * .cvsignore: Add realloc_test.
-       * configure: Regenerate.
-       * Makefile.in: Ditto.
-
-2011-07-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * .cvsignore: Add more auto-generated files.
-
-2011-07-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * new_hblk.c (GC_build_fl): Adjust "h" local variable cast type
-       when setting obj_link (to prevent compiler warning); reformat the
-       comment.
-       * tests/test.c (reverse_test_inner): Use proper type when touching
-       "b" and "c" local variables (to prevent compiler warning).
-
-2011-07-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * misc.c (GC_init): Use HOTTER_THAN (instead of STACK_GROWS_DOWN)
-       for GC_stackbottom assertion.
-       * os_dep.c (GC_enclosing_mapping): Define only if IA64 or
-       INCLUDE_LINUX_THREAD_DESCR; make GC_INNER.
-       * pthread_support.c (GC_enclosing_mapping): Declare (only if
-       INCLUDE_LINUX_THREAD_DESCR).
-       * os_dep.c (GC_get_main_stack_base): Don't call pthread_getattr_np
-       if REDIRECT_MALLOC as the former is observed to call redirected
-       malloc (while GC is not initialized yet) on some Linux platforms.
-       * include/private/gc_priv.h (MAX_HEAP_SECTS): Don't use a smaller
-       value for SMALL_CONFIG if USE_PROC_FOR_LIBRARIES defined.
-
-2011-07-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * malloc.c (GC_init_lib_bounds): Call GC_init (to ensure GC is
-       initialized before doing GC_text_mapping).
-       * misc.c (GC_init): Add a check for GC_init recursion in case of
-       malloc is redirected (abort with the corresponding message).
-       * pthread.c (GC_thr_init): Place GC_add_roots_inner call into
-       "else" branch to prevent "local variable might be uninitialized"
-       compiler warning; add comment.
-
-2011-07-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (GC_register_dynamic_libraries): Remove duplicate
-       call of GC_FirstDLOpenedLinkMap (twice).
-       * dyn_load.c (GC_register_main_static_data): Add comment.
-       * cord/cordbscs.c (CORD_riter): Check for empty string passed (do
-       not call CORD_riter4 if CORD_len() returned zero).
-       * cord/cordbscs.c (CORD_init_min_len): Replace the K&R-style
-       function definition with the ANSI C one.
-       * cord/cordbscs.c: Expand all tabs to spaces; remove
-       trailing spaces at EOLn.
-       * tests/threadkey_test.c (on_thread_exit_inner): Check
-       GC_pthread_create() result.
-
-2011-07-04  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gcconfig.h (etext): Don't define if unused
-       (NetBSD).
-       * include/private/gcconfig.h (GC_data_start, DATASTART): Define
-       for NetBSD/amd64 if ELF.
-       * include/private/gcconfig.h (SEARCH_FOR_DATA_START): Don't define
-       for NetBSD/amd64 if ELF.
-
-2011-07-04  Ivan Maidanski <ivmai@mail.ru> (mostly really Andy Wingo)
-
-       * configure.ac (GC_THREADS): Refine the comment.
-       * configure.ac (GC_WIN32_PTHREADS): Add template.
-       * configure.ac (cygwin, win32): Define GC_WIN32_THREADS instead of
-       GC_THREADS.
-       * configure.ac (pthreads): Add mingw target (GC_WIN32_PTHREADS).
-       * configure: Regenerate.
-       * include/private/config.h.in: Ditto.
-       * include/private/gc_locks.h (GC_WIN32_PTHREADS): Remove nested
-       test for the macro; add comment.
-
-2011-07-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (CHECK_LOOKUP_MY_THREAD): New macro definition.
-       * win32_threads.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested, GC_unregister_my_thread,
-       GC_do_blocking_inner, GC_call_with_gc_active, GC_init_parallel):
-       Insert CHECK_LOOKUP_MY_THREAD before dereferencing thread
-       descriptor pointer (to instruct a LINT-like tool that it is ok to
-       dereference the pointer).
-       * win32_threads.c (GC_get_next_stack): Assert plast_stack_min is
-       non-NULL if current_min is not ADDR_LIMIT (for a LINT-like tool).
-       * win32_threads.c (GC_init_parallel): Define and use "me" local
-       variable.
-       * cord/cordtest.c (test_basics): Test CORD_substr() result is
-       non-NULL.
-       * cord/cordtest.c (test_extras): Test fopen() result is non-NULL.
-       * cord/cordtest.c (test_basics, test_extras, test_printf, main):
-       Replace the K&R-style function definition with the ANSI C one.
-       * cord/cordtest.c: Expand all tabs to spaces; remove
-       trailing spaces at EOLn.
-       * include/private/gc_priv.h (ABORT): Define as abort() when
-       checking the code with a LINT-like tool (Win32 only).
-       * tests/test.c (FAIL): Ditto.
-       * tests/test.c (CHECH_GCLIB_VERSION): New macro (to check that the
-       version of libgc.so used at runtime matches that at compile time).
-       * tests/test.c (GC_COND_INIT): Use CHECH_GCLIB_VERSION.
-       * tests/test.c (CHECK_OUT_OF_MEMORY): New macro (to test malloc
-       result for out of memory).
-       * tests/test.c (cons, small_cons, small_cons_uncollectable,
-       gcj_cons, reverse_test_inner, mktree, alloc8bytes, typed_test,
-       run_one_test): Use CHECK_OUT_OF_MEMORY.
-
-2011-06-30  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (GC_register_map_entries): Remove "count" local
-       variable as unused.
-       * gc_dlopen.c (disable_gc_for_dlopen): Define only if not
-       USE_PROC_FOR_LIBRARIES.
-       * malloc.c (calloc): Add parentheses around '&&' operator.
-       * mark.c (GC_noop_sink): New global variable (instead of a static
-       local variable inside GC_noop1).
-       * mark.c (GC_noop1): Use GC_noop_sink variable (to prevent
-       "variable set but not used" compiler warning).
-       * include/private/gcconfig.h (USE_PROC_FOR_LIBRARIES): Define only
-       if undefined yet.
-       * tests/smash_test.c (main): Don't dereference "p" local variable
-       if it is NULL.
-       * tests/staticrootslib.c (main): Ditto.
-
-2011-06-30  Ivan Maidanski <ivmai@mail.ru>
-
-       * pthread_support.c (GC_segment_is_thread_stack): Replace '&'
-       operator with '&&' one in conditional expressions.
-       * specific.c (remove_specific): Dereference "entry" local variable
-       only if it is non-NULL.
-       * include/gc.h (GC_NEW): Refine the comment (about the returned
-       value).
-
-2011-06-15  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_version.h, configure.ac, doc/README: Change to
-       version 7.2alpha7.
-       * configure: Regenerate.
-
-[7.2alpha6]
-
-2011-06-14  Ivan Maidanski  <ivmai@mail.ru>
-
-       * configure_atomic_ops.sh: Remove.
-       * Makefile.direct (dist gc.tar): Remove configure_atomic_ops.sh.
-       * Makefile.am (EXTRA_DIST): Add autogen.sh.
-       * Makefile.in: Regenerate.
-       * configure: Ditto.
-
-2011-06-14  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/gc_version.h, configure.ac, doc/README: Change to
-       version 7.2alpha6.
-       * configure: Regenerate.
-
-2011-05-31  Ivan Maidanski  <ivmai@mail.ru>
-
-       * NT_STATIC_THREADS_MAKEFILE (.cpp.obj): Remove duplicate .cpp
-       filename passed.
-       * NT_X64_THREADS_MAKEFILE (.cpp.obj): Use lowercase file
-       extension.
-       * NT_X64_STATIC_THREADS_MAKEFILE (.cpp.obj): Ditto.
-       * NT_MAKEFILE (.cpp.obj): Ditto.
-
-2011-05-31  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c (GC_add_current_malloc_heap, GC_build_back_graph,
-       GC_traverse_back_graph): Move prototype to gc_priv.h.
-       * checksums.c (GC_page_was_ever_dirty): Ditto.
-       * dbg_mlc.c (GC_default_print_heap_obj_proc): Ditto.
-       * dyn_load.c (GC_parse_map_entry, GC_get_maps,
-       GC_segment_is_thread_stack, GC_roots_present, GC_is_heap_base,
-       GC_get_next_stack): Ditto.
-       * finalize.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested): Ditto.
-       * gcj_mlc.c (GC_start_debugging, GC_store_debug_info): Ditto.
-       * malloc.c (GC_extend_size_map, GC_text_mapping): Ditto.
-       * mark_rts.c (GC_mark_thread_local_free_lists): Ditto.
-       * misc.c (GC_register_main_static_data, GC_init_win32,
-       GC_setpagesize, GC_init_linux_data_start,
-       GC_set_and_save_fault_handler, GC_init_dyld, GC_init_netbsd_elf,
-       GC_initialize_offsets, GC_bl_init, GC_do_blocking_inner,
-       GC_bl_init_no_interiors): Ditto.
-       * os_dep.c (GC_greatest_stack_base_below, GC_push_all_stacks):
-       Ditto.
-       * reclaim.c (GC_check_leaked): Ditto.
-       * win32_threads.c (GC_gww_dirty_init): Ditto.
-       * darwin_stop_world.c (GC_is_mach_marker, GC_mprotect_stop,
-       GC_mprotect_resume): Move prototype to darwin_stop_world.h.
-       * pthread_support.c (GC_FindTopOfStack): Ditto.
-       * dyn_load.c (GC_cond_add_roots): Merge adjacent definitions.
-       * mark.c (GC_page_was_ever_dirty): Remove (as already declared).
-       * mark_rts.c (GC_roots_present): Change return type to void
-       pointer (to match the prototype); return NULL instead of FALSE.
-       * mark_rts.c (GC_add_roots_inner): Cast GC_roots_present() result.
-       * os_dep.c (NEED_PROC_MAPS): Move definition to gcconfig.h.
-       * os_dep.c (GC_write_fault_handler): Make STATIC.
-       * os_dep.c (GC_set_write_fault_handler): New function (only if
-       GC_WIN32_THREADS).
-       * pthread_start.c (GC_start_rtn_prepare_thread,
-       GC_thread_exit_proc): Move prototype to pthread_support.h.
-       * pthread_support.c (GC_nacl_initialize_gc_thread,
-       GC_nacl_shutdown_gc_thread, GC_unblock_gc_signals):
-       Ditto.
-       * pthread_support.c (GC_stop_init): Move prototype to
-       pthread_stop_world.h.
-       * thread_local_alloc.c (GC_check_tls_for): Reformat comment.
-       * win32_threads.c (GC_write_fault_handler): Remove prototype.
-       * win32_threads.c (GC_register_my_thread_inner): Call
-       GC_set_write_fault_handler instead of SetUnhandledExceptionFilter
-       (only if MPROTECT_VDB).
-       * doc/README.win32: Add information about DMC.
-       * include/private/gc_priv.h (GC_set_write_fault_handler): New
-       prototype (only if GC_WIN32_THREADS and MPROTECT_VDB).
-
-2011-05-31  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (vsnprintf): Redirect to vsprintf() if NO_VSNPRINTF.
-
-2011-05-31  Ivan Maidanski  <ivmai@mail.ru>
-
-       * win32_threads.c (GC_unregister_my_thread): Use KNOWN_FINISHED()
-       instead of FINISHED macro.
-       * tests/test.c (check_heap_stats): Round up max_heap_sz value for
-       Win32 (same as for USE_MMAP).
-
-2011-05-31  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/test.c (check_heap_stats): Adjust printf format specifier
-       for max_heap_sz; cast max_heap_sz accordingly.
-
-2011-05-30  Ivan Maidanski  <ivmai@mail.ru>
-
-       * doc/README.solaris2: Add note.
-
-2011-05-30  Ivan Maidanski  <ivmai@mail.ru>
-
-       * configure.ac (SOLARIS25_PROC_VDB_BUG_FIXED): Don't define for
-       Solaris/x86 2.10+.
-       * configure: Regenerate.
-
-2011-05-23  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/threadkey_test.c (SKIP_THREADKEY_TEST): Skip the test if
-       defined; explicitly define for some targets.
-
-2011-05-23  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mark.c (GC_dirty): Add prototype (only if MANUAL_VDB).
-       * stubborn.c (GC_dirty): Ditto.
-       * include/private/gcconfig.h (GWW_VDB, MPROTECT_VDB, PCR_VDB,
-       PROC_VDB): Undefine if MANUAL_VDB.
-       * include/private/gcconfig.h (DEFAULT_VDB): Don't define if
-       MANUAL_VDB.
-       * os_dep.c (async_set_pht_entry_from_index): Define for
-       MANUAL_VDB.
-       * os_dep.c (GC_read_dirty): Set GC_dirty_maintained only if
-       success; if ioctl() failed then just print warning instead of
-       aborting.
-
-2011-05-23  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (GC_ASSERT): Use "%d" (instead of %ld)
-       for line number printing.
-
-2011-05-23  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_read_dirty): Add debug logging if DEBUG_DIRTY_BITS
-       (for PROC_VDB only); print errors via GC_err_printf; rename "ps"
-       and "np" local variables to npages and pagesize, respectively;
-       remove "current_addr" local variable.
-       * os_dep.c: Reformat comments.
-
-2011-05-22  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_main_stack_base): Convert to GC_get_stack_base
-       for BeOS and OS/2; define HAVE_GET_STACK_BASE.
-       * os_dep.c (GET_MAIN_STACKBASE_SPECIAL): Define when a specific
-       GC_get_main_stack_base implementation is defined.
-       * os_dep.c (GC_get_main_stack_base): Define that based on
-       GC_get_stack_base() in a single place (only if
-       GET_MAIN_STACKBASE_SPECIAL is unset); check GC_get_stack_base()
-       result.
-
-2011-05-20  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mark.c (GC_push_selected): Remove "push_fn" argument (use
-       GC_push_all directly); update the documentation; reformat the
-       comment.
-       * mark.c (GC_push_conditional): Simplify the code (for better
-       readability).
-
-2011-05-20  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mark.c (alloc_mark_stack): Use FALSE/TRUE (instead of 0/1) for
-       boolean local variables.
-       * doc/README.macros (GC_PREFER_MPROTECT_VDB): Update.
-       * os_dep.c (GC_page_was_dirty, GC_page_was_ever_dirty,
-       GC_remove_protection): Define for GWW_VDB and PROC_VDB in a single
-       place.
-       * os_dep.c (GC_page_was_dirty, GC_page_was_ever_dirty): Compute
-       PHT_HASH(h) only once (store result to a local variable).
-
-2011-05-20  Ivan Maidanski  <ivmai@mail.ru>
-
-       * doc/README.solaris2: Update.
-
-2011-05-19  Ivan Maidanski  <ivmai@mail.ru> (really Jie Liu)
-
-       * include/private/gcconfig.h (end, InitStackBottom): Declare
-       extern variable for RTEMS.
-       * include/private/gcconfig.h (DATASTART, DATAEND, STACKBOTTOM):
-       Update (for RTEMS).
-       * include/private/gcconfig.h (DATAEND): Fix a typo in the macro
-       name (for RTEMS).
-       * tests/test.c (CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER):
-       Replace with CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER (for RTEMS).
-
-2011-05-18  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gcconfig.h (MPROTECT_VDB): Enable for Solaris in
-       single-threaded environment.
-
-2011-05-18  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gcconfig.h (MPROTECT_VDB): Undefine if PROC_VDB.
-       * tests/test.c (NUMBER_ROUND_UP): New macro.
-       * tests/test.c (check_heap_stats): Round up total expected heap
-       size to the nearest 4 MiB bound.
-       * tests/test.c (check_heap_stats): Print the current and expected
-       heap sizes in case of failure.
-
-2011-05-18  Ivan Maidanski  <ivmai@mail.ru>
-
-       * checksums.c (GC_check_blocks, GC_check_dirty): Do log printing
-       only if GC_print_stats; print errors using GC_err_printf.
-       * checksums.c (GC_check_blocks): Join adjacent printf() calls into
-       a single one.
-
-2011-05-17  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (pthread_join): Add assertion (check thread is
-       finished).
-       * pthread_support.c (GC_register_my_thread): Don't detach the
-       thread if invoked from the thread destructor.
-       * win32_threads.c (GC_register_my_thread): Ditto.
-       * win32_threads.c (GC_unregister_my_thread): Don't delete the
-       thread (just set FINISHED) if the thread is not detached (only if
-       GC_PTHREADS); add assertion (check the thread is not finished).
-       * tests/threadkey_test.c (main): Join some created threads.
-
-2011-05-17  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (GC_delete_gc_thread): Rename "gc_id" local
-       variable to "t".
-       * win32_threads.c (GC_delete_gc_thread): Ditto.
-       * pthread_support.c (pthread_join, pthread_detach,
-       pthread_cancel): Rename "thread_gc_id" local variable to "t".
-       * win32_threads.c (GC_pthread_detach): Ditto.
-       * win32_threads.c (GC_delete_gc_thread): Remove "gc_nvid" local
-       variable.
-       * win32_threads.c (GC_pthread_join): Rename "joinee" local
-       variable to "t".
-
-2011-05-16  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_stop_world.c (pthread_sigmask): Undefine even if not
-       DEBUG_THREADS.
-       * pthread_stop_world.c (GC_unblock_gc_signals): New function (only
-       if GC_EXPLICIT_SIGNALS_UNBLOCK).
-       * pthread_support.c (GC_unblock_gc_signals): New prototype.
-       * pthread_support.c (GC_register_my_thread_inner,
-       GC_register_my_thread): Call GC_unblock_gc_signals (only if
-       GC_EXPLICIT_SIGNALS_UNBLOCK); add comment.
-       * include/private/gcconfig.h (GC_EXPLICIT_SIGNALS_UNBLOCK): New
-       macro.
-
-2011-05-16  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_stop_world.c (GC_suspend_handler_inner): Remove "dummy",
-       "sig" local variables; rename my_thread local variable to "self".
-
-2011-05-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/threadkey_test.c (LIMIT): Use smaller value (don't create
-       more than 30 in parallel by default).
-
-2011-05-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/threadkey_test.c (key_once, main): Work around for Solaris
-       PTHREAD_ONCE_INIT.
-       * tests/threadkey_test.c (LIMIT): Use smaller value for Solaris.
-
-2011-05-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dyn_load.c (GC_FirstDLOpenedLinkMap): Remove unused "r" local
-       variable.
-       * pthread_support.c (GC_unregister_my_thread_inner): Revert back
-       GC_remove_specific invocation; add a comment.
-       * include/private/thread_local_alloc.h (GC_remove_specific):
-       Revert back.
-       * specific.c: Expand all tabs to spaces.
-       * specific.c (slow_getspecific): Cast qtid to AO_t.
-       * include/private/specific.h (quick_thread_id): Reformat comment.
-       * include/private/specific.h (key_create, setspecific,
-       remove_specific): Remove "extern" keyword.
-       * include/private/specific.h (getspecific): Change type of "qtid"
-       local variable to unsigned long.
-
-2011-05-11  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (GC_check_tls): Fix "#endif" comment.
-       * include/gc.h (GC_REDIRECT_TO_LOCAL): Remove deprecated comment.
-       * include/private/thread_local_alloc.h (THREAD_LOCAL_ALLOC):
-       Remove redundant test of the macro.
-       * include/private/thread_local_alloc.h: Reformat the code.
-
-2011-05-11  Ivan Maidanski  <ivmai@mail.ru>
-
-       * backgraph.c (add_edge): Recognize DEBUG_PRINT_BIG_N_EDGES macro.
-       * os_dep.c (GC_set_and_save_fault_handler): Recognize
-       SIGACTION_FLAGS_NODEFER_HACK macro.
-       * pthread_support.c (mark_mutex): Recognize GLIBC_2_1_MUTEX_HACK
-       macro.
-       * pthread_support.c (GC_acquire_mark_lock): Remove commented out
-       code.
-       * include/gc_inline.h (GC_MALLOC_WORDS, GC_MALLOC_ATOMIC_WORDS,
-       GC_CONS): Remove trailing space (before back-slash).
-       * include/private/gc_hdrs.h (GET_BI, GET_HDR_ADDR): Ditto.
-       * include/private/gc_pmark.h (PUSH_OBJ, PUSH_CONTENTS,
-       SET_MARK_BIT_EXIT_IF_SET, LONG_MULT, PUSH_CONTENTS_HDR,
-       GC_PUSH_ONE_STACK, GC_PUSH_ONE_HEAP): Ditto.
-       * include/private/thread_local_alloc.h (GC_key_create): Ditto.
-       * include/private/gc_priv.h (SUNOS5SIGS): Don't include
-       sys/siginfo.h on Linux.
-       * include/private/gcconfig.h: Reformat comments (and some code).
-       * include/private/gcconfig.h (FORCE_WRITE_PREFETCH): New macro
-       recognized, force PREFETCH_FOR_WRITE to be defined on x86.
-       * include/private/gcconfig.h (USE_HPUX_FIXED_STACKBOTTOM): New
-       macro recognized (for HP/UX).
-
-2011-05-11  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_gww_page_was_ever_dirty): Fix comment (for
-       GWW_VDB).
-       * os_dep.c (GC_dirty_init): Use memset() for GC_written_pages
-       resetting (for PROC_VDB).
-
-2011-05-11  Ivan Maidanski  <ivmai@mail.ru> (mostly really Ludovic Courtes)
-
-       * tests/threadkey_test.c: New file.
-       * .cvsignore (threadkey_test): Add.
-       * tests/tests.am (TESTS, check_PROGRAMS): Add 'threadkey_test'.
-       * tests/tests.am (threadkey_test_SOURCES, threadkey_test_LDADD):
-       New variable.
-       * Makefile.in: Regenerate.
-
-2011-05-11  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (GC_unregister_my_thread_inner): Don't call
-       GC_remove_specific.
-       * include/private/thread_local_alloc.h (GC_remove_specific):
-       Remove (since it is empty for all targets).
-       * pthread_support.c (GC_record_stack_base): New inline function.
-       * win32_threads.c (GC_record_stack_base): Ditto.
-       * pthread_support.c (GC_register_my_thread_inner): Invoke
-       GC_record_stack_base.
-       * win32_threads.c (GC_register_my_thread_inner): Ditto.
-       * pthread_support.c (GC_register_my_thread): If thread is FINISHED
-       then call GC_record_stack_base, clear FINISHED, initialize
-       thread-local list and return success.
-       * win32_threads.c (GC_register_my_thread): Ditto.
-       * include/gc.h (GC_register_my_thread): Update documentation.
-       * include/private/thread_local_alloc.h (GC_thread_key): Ditto.
-
-2011-05-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Join
-       adjacent "#ifdef".
-       * thread_local_alloc.c (GC_malloc_atomic): Call
-       GC_core_malloc_atomic (instead of GC_core_malloc).
-
-2011-05-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_start.c (GC_start_rtn_prepare_thread): Change return
-       type to GC_thread.
-       * pthread_start.c (GC_inner_start_routine): Pass the current
-       thread descriptor to pthread_cleanup_push (same as in
-       win32_threads.c).
-       * pthread_stop_world.c (GC_push_all_stacks): Rename "me" local
-       variable to "self".
-       * win32_threads.c (GC_push_all_stacks): Ditto.
-       * pthread_stop_world.c (GC_suspend_all, GC_start_world): Rename
-       "my_thread" local variable to "self".
-       * pthread_support.c (GC_unregister_my_thread_inner): New static
-       function.
-       * pthread_support.c (GC_unregister_my_thread,
-       GC_thread_exit_proc): Use GC_unregister_my_thread_inner.
-       * win32_threads.c (GC_register_my_thread, GC_unregister_my_thread,
-       GC_do_blocking_inner): Rename "t" local variable to "thread_id".
-       * win32_threads.c (GC_wait_marker, GC_notify_all_marker): Rename
-       "id" local variable to "thread_id".
-
-2011-05-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (GC_unregister_my_thread): Call pthread_self
-       only once.
-       * win32_threads.c (GC_pthread_start_inner): Ditto.
-       * pthread_support.c (GC_unregister_my_thread): Add debug output.
-       * win32_threads.c (GC_unregister_my_thread): Ditto.
-       * pthread_support.c (GC_register_my_thread,
-       GC_start_rtn_prepare_thread): Rename "my_pthread" local variable
-       to "self".
-
-2011-05-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/gc.h (GC_HIDE_POINTER, GC_REVEAL_POINTER): Define
-       unconditionally (do not test GC_I_HIDE_POINTERS); update the
-       comment.
-       * include/gc.h (HIDE_POINTER, REVEAL_POINTER): Define as alias to
-       GC_HIDE/REVEAL_POINTER, respectively.
-       * include/private/gc_pmark.h (GC_I_HIDE_POINTERS): Do not define.
-       * include/private/gc_priv.h (GC_I_HIDE_POINTERS): Ditto.
-
-2011-05-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/gc.h (GC_register_my_thread): Refine the comment.
-
-2011-05-08  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/gc_inline.h (GC_MALLOC_WORDS, GC_CONS): Add missing
-       parentheses.
-       * include/gc_typed.h (GC_get_bit, GC_set_bit,
-       GC_CALLOC_EXPLICITLY_TYPED): Ditto.
-
-2011-05-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gcconfig.h (NO_GETCONTEXT): Add missing ')'.
-
-2011-05-07  Ivan Maidanski  <ivmai@mail.ru> (really Thorsten Glaser)
-
-       * include/private/gcconfig.h (NO_GETCONTEXT): Do not use
-       getcontext(2) on m68k because it is not implemented there.
-
-2011-05-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c (GC_clear_a_few_frames): Use BZERO().
-       * mark_rts.c (GC_clear_roots, GC_rebuild_root_index): Ditto.
-       * reclaim.c (GC_start_reclaim): Ditto.
-       * blacklst.c (total_stack_black_listed): Remove "len" local
-       variable.
-       * dbg_mlc.c (GC_generate_random_valid_address): Replace "for"
-       statement with "do-while" one.
-       * dyn_load.c (GC_register_dynamic_libraries,
-       GC_register_dynlib_callback): Remove redundant parentheses.
-
-2011-05-06  Ivan Maidanski  <ivmai@mail.ru>
-
-       * cord/cordxtra.c (CORD_from_file_lazy_inner): Suppress
-       "unused result" compiler warning for fread().
-       * cord/cordxtra.c: Expand all tabs to spaces.
-
-2011-05-06  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_write_fault_handler): Break when in_allocd_block
-       is set to true.
-
-2011-05-06  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_has_other_debug_info): Change return type to int;
-       return -1 if the object has (or had) debugging info but was
-       marked deallocated.
-       * include/private/dbg_mlc.h (GC_has_other_debug_info): Ditto.
-       * dbg_mlc.c (GC_has_other_debug_info): Update documentation;
-       remove "ohdr" local variable.
-       * dbg_mlc.c (GC_debug_free): Don't call GC_free if the object has
-       probably been deallocated.
-       * dbg_mlc.c (GC_debug_free): Don't actually free the object even
-       in the leak-finding mode if GC_findleak_delay_free.
-       * dbg_mlc.c (GC_print_all_smashed_proc): Print a trailing blank
-       line.
-       * dbg_mlc.c (GC_check_leaked): New function (only unless
-       SHORT_DBG_HDRS).
-       * doc/README.environment (GC_FINDLEAK_DELAY_FREE): Document.
-       * doc/README.macros (GC_FINDLEAK_DELAY_FREE): Ditto.
-       * include/private/dbg_mlc.h (START_FLAG, END_FLAG): Use GC_WORD_C
-       on 64-bit architectures.
-       * include/private/dbg_mlc.h (NOT_MARKED): Remove redundant
-       parentheses.
-       * include/private/dbg_mlc.h (GC_HAS_DEBUG_INFO): Update (due to
-       GC_has_other_debug_info change).
-       * include/private/gc_priv.h (GC_findleak_delay_free): New global
-       variable declaration (unless SHORT_DBG_HDRS).
-       * misc.c (GC_findleak_delay_free): New global variable; recognize
-       GC_FINDLEAK_DELAY_FREE.
-       * misc.c (GC_init): Recognize GC_FINDLEAK_DELAY_FREE environment
-       variable (unless SHORT_DBG_HDRS).
-       * reclaim.c (GC_check_leaked): Declare (unless SHORT_DBG_HDRS).
-       * reclaim.c (GC_add_leaked): Don't add the object to leaked list
-       if marked as deallocated.
-
-2011-05-05  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_has_other_debug_info): Fix punctuation in the
-       comment.
-       * dbg_mlc.c (GC_FREED_MEM_MARKER): New macro.
-       * dbg_mlc.c (GC_debug_free): Use GC_FREED_MEM_MARKER.
-       * dbg_mlc.c (GC_smashed): Refine documentation.
-       * mark.c (GC_push_selected): Change dirty_fn return type to
-       GC_bool.
-       * os_dep.c (GC_page_was_ever_dirty): Make GC_INNER.
-       * reclaim.c (GC_reclaim_small_nonempty_block): Remove "kind"
-       local  variable.
-       * reclaim.c (GC_reclaim_block): Pass true constant to
-       GC_reclaim_small_nonempty_block (instead of report_if_found).
-       * doc/README.autoconf: Update; fix a typo.
-       * include/private/gcconfig.h (GC_WORD_C): New macro.
-
-2011-05-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_store_debug_info_inner): Cast "linenum".
-       * dbg_mlc.c (GC_check_annotated_obj): Fix punctuation in the
-       comment.
-       * dbg_mlc.c (GC_print_smashed_obj): Add (and print) "msg"
-       argument.
-       * dbg_mlc.c (GC_debug_free, GC_print_all_smashed_proc): Pass
-       message to GC_print_smashed_obj.
-       * dbg_mlc.c (GC_debug_free): Call GC_size once.
-       * dbg_mlc.c (GC_debug_realloc): Calculate old_sz only if
-       allocation succeeded; remove unnecessary check for object is
-       smashed (since this is done in GC_debug_free); remove "clobbered"
-       local variable.
-
-2011-05-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_store_debug_info_inner, GC_store_debug_info):
-       Rename "integer" argument to "linenum"; change the type of the
-       argument to int.
-       * gcj_mlc.c (GC_store_debug_info): Ditto.
-       * dbg_mlc.c (GET_OH_LINENUM): New macro.
-       * dbg_mlc.c (GC_print_obj, GC_print_smashed_obj): Use
-       GET_OH_LINENUM; adjust print format specifier.
-       * dbg_mlc.c (GC_debug_malloc, GC_debug_malloc_ignore_off_page,
-       GC_debug_malloc_atomic_ignore_off_page,
-       GC_debug_generic_malloc_inner,
-       GC_debug_generic_malloc_inner_ignore_off_page,
-       GC_debug_malloc_stubborn, GC_debug_malloc_atomic,
-       GC_debug_malloc_uncollectable,
-       GC_debug_malloc_atomic_uncollectable): Remove unnecessary cast of
-       "i".
-       * gcj_mlc.c (GC_debug_gcj_malloc): Ditto.
-
-2011-04-26  Ivan Maidanski  <ivmai@mail.ru>
-
-       * .cvsignore (initsecondarythread, test_cpp): Add.
-       * os_dep.c (GC_linux_stack_base): Rename to
-       GC_linux_main_stack_base.
-       * os_dep.c (GC_freebsd_stack_base): Rename to
-       GC_freebsd_main_stack_base; adjust error message.
-       * pthread_stop_world.c (GC_stop_init): Use GC_SEM_INIT_PSHARED
-       as an argument for sem_init().
-       * pthread_support.c (pthread_create): Ditto.
-       * pthread_support.c (pthread_create): Abort in case sem_init()
-       fails.
-       * include/private/gc_priv.h (GC_SEM_INIT_PSHARED): Define.
-       * tests/initsecondarythread.c: Include gcconfig.h; call GC_INIT
-       from main() if it should be done from the primordial thread only.
-
-2011-04-26  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c: Don't include sys/types.h for ArmCC.
-       * dyn_load.c: Ditto.
-       * os_dep.c: Ditto.
-       * mach_dep.c (_setjmp, _longjmp): Redirect to setjmp/longjmp for
-       ArmCC.
-       * mark.c (GC_noop): Define specially for ArmCC.
-       * include/private/gc_priv.h (GC_noop): Ditto.
-       * misc.c (GC_init): Don't test pointers comparison for ArmCC.
-       * misc.c: Don't include unistd.h for ArmCC.
-       * os_dep.c (pages_executable): Rename to GC_pages_executable;
-       make STATIC.
-       * os_dep.c (GC_unix_mmap_get_mem): Don't define for ArmCC.
-       * ptr_chck.c (GC_is_visible): Explicitly cast
-       (GC_DS_PER_OBJECT-GC_INDIR_PER_OBJ_BIAS) to word (to suppress
-       a compiler warning).
-       * include/private/gcconfig.h: Recognize __arm.
-       * include/private/gcconfig.h (HBLKPTR): Define for ArmCC.
-       * include/private/gcconfig.h (HBLKPTR): Add parentheses for
-       "bytes" argument.
-
-2011-04-24  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (GC_get_nprocs): Don't define for Android.
-       * pthread_support.c (GC_dummy_thread_local): Don't test
-       GC_LINUX_THREADS.
-       * include/gc_config_macros.h (GC_ADD_CALLER, GC_RETURN_ADDR):
-       Define for Android.
-
-2011-04-24  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mach_dep.c (NO_GETCONTEXT): Move to gcconfig.h.
-       * os_dep.c (GC_write_fault_handler): Don't include ucontext.h if
-       NO_GETCONTEXT.
-       * include/private/gcconfig.h (GETPAGESIZE): Define as a sysconf
-       call for Android.
-
-2011-04-23  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gc_locks.h (WIN32_LEAN_AND_MEAN, NOSERVICE):
-       Define before including windows.h.
-       * include/private/gc_priv.h (WIN32_LEAN_AND_MEAN, NOSERVICE):
-       Ditto.
-       * include/private/thread_local_alloc.h (WIN32_LEAN_AND_MEAN,
-       NOSERVICE): Ditto.
-       * include/private/gc_priv.h (CLOCKS_PER_SEC): Reformat the
-       comment.
-       * include/private/gc_priv.h (MS_TIME_DIFF): Avoid floating-point
-       arithmetics; add a comment.
-
-2011-04-23  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mark.c (GC_clear_hdr_marks): Don't test USE_MARK_BYTES.
-       * extra/setjmp_t.c (main): Don't test USE_MARK_BITS.
-       * include/private/gc_pmark.h (SET_MARK_BIT_EXIT_IF_SET): Ditto.
-       * include/private/gc_pmark.h (SET_MARK_BIT_EXIT_IF_SET): Remove
-       "mark_byte" local variable.
-       * include/private/gc_pmark.h (OR_WORD_EXIT_IF_SET): Add a comment
-       about that AO_or() is not used by GC unless USE_MARK_BITS
-       explicitly set.
-       * include/private/gc_priv.h (OR_WORD): Ditto.
-       * include/private/gc_pmark.h (INCR_MARKS): Remove trailing ';',
-       add parentheses.
-       * include/private/gc_priv.h (ONES): Define before use by
-       MAKE_COOLER.
-       * include/private/gc_priv.h (MARK_BITS_SZ): Define where used.
-       * include/private/gc_priv.h (OR_WORD): Don't define if
-       USE_MARK_BYTES.
-       * include/private/gcconfig.h (USE_MARK_BYTES); Remove duplicate
-       definition; simplify expression.
-
-2011-04-22  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_maps): Always close the file.
-       * pthread_support.c (GC_get_nprocs): Ditto.
-       * os_dep.c (READ): Define similarly across the file (without
-       parameters).
-       * pthread_support.c (GC_get_nprocs): Use signed int type for "i"
-       and "len" local variables (since read() may return -1).
-       * include/private/gc_pmark.h (LONG_MULT): Add prefix/suffix
-       double underscore; add "volatile" for asm.
-       * include/private/gc_pmark.h (LONG_MULT): Add missing
-       parentheses.
-       * include/private/gc_priv.h (OR_WORD): Ditto.
-       * include/private/gc_priv.h (OR_WORD): Remove unnecessary brackets
-       and ';' symbol.
-
-2011-04-22  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_stack_base): Implement for Android (same as
-       for Linux).
-       * pthread_support.c (GC_get_nprocs): Return 1 (instead of -1) if
-       failed to open "stat" file (not to issue a warning twice); update
-       the comment.
-       * pthread_support.c (GC_thr_init): Call sysconf() on Android to
-       get the number of CPUs.
-
-2011-04-21  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (_GNU_SOURCE): Revert one of the
-       recent patches regarding this macro as the macro should be set
-       (to 1) before including any other system header.
-
-2011-04-21  Ivan Maidanski  <ivmai@mail.ru>
-
-       * doc/README.environment (GC_INITIAL_HEAP_SIZE,
-       GC_MAXIMUM_HEAP_SIZE): Update.
-
-2011-04-20  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (GC_parse_mem_size_arg): Allow 'k', 'M', 'G' suffixes in
-       heap size specifier; return 0 if not a valid one.
-       * include/gc_cpp.h: Explicitly define inline one-argument delete
-       operator for Cygwin (as a workaround).
-       * include/gc_cpp.h: Reformat the code.
-       * tests/test_cpp.cc: Ditto.
-       * tests/test_cpp.cc (main): Suppress compiler warnings about
-       "assigned value is unused".
-
-2011-04-19  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (GC_parse_mem_size_arg): New function.
-       * misc.c (GC_init): Use GC_parse_mem_size_arg().
-       * pthread_stop_world.c (tkill): Declare for Android.
-
-2011-04-19  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (_GNU_SOURCE): Include features.h
-       first (except for NaCl) and then define the macro to 1 if not yet.
-
-2011-04-18  Ivan Maidanski  <ivmai@mail.ru> (really Ludovic Courtes)
-
-       * tests/tests.am (TESTS, check_PROGRAMS): Add
-       'initsecondarythread'.
-       * tests/tests.am (initsecondarythread_SOURCES,
-       initsecondarythread_LDADD): New variable.
-       * Makefile.in: Regenerate.
-       * configure: Ditto.
-
-2011-04-18  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_store_debug_info_inner): Always define; add
-       "const" to its string argument.
-       * dbg_mlc.c (GC_store_debug_info): Call GC_store_debug_info_inner.
-       * dbg_mlc.c (GC_debug_free): Set GC_have_errors in case of
-       smashed or previously deallocated found.
-       * dbg_mlc.c (GC_check_heap_block): Replace while loop with a for
-       one.
-       * reclaim.c (GC_reclaim_check): Ditto.
-       * dbg_mlc.c (GC_check_heap_proc): Remove redundant cast to word.
-       * os_dep.c (GC_get_stack_base): Don't initialize
-       stackbase_main_self/ss_sp on Solaris if thr_main() is zero (thus
-       calling GC_INIT() from a non-primordial thread is possible now).
-       * reclaim.c (GC_add_leaked): Turn into an inline one.
-       * reclaim.c (GC_reclaim_small_nonempty_block):
-       Change report_if_found type from int/word to boolean.
-       * include/private/gc_priv.h (GC_start_reclaim): Ditto.
-       * include/private/gc_priv.h (set_mark_bit_from_hdr,
-       clear_mark_bit_from_hdr): Place closing parenthesis properly;
-       reformat the code.
-
-2011-04-16  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_main_stack_base): Try to use
-       pthread_attr_getstack first for Linux if THREADS.
-       * doc/README.macros (USE_GET_STACKBASE_FOR_MAIN): Adjust text
-       alignment.
-
-2011-04-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_generate_random_backtrace_no_gc): Fix a message
-       typo.
-       * dbg_mlc.c (GC_debug_malloc): Add a comment (about zero size).
-       * dbg_mlc.c (GC_debug_generic_malloc_inner): Reformat the comment.
-       * dbg_mlc.c (GC_strdup): Call GC_err_printf instead of WARN (in
-       case of NULL argument).
-       * dbg_mlc.c (GC_free): In case of NULL argument, just return
-       (without any warning printed); eliminate "uncollectable" local
-       variable.
-
-2011-04-13  Ivan Maidanski  <ivmai@mail.ru> (mostly really Rainer Orth)
-
-       * configure.ac (THREADDLLIBS): Use alternate thread library on
-       Solaris 8.
-       * configure.ac (need_atomic_ops_asm): Set to true only for Sparc
-       Solaris.
-       * configure.ac: Don't use libdl on mips-sgi-irix6.
-       * configure: Regenerate.
-
-2011-04-11  Ivan Maidanski  <ivmai@mail.ru> (really Jie Liu)
-
-       * mach_dep.c (NO_GETCONTEXT); Define for RTEMS.
-       * mach_dep.c (GC_with_callee_saves_pushed): Don't call
-       __builtin_unwind_init() for RTEMS; use setjmp() without the
-       leading underscore (for RTEMS).
-       * tests/test.c (BIG): Use smaller value for RTEMS.
-       * tests/test.c (main): Customize for RTEMS.
-
-2011-04-11  Ivan Maidanski  <ivmai@mail.ru> (mostly really Jim Meyering)
-
-       * configure.host: Remove doubled words in comments.
-       * os_dep.c: Ditto.
-       * doc/README: Ditto.
-       * extra/setjmp_t.c: Ditto.
-       * tests/huge_test.c: Ditto.
-       * extra/setjmp_t.c (getpagesize, nested_sp, main, g): Replace the
-       K&R-style function definition with the ANSI C one.
-       * extra/setjmp_t.c: Expand all tabs to spaces.
-       * extra/setjmp_t.c (nested_sp): Implement in the same way as
-       GC_approx_sp.
-
-2011-04-10  Ivan Maidanski  <ivmai@mail.ru> (really Iain Sandoe, Mike Stump)
-
-       * dyn_load.c (GC_dyld_sections): Add more sctions.
-       * dyn_load.c (GC_dyld_add_sect_fmts): New static varaible.
-       * dyn_load.c (L2_MAX_OFILE_ALIGNMENT): New macro.
-       * dyn_load.c (GC_dyld_image_add, GC_dyld_image_remove): Improve
-       logging; add support for on-demand sections.
-       * dyn_load.c (GC_dyld_image_add, GC_dyld_image_remove): Reformat
-       the code.
-
-2011-04-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * gcj_mlc.c (GC_gcj_malloc_initialized): Use STATIC unless
-       GC_ASSERTIONS.
-       * include/private/gc_priv.h (GC_gcj_malloc_initialized): Don't
-       declare (as external) unless GC_ASSERTIONS.
-       * os_dep.c (GC_win32_free_heap): Clear GC_heap_bases[] also for
-       Cygwin; add FIXME.
-       * include/private/gcconfig.h: Include <sys/unistd.h> for RTEMS.
-       * include/private/gcconfig.h: Add "#error" for every "-->" mark.
-       * include/private/gcconfig.h (CLEAR_DOUBLE): Turn the code into
-       an expression.
-       * include/private/pthread_support.h (SUSPENDED_EXT): Add new flag
-       (which existed previously as SUSPENDED and still exists in GCJ).
-       * include/private/pthread_support.h (DISABLED_GC): Change the
-       value (as it is already used by SUSPENDED_EXT).
-
-2011-04-10  Ivan Maidanski  <ivmai@mail.ru> (mostly really Iain Sandoe)
-
-       * tests/test.c (reverse_test):  Modify count (BIG) for
-       ppc64-darwin.
-
-2011-04-09  Ivan Maidanski  <ivmai@mail.ru>
-
-       * reclaim.c (GC_print_all_errors): Recognize new GC_ABORT_ON_LEAK
-       macro and environment variable; abort if any error has been
-       printed provided the environment variable (or macro) is set.
-       * doc/README.environment (GC_ABORT_ON_LEAK): Document.
-       * doc/README.macros (GC_ABORT_ON_LEAK): Ditto.
-       * doc/README.macros (FIND_LEAK, SUNOS5SIGS, PCR,
-       USE_COMPILER_TLS): Reformat the text.
-
-2011-04-09  Ivan Maidanski  <ivmai@mail.ru> (really Jie Liu)
-
-       * os_dep.c (GC_unix_sbrk_get_mem, GC_unix_get_mem): Don't define
-       for RTEMS.
-       * include/private/gcconfig.h (RTEMS): Add support for.
-       * include/private/gcconfig.h (GET_MEM): Use calloc() for RTEMS.
-
-2011-04-09  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mallocx.c (GC_malloc_uncollectable): Move to malloc.c (since
-       it is used internally in some places).
-
-2011-04-09  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_register_finalizer_no_order): Remove redundant
-       declaration.
-       * dbg_mlc.c (GC_debug_malloc_replacement,
-       GC_debug_realloc_replacement): Rename RA to GC_DBG_RA.
-       * malloc.c (GC_debug_malloc_replacement): Ditto.
-       * mallocx.c (GC_debug_realloc_replacement): Ditto.
-       * dbg_mlc.c (GC_store_debug_info): Move proto from dbg_mlc.h.
-       * malloc.c (GC_strdup, GC_strndup, GC_wcsdup): Move to mallocx.c.
-       * malloc.c: Include errno.h only REDIRECT_MALLOC; remove redundant
-       includes of string.h.
-       * mallocx.c: Include string.h (for GC_strdup).
-       * include/private/dbg_mlc.h (GC_store_debug_info): Move declaration
-       to dbg_mlc.c.
-       * include/private/gc_locks.h (UNCOND_LOCK, UNCOND_UNLOCK): Remove
-       redundant trailing ';'.
-       * include/private/gc_priv.h (START_WORLD, COND_DUMP): Ditto.
-       * include/private/gc_locks.h (LOCK, UNLOCK): Place opening '{'
-       properly.
-       * include/private/gc_priv.h (GC_DBG_RA): Move from dbg_mlc.c,
-       malloc.c, mallocx.c.
-
-2011-04-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c (GC_check_heap, GC_print_all_smashed): Move the
-       definition from misc.c.
-       * dbg_mlc.c (GC_debug_malloc_atomic_uncollectable): Define as
-       public.
-       * include/gc.h (GC_debug_malloc_atomic_uncollectable): Declare.
-       * include/gc.h (GC_MALLOC_ATOMIC_UNCOLLECTABLE): Define new public
-       macro.
-       * dbg_mlc.c (MAX_SMASHED): Don't define if already set.
-       * reclaim.c (MAX_LEAKED): Ditto.
-       * dbg_mlc.c (GC_add_smashed): Add FIXME about the concurrent
-       access to the global array.
-       * reclaim.c (GC_add_leaked): Ditto.
-       * misc.c (GC_print_back_height): Set on if GC_PRINT_BACK_HEIGHT
-       (new macro) is defined.
-       * doc/README.macros (GC_PRINT_BACK_HEIGHT): Document.
-       * misc.c (GC_dump_regularly, GC_init): Replace 0/1 for
-       GC_dump_regularly and GC_print_back_height variables with
-       FALSE/TRUE.
-       * reclaim.c (GC_print_all_errors): Refine the comment.
-
-2011-04-04  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/test.c (reverse_test_inner): Undo one of the previous
-       patches which shifts "c" and "d" pointers only if
-       ALL_INTERIOR_POINTERS (since interior pointers are always
-       recognized in stacks).
-
-2011-04-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (GC_stdout, GC_stderr): Move the definition to the place
-       where GC_log is defined (Unix only).
-       * misc.c (GC_init): Recognize "GC_ONLY_LOG_TO_FILE" environment
-       variable and the similar macro; redirect GC_stdout and GC_stderr
-       to GC_log if "GC_LOG_FILE" environment variable is set unless
-       prohibited by GC_ONLY_LOG_TO_FILE (Unix only).
-       * doc/README.environment (GC_ONLY_LOG_TO_FILE): Document.
-       * doc/README.macros (GC_ONLY_LOG_TO_FILE): Ditto.
-
-2011-04-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (GC_stdout, GC_write): Rename GC_stdout to GC_log (Win32
-       only).
-       * misc.c (GC_write): Add for MacOS (and OS/2); change WRITE()
-       accordingly.
-       * misc.c (GC_write): Reformat code (Unix only).
-       * misc.c (GC_printf): Check GC_quiet before va_start().
-
-2011-04-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * allchblk.c (GC_freehblk): Use GC_log_printf instead of GC_printf
-       inside "if (GC_print_stats)" branch.
-       * alloc.c (GC_collect_or_expand): Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries): Ditto.
-       * headers.c (GC_scratch_alloc): Ditto.
-       * os_dep.c (GC_get_maps, GC_remap, PROTECT,
-       GC_write_fault_handler, GC_dirty_init, GC_mprotect_thread): Ditto.
-       * alloc.c (min_bytes_allocd): Use GC_log_printf instead of
-       GC_printf for DEBUG_THREADS output.
-       * darwin_stop_world.c (GC_stack_range_for, GC_suspend_thread_list,
-       GC_stop_world, GC_thread_resume, GC_start_world): Ditto.
-       * pthread_start.c (GC_inner_start_routine): Ditto.
-       * pthread_stop_world.c (GC_suspend_handler, GC_restart_handler,
-       GC_push_all_stacks, GC_suspend_all, GC_stop_world,
-       GC_start_world): Ditto.
-       * pthread_support.c (GC_mark_thread, GC_get_nprocs,
-       GC_start_rtn_prepare_thread, pthread_create): Ditto.
-       * alloc.c (GC_adj_bytes_allocd, GC_maybe_gc, GC_stopped_mark,
-       GC_finish_collection): Reformat code.
-       * pthread_stop_world.c (GC_print_sig_mask): Ditto.
-       * pthread_support.c (GC_thr_init): Ditto.
-       * checksums.c (GC_update_check_page): Use GC_printf() instead of
-       GC_err_printf() for error printing.
-       * checksums.c (GC_check_blocks, GC_check_dirty): Use GC_log_printf
-       instead of GC_printf for logging purposes.
-       * dyn_load.c (sys_errlist, sys_nerr, errno): Move declaration of
-       external variable outside from GC_register_dynamic_libraries.
-       * dyn_load.c (GC_register_dynamic_libraries): Don't use
-       sys_errlist value if errno equals to sys_nerr.
-       * dyn_load.c (GC_register_dynamic_libraries): Use GC_log_printf
-       instead of GC_printf for DL_VERBOSE output.
-       * dyn_load.c (GC_dyld_image_add, GC_dyld_image_remove,
-       GC_init_dyld): Use GC_log_printf instead of GC_printf for
-       DARWIN_DEBUG output.
-       * os_dep.c (catch_exception_raise): Use GC_log_printf
-       instead of GC_printf for DEBUG_EXCEPTION_HANDLING output.
-       * reclaim.c (GC_print_free_list): Move "n" increment out of
-       GC_printf() call.
-
-2011-04-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * win32_threads.c (DEBUG_CYGWIN_THREADS, DEBUG_WIN32_PTHREADS,
-       DEBUG_WIN32_THREADS): Remove.
-       * win32_threads.c (GC_register_my_thread_inner,
-       GC_win32_start_inner): Use GC_log_printf instead of GC_printf
-       inside "if (GC_print_stats)" branch.
-       * win32_threads.c (GC_PTHREAD_PTRVAL): New macro (defined only if
-       GC_PTHREADS).
-       * win32_threads.c (GC_delete_gc_thread, NUMERIC_THREAD_ID,
-       GC_pthread_join, GC_pthread_create): Use GC_PTHREAD_PTRVAL
-       macro.
-       * win32_threads.c (GC_push_stack_for, GC_mark_thread,
-       GC_CreateThread, GC_beginthreadex, GC_pthread_join,
-       GC_pthread_create, GC_pthread_start_inner, GC_thread_exit_proc,
-       GC_mark_thread_local_free_lists): Use GC_log_printf instead of
-       GC_printf for DEBUG_THREADS output.
-       * win32_threads.c (GC_win32_start_inner, GC_CreateThread,
-       GC_beginthreadex, GC_pthread_join, GC_pthread_create,
-       GC_pthread_start_inner, GC_thread_exit_proc): Cast
-       GetCurrentThreadId result to long; don't cast value of pthread_t
-       type to int; adjust printf format specifiers.
-       * doc/README.win32 (DEBUG_WIN32_PTHREADS): Remove obsolete
-       information.
-
-2011-04-03  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/test.c (cons, small_cons, gcj_cons, check_ints,
-       check_uncollectable_ints, print_int_list, check_marks_int_list,
-       fork_a_thread, finalizer, mktree, chktree, alloc8bytes,
-       alloc_small, tree_test, typed_test, check_heap_stats, WinMain,
-       test, main): Remove unnecessary casts of GC_printf calls to void.
-
-2011-04-02  Ivan Maidanski  <ivmai@mail.ru>
-
-       * allchblk.c (GC_print_hblkfreelist): Adjust (make uniform across
-       BDWGC) printed message (adjust letters case, terminating dot and
-       new line symbols).
-       * alloc.c (GC_check_fl_marks): Ditto.
-       * backgraph.c (new_back_edges): Ditto.
-       * checksums.c (GC_check_dirty): Ditto.
-       * darwin_stop_world.c (GC_push_all_stacks,
-       GC_suspend_thread_list): Ditto.
-       * dbg_mlc.c (GC_print_type, GC_debug_free, GC_debug_realloc,
-       store_old): Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries): Ditto.
-       * mark.c (GC_initiate_gc, GC_mark_some, GC_mark_from, GC_push_all,
-       GC_push_selected, GC_push_next_marked_dirty): Ditto.
-       * mark_rts.c (GC_exclude_static_roots_inner): Ditto.
-       * os_dep.c (GC_remap, GC_default_push_other_roots,
-       GC_push_thread_structures, GC_dirty_init, GC_read_dirty,
-       catch_exception_raise_state, catch_exception_raise_state_identity,
-       GC_mprotect_thread_notify, GC_mprotect_thread,
-       catch_exception_raise): Ditto.
-       * pthread_stop_world.c (GC_print_sig_mask, GC_push_all_stacks,
-       GC_stop_world, GC_stop_init): Ditto.
-       * pthread_support.c (GC_thr_init, GC_register_my_thread_inner,
-       GC_start_routine): Ditto.
-       * win32_threads.c (GC_register_my_thread_inner,
-       GC_push_all_stacks, GC_win32_start_inner, GC_pthread_join,
-       GC_pthread_start_inner): Ditto.
-       * alloc.c (GC_expand_hp_inner): Realign the code.
-       * mark.c (GC_mark_from, GC_mark_local, GC_do_parallel_mark):
-       Ditto.
-       * misc.c (GC_init): Ditto.
-       * os_dep.c (GC_dirty_init, GC_read_dirty): Ditto.
-       * include/private/gc_pmark.h (PUSH_CONTENTS_HDR): Ditto.
-       * tests/test.c (run_one_test): Ditto.
-       * misc.c (GC_err_puts): Document.
-       * misc.c (GC_err_write): Remove.
-       * os_dep.c (dump_maps): Ditto.
-       * include/private/gc_priv.h (GC_err_write): Ditto.
-       * os_dep.c (GC_print_address_map): Call GC_err_puts() instead of
-       dump_maps() and GC_err_write().
-       * os_dep.c (GC_read_dirty): Remove redundant brackets.
-
-2011-04-02  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/test.c (reverse_test_inner): Test interior pointer
-       recognition only if ALL_INTERIOR_POINTERS.
-       * tests/test.c (run_one_test): Replace GC_all_interior_pointers
-       with GC_get_all_interior_pointers(); simplify the expression.
-       * tests/test.c (check_heap_stats): Replace GC_bytes_allocd and
-       GC_bytes_allocd_before_gc with GC_get_total_bytes().
-       * tests/test.c (main): Replace GC_gc_no with GC_get_gc_no().
-
-2011-03-27  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_debug_strdup, GC_debug_free): Output a portability
-       warning if the argument is NULL and GC is in leaks detection mode.
-       * dbg_mlc.c (GC_debug_strndup, GC_debug_wcsdup): New public
-       function definition.
-       * malloc.c (GC_strndup, GC_wcsdup, strndup): Ditto.
-       * mallocx.c (GC_posix_memalign): Ditto.
-       * malloc.c (strdup): Fix string size value; rename "len" to "lb".
-       * mallocx.c: Include errno.h unless WinCE (otherwise include
-       windows.h for Win32 error constants).
-       * win32_threads.c: Define WIN32_LEAN_AND_MEAN and NOSERVICE before
-       windows.h inclusion.
-       * misc.c (GC_init): Register at-exit callback if GC_find_leak
-       (even if GC_FIND_LEAK macro is unset).
-       * pthread_stop_world.c (NACL_STORE_REGS,
-       __nacl_suspend_thread_if_needed, GC_nacl_initialize_gc_thread):
-       Use BCOPY() instead of memcpy().
-       * pthread_support.c (GC_init_real_syms): Ditto.
-       * doc/README: Update year in copyright.
-       * include/gc.h: Ditto.
-       * doc/README.macros (GC_DEBUG_REPLACEMENT, GC_REQUIRE_WCSDUP):
-       Document new macro.
-       * doc/README.macros (REDIRECT_MALLOC): Update documentation.
-       * include/gc.h (GC_strndup, GC_posix_memalign, GC_debug_strndup):
-       New API function prototype.
-       * include/gc.h (GC_MALLOC, GC_REALLOC): Redirect to
-       GC_debug_malloc/realloc_replacement() if GC_DEBUG_REPLACEMENT.
-       * include/gc.h (GC_STRDUP): Remove redundant parentheses.
-       * include/leak_detector.h (realloc, strdup): Ditto.
-       * include/gc.h (GC_STRNDUP): New API macro.
-       * include/gc.h (GC_NEW, GC_NEW_ATOMIC, GC_NEW_STUBBORN,
-       GC_NEW_UNCOLLECTABLE): Add missing parentheses.
-       * include/gc.h (GC_wcsdup, GC_debug_wcsdup): New API function
-       prototype (only if GC_REQUIRE_WCSDUP).
-       * include/gc.h (GC_WCSDUP): New API macro (only if
-       GC_REQUIRE_WCSDUP).
-       * include/leak_detector.h: Add copyright header; add usage
-       comment; include stdlib.h and string.h after gc.h (unless
-       GC_DONT_INCLUDE_STDLIB).
-       * include/leak_detector.h (malloc, calloc, free, realloc):
-       Undefine symbol before its redefinition.
-       * include/leak_detector.h (strndup, memalign, posix_memalign):
-       Redefine to the corresponding GC function.
-       * include/leak_detector.h (wcsdup): Redefine to GC_WCSDUP (only
-       if GC_REQUIRE_WCSDUP).
-       * include/leak_detector.h (CHECK_LEAKS): Add comment; don't define
-       the macro if already defined.
-
-2011-03-22  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (GC_abort): Use _exit() (instead of DebugBreak) on Win32
-       when doing code static analysis (to inform the tool that the
-       function is a no-return one).
-       * os_dep.c (GC_linux_stack_base): Remove a duplicate validation
-       of the length of "stat" file; use signed int type for "i",
-       "buf_offset" and "len" local variables (since read() may
-       return -1).
-
-2011-03-20  Ivan Maidanski  <ivmai@mail.ru>
-
-       * blacklst.c (GC_bl_init_no_interiors): New function (the code
-       moved from GC_bl_init).
-       * blacklst.c (GC_bl_init): Invoke GC_bl_init_no_interiors unless
-       GC_all_interior_pointers mode; remove unnecessarily parameter cast
-       for GC_scratch_alloc call.
-       * include/private/gc_priv.h (GC_bl_init): Move the function
-       declaration to misc.c file.
-       * misc.c (GC_bl_init_no_interiors): Add a prototype.
-       * misc.c (GC_set_all_interior_pointers): Allow values other than 0
-       and 1; allow altering GC_set_all_interior_pointers value even
-       after GC initialization.
-       * obj_map.c (GC_initialize_offsets): Clear GC_valid_offsets and
-       GC_modws_valid_offsets if GC_all_interior_pointers is off.
-       * misc.c (GC_init): Don't call GC_initialize_offsets() unless
-       GC_all_interior_pointers mode.
-
-2011-03-20  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c (GC_finish_collection): Remove redundant brackets;
-       adjust code indentation.
-       * blacklst.c (GC_add_to_black_list_normal): Simplify expression
-       (to improve code readability).
-       * blacklst.c (GC_is_black_listed): Join nested "if" (into a single
-       conditional expression); initialize "nblocks" just before the loop
-       beginning.
-       * misc.c (GC_init): Don't compute initial_heap_sz if GC is already
-       initialized.
-       * include/private/gc_priv.h (GC_initialize_offsets): Move the
-       function declaration to misc.c file.
-       * obj_map.c (GC_initialize_offsets): Remove offsets_initialized
-       static variable since the function is called only once.
-       * tests/middle.c: Include "gc.h" instead of <gc.h>; expand all
-       tabs to spaces; adjust code indentation; replace the K&R-style
-       function definition with the ANSI C one.
-       * tests/smash_test.c: Ditto.
-       * tests/middle.c (main): Use setter for GC_all_interior_pointers;
-       adjust printf format specifier (and cast the value passed to).
-
-2011-03-15  Ivan Maidanski  <ivmai@mail.ru>
-
-       * doc/README.macros (SMALL_CONFIG, LARGE_CONFIG): Refine the
-       documentation.
-       * include/private/gc_hdrs.h (LOG_BOTTOM_SZ): Ignore SMALL_CONFIG
-       if LARGE_CONFIG is defined.
-       * include/private/gc_priv.h (CPP_LOG_HBLKSIZE): Ditto.
-
-2011-03-15  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c (GC_finish_collection): Replace "#else #ifdef" with
-       "#elif".
-       * include/private/gc_priv.h (CPP_LOG_HBLKSIZE, LOG_PHT_ENTRIES,
-       MAX_ROOT_SETS, MAX_HEAP_SECTS): Ditto.
-       * alloc.c (GC_expand_hp_inner): Check for GC_collect_at_heapsize
-       overflow even if not LARGE_CONFIG.
-       * dbg_mlc.c (GC_check_heap_proc): Check "oh" size even if
-       SMALL_CONFIG.
-       * finalize.c (GC_print_finalization_stats): Fix "#endif" comment.
-       * new_hblk.c (GC_build_fl_clear2, GC_build_fl_clear4, GC_build_fl2,
-       GC_build_fl4): Reformat the comment; adjust code indentation.
-       * new_hblk.c (GC_build_fl): Fix indentation.
-       * include/private/gc_hdrs.h: Ditto.
-       * doc/README.environment (GC_LOG_FILE, GC_PRINT_VERBOSE_STATS,
-       GC_FULL_FREQUENCY): Refine the documentation.
-
-2011-03-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * extra/msvc_dbg.c: Test _MSC_VER macro; include "gc.h" (for
-       GC_word); reformat the code; expand all tabs to spaces.
-       * extra/msvc_dbg.c (ULONG_PTR): Replace with GC_ULONG_PTR; define
-       as word.
-
-2011-03-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_get_back_ptr_info, GC_print_obj,
-       GC_print_smashed_obj, GC_debug_free_inner): Add a code for a
-       LINT-like tool to instruct it that the function is invoked only
-       with valid parameters (otherwise a SEGV is ok); recognize LINT2
-       new macro.
-       * misc.c (GC_abort): Instruct a LINT-like tool that the function
-       never returns in fact.
-       * os_dep.c (GC_linux_stack_base): Check for read buffer overflow;
-       close the file immediately after read; use STRTOULL() instead of
-       decoding the address number manually.
-       * include/private/gc_priv.h (EXPECT): Don't specify outcome for a
-       LINT-like tool.
-       * include/private/gc_priv.h (GC_all_interior_pointers): Instruct a
-       LINT-like tool that the value is restricted to zero and one only
-       (required since the variable is global and its value is used as a
-       part of array index expression is some places).
-
-2011-03-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dbg_mlc.c (GC_make_closure): Fix SEGV in case GC_malloc returns
-       NULL.
-       * dbg_mlc.c (GC_debug_register_finalizer,
-       GC_debug_register_finalizer_no_order,
-       GC_debug_register_finalizer_unreachable,
-       GC_debug_register_finalizer_ignore_self): Handle out of memory
-       case properly (similar to GC_register_finalizer_inner).
-       * headers.c (GC_install_header): Handle the case when alloc_hdr()
-       returns NULL.
-       * os_dep.c (GC_get_maps_len): Defend against missing "maps" file.
-       * pthread_support.c (GC_mark_thread): Place a dummy return
-       statement (which uses "id" argument) before the actual use of "id"
-       as an array index (to suppress a warning produced by some static
-       code analysis tools).
-       * win32_threads.c (GC_mark_thread): Ditto.
-       * pthread_support.c (GC_thr_init): Abort (with the appropriate
-       message) if out of memory.
-
-2011-03-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * finalize.c (GC_register_finalizer_inner): Fix a typo in a
-       comment.
-       *include/private/gcconfig.h (STACKBOTTOM): Ditto.
-       * gcj_mlc.c (GC_core_gcj_malloc): Replace 0/1 with TRUE/FALSE in
-       EXPECT (the 2nd argument).
-       * malloc.c (GC_core_malloc_atomic, GC_core_malloc, GC_free):
-       Ditto.
-       * mark.c (GC_mark_and_push, GC_mark_and_push_stack): Ditto.
-       * thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Ditto.
-       * include/private/gc_hdrs.h (HC_GET_HDR): Ditto.
-       * include/private/gc_priv.h (SMALL_OBJ): Ditto.
-       * include/private/specific.h (getspecific): Ditto.
-       * pthread_support.c (LOCK_STATS): Add a comment.
-
-2011-03-08  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/gc_pthread_redirects.h (GC_NO_DLOPEN,
-       GC_NO_PTHREAD_SIGMASK, GC_PTHREAD_CREATE_CONST,
-       GC_PTHREAD_EXIT_ATTRIBUTE, GC_NO_PTHREAD_CANCEL): Move the
-       definition to gc_config_macros.
-
-2011-03-08  Ivan Maidanski  <ivmai@mail.ru>
-
-       * pthread_support.c (pthread_cancel, GC_pthread_cancel_t,
-       GC_pthread_cancel): Test GC_NO_PTHREAD_CANCEL (instead of NACL and
-       GC_PTHREAD_EXIT_ATTRIBUTE).
-       * include/gc_pthread_redirects.h (GC_pthread_cancel,
-       pthread_cancel): Ditto.
-       * pthread_support.c (GC_pthread_create, GC_pthread_sigmask,
-       GC_pthread_join, GC_pthread_detach, GC_pthread_cancel): Realign
-       code.
-       * include/gc_pthread_redirects.h (GC_PTHREAD_EXIT_ATTRIBUTE):
-       Define as empty for NaCl.
-       * include/gc_pthread_redirects.h (GC_NO_PTHREAD_CANCEL): New macro
-       defined.
-
-2011-03-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dyn_load.c (GC_init_dyld): Do not invoke
-       _dyld_bind_fully_image_containing_address() if GC_no_dls (as it is
-       not required to register the main data segment in that case).
-       * include/gc.h (GC_no_dls): Adjust the comment.
-
-2011-03-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dyn_load.c (GC_MUST_RESTORE_REDEFINED_DLOPEN): Test
-       GC_NO_DLOPEN.
-       * gc_dlopen.c: Ditto.
-       * include/gc_pthread_redirects.h (GC_dlopen, dlopen): Ditto.
-       * gc_dlopen.c: Don't include dlfcn.h (as it is included in
-       gc_pthread_redirects.h).
-       * pthread_support.c (pthread_sigmask, GC_pthread_sigmask_t,
-       GC_pthread_sigmask): Test GC_NO_PTHREAD_SIGMASK (instead of
-       GC_DARWIN_THREADS, GC_OPENBSD_THREADS and NACL).
-       * include/gc_pthread_redirects.h (GC_pthread_sigmask,
-       pthread_sigmask): Ditto.
-       * win32_threads.c (pthread_sigmask, GC_pthread_sigmask): Test
-       GC_NO_PTHREAD_SIGMASK (instead of GC_WIN32_PTHREADS); reformat the
-       comment.
-       * pthread_support.c (pthread_create, GC_pthread_create_t,
-       GC_pthread_create): Rename GC_PTHREAD_CONST to
-       GC_PTHREAD_CREATE_CONST.
-       * win32_threads.c (GC_pthread_create): Ditto.
-       * include/gc_pthread_redirects.h: Ditto.
-       * include/gc_pthread_redirects.h (GC_NO_DLOPEN,
-       GC_NO_PTHREAD_SIGMASK): New macro defined.
-       * include/gc_pthread_redirects.h (GC_PTHREAD_CREATE_CONST): Set to
-       empty for NaCl.
-       * include/gc_pthread_redirects.h (GC_PTHREAD_EXIT_ATTRIBUTE): Do
-       not define for Android (as CANCEL_SAFE is not defined).
-
-2011-03-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/gc.h (GC_ADD_CALLER, GC_RETURN_ADDR,
-       GC_HAVE_BUILTIN_BACKTRACE, GC_CAN_SAVE_CALL_STACKS): Move
-       definition to gc_config_macros.h file.
-       * include/gc_config_macros.h: Check the file is included from gc.h
-       file.
-       * include/gc_version.h: Ditto.
-       * include/gc_config_macros.h: Reformat comments.
-       * include/gc_version.h: Reformat code.
-
-2011-02-20  Ivan Maidanski  <ivmai@mail.ru> (mostly really Elijah Taylor)
-
-       * gc_dlopen.c: Empty unit for NaCl.
-       * os_dep.c: Include fcntl.h for NaCl.
-       * os_dep.c (GC_get_main_stack_base): Ignore
-       USE_GET_STACKBASE_FOR_MAIN macro for NaCl.
-       * os_dep.c (GC_get_stack_base): Return GC_UNIMPLEMENTED for NaCl.
-       * os_dep.c (GC_remap): Use mmap (instead of mprotect) for NaCl.
-       * pthread_start.c (GC_inner_start_routine): Don't invoke
-       pthread_cleanup_push/pop for NaCl.
-       * pthread_stop_world.c (GC_nacl_num_gc_threads,
-       GC_nacl_thread_idx, GC_nacl_park_threads_now,
-       GC_nacl_thread_parker, GC_nacl_gc_thread_self,
-       GC_nacl_thread_parked, GC_nacl_thread_used,
-       GC_nacl_thread_parking_inited, GC_nacl_thread_alloc_lock): New
-       variable (fo NaCl only).
-       * pthread_stop_world.c (GC_suspend_handler): Reformat the code.
-       * pthread_stop_world.c (GC_remove_allowed_signals,
-       suspend_handler_mask, GC_stop_count, GC_world_is_stopped,
-       GC_retry_signals, SIG_THR_RESTART, GC_suspend_ack_sem,
-       GC_restart_ack_sem, GC_suspend_handler_inner, GC_suspend_handler,
-       GC_restart_handler): Don't define for NaCl.
-       * pthread_support.c (GC_get_nprocs): Ditto.
-       * include/private/gc_priv.h (SIG_SUSPEND): Ditto.
-       * include/private/gcconfig.h (LINUX): Ditto.
-       * pthread_stop_world.c (GC_push_all_stacks): Push register storage
-       for NaCl.
-       * pthread_stop_world.c (GC_suspend_all, GC_stop_world,
-       GC_start_world): Implement for NaCl.
-       * pthread_stop_world.c (GC_stop_world): Don't define unused "i"
-       local variable for OpenBSD (and NaCl).
-       * pthread_stop_world.c (NACL_STORE_REGS): New macro definition for
-       NaCl.
-       * pthread_stop_world.c (nacl_pre_syscall_hook,
-       __nacl_suspend_thread_if_needed, nacl_post_syscall_hook,
-       GC_nacl_initialize_gc_thread, GC_nacl_shutdown_gc_thread): New
-       function (for NaCl only).
-       * pthread_stop_world.c (GC_stop_init): Empty for NaCl.
-       * pthread_support.c (pthread_cancel, pthread_sigmask): Don't
-       redirect for NaCl.
-       * include/gc_pthread_redirects.h (pthread_cancel,
-       pthread_sigmask): Ditto.
-       * pthread_support.c (GC_nacl_initialize_gc_thread,
-       GC_nacl_shutdown_gc_thread): New internal prototype (NaCl only).
-       * pthread_support.c (GC_new_thread, GC_delete_thread): Initialize
-       and shutdown thread for NaCl.
-       * pthread_support.c (GC_thr_init): Call sysconf for NaCl.
-       * pthread_support.c (GC_pthread_exit): Call GC_thread_exit_proc
-       for NaCl.
-       * include/gc.h: Don't include features.h for NaCl.
-       * include/gc_pthread_redirects.h (GC_PTHREAD_CONST): New macro.
-       * include/gc_pthread_redirects.h (GC_pthread_create): Use
-       GC_PTHREAD_CONST instead of const.
-       * win32_threads.c (GC_pthread_create): Ditto.
-       * pthread_support.c (GC_pthread_create_t, GC_pthread_create,
-       pthread_create): Ditto.
-       * include/private/gcconfig.h (NACL): Recognize NaCl.
-       * include/private/gcconfig.h (GC_LINUX_THREADS): Valid for NaCl.
-       * include/private/pthread_stop_world.h (thread_stop_info): Add
-       reg_storage member; define NACL_GC_REG_STORAGE_SIZE macro (for
-       NaCl only).
-       * include/private/pthread_support.h (GC_nacl_gc_thread_self):
-       Declare internal variable (for NaCl only).
-
-2011-02-19  Ivan Maidanski  <ivmai@mail.ru>
-
-       * aclocal.m4: Regenerate (by autoreconf -vif using autoconf-2.68,
-       automake-1.11.1 and libtool-2.4).
-       * configure: Ditto.
-       * ltmain.sh: Ditto.
-       * makefile.in: Ditto.
-       * m4/libtool.m4: Ditto.
-       * m4/ltversion.m4: Ditto.
-       * mach_dep.c (GC_with_callee_saves_pushed): Fix FE_ALL_EXCEPT
-       macro.
-
-2011-02-13  Ivan Maidanski  <ivmai@mail.ru>
-
-       * mark.c (GC_mark_some): Prefix and suffix "asm" and "volatile"
-       keywords with double underscore.
-       * os_dep.c (GC_unix_get_mem): Reformat the code.
-       * os_dep.c (catch_exception_raise, catch_exception_raise_state,
-       catch_exception_raise_state_identity): Add GC_API_OSCALL to
-       function definition.
-       * os_dep.c (catch_exception_raise_state,
-       catch_exception_raise_state_identity): Move definition to be
-       before GC_ports.
-       * os_dep.c (catch_exception_raise): Declare to have the symbol
-       defined before GC_ports.
-       * os_dep.c (GC_ports): Store references to catch_exception_raise,
-       catch_exception_raise_state, catch_exception_raise_state_identity
-       (to prevent stripping these symbols as dead).
-       * os_dep.c (catch_exception_raise, catch_exception_raise_state,
-       catch_exception_raise_state_identity): Mark these symbols as
-       "referenced dynamically" via an assembler directive (unless
-       NO_DESC_CATCH_EXCEPTION_RAISE).
-       * include/private/gc_priv.h (GC_API_OSCALL): New macro (defined
-       similar to GC_API but as if GC_DLL is always defined).
-
-2011-02-10  Ivan Maidanski  <ivmai@mail.ru> (with input from Dimitry Andric)
-
-       * os_dep.c: Don't include signal.h for GC_write_fault_handler on
-       Win32.
-       * os_dep.c (SIG_OK): Don't return true unless SIGSEGV or SIGBUS on
-       FreeBSD.
-       * os_dep.c (CODE_OK): Use SEGV_ACCERR on FreeBSD (define
-       SEGV_ACCERR for older FreeBSD releases).
-       * os_dep.c (SIG_OK, CODE_OK, GC_write_fault_handler): Reformat the
-       code.
-
-2011-02-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * dyn_load.c (GC_register_map_entries,
-       GC_register_dynamic_libraries_dl_iterate_phdr): Calculate
-       DATASTART only once if DATASTART_IS_FUNC.
-       * dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr):
-       Calculate DATAEND only once if DATAEND_IS_FUNC.
-       * dyn_load.c: Add comment to some endif; realign some code.
-       * dyn_load.c (GC_init_dyld): Don't use
-       _dyld_bind_fully_image_containing_address if
-       NO_DYLD_BIND_FULLY_IMAGE defined; add FIXME.
-       * include/private/gcconfig.h (GC_data_start, GC_find_limit):
-       Declare if used by DATASTART/DATAEND, respectively.
-       * include/private/gcconfig.h (DATASTART_IS_FUNC, DATAEND_IS_FUNC):
-       Define if DATASTART/DATAEND is a function, respectively.
-       * include/private/gcconfig.h (GETPAGESIZE, NO_PTHREAD_TRYLOCK,
-       NO_DYLD_BIND_FULLY_IMAGE): Define for Darwin/arm as well; include
-       unistd.h.
-
-2011-02-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * os_dep.c (GC_setpagesize, GC_task_self, PROTECT, UNPROTECT):
-       Reorder to remove redundant ifdef for Win32.
-       * os_dep.c: Add comment to some endif.
-       * os_dep.c: Include pthread.h (for Linux even if single-threaded)
-       if USE_GET_STACKBASE_FOR_MAIN; also include it for Darwin.
-       * os_dep.c (STACKBOTTOM): Redefine for Darwin (unless prohibited
-       for some reason).
-       * os_dep.c (GC_get_main_stack_base): Allow
-       USE_GET_STACKBASE_FOR_MAIN for Linux even if single-threaded; add
-       assertion for the returned result.
-       * os_dep.c (GC_get_stack_base): Define for Darwin if
-       multi-threaded.
-       * os_dep.c (GC_page_was_dirty): Reformat the code.
-       * os_dep.c: Reformat some comments.
-       * os_dep.c (SIG_OK, CODE_OK): Add comment (for FreeBSD).
-       * os_dep.c (ID_STOP, ID_RESUME): Define only if threads.
-       * os_dep.c (catch_exception_raise): Remove redundant parentheses;
-       refine the documentation.
-
-2011-02-10  Ivan Maidanski  <ivmai@mail.ru>
-
-       * NT_MAKEFILE: Define _CRT_SECURE_NO_DEPRECATE for C++ files as
-       well.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * doc/README.macros (USE_GET_STACKBASE_FOR_MAIN): Refine.
-       * include/gc.h (GC_INIT): Document.
-       * include/private/gc_priv.h (GC_MACH_HEADER, GC_MACH_SECTION,
-       GC_GETSECTBYNAME): Define depending only on the word size (i.e.,
-       define these macros also for ARM).
-       * tests/test.c (check_heap_stats): Print main thread stack bottom
-       as well (only if verbose mode is on).
-
-2011-02-09  Ivan Maidanski  <ivmai@mail.ru> (mostly Jean-Claude Beaudoin)
-
-       * mach_dep.c (GC_with_callee_saves_pushed): Fix and improve code
-       introduced by the previous patch (if GETCONTEXT_FPU_EXCMASK_BUG
-       and X86_64).
-
-2011-01-22  Ivan Maidanski  <ivmai@mail.ru> (mostly Jean-Claude Beaudoin)
-
-       * darwin_stop_world.c (GC_FindTopOfStack): Prefix and suffix
-       "volatile" keyword with double underscore.
-       * mach_dep.c (GETCONTEXT_FPU_EXCMASK_BUG): Recognize new macro and
-       include fenv.h if defined (unless NO_GETCONTEXT or HAVE_PUSH_REGS).
-       * mach_dep.c (GC_with_callee_saves_pushed): Restore FPU exception
-       mask corrupted by getcontext if GETCONTEXT_FPU_EXCMASK_BUG.
-       * include/private/gcconfig.h (GETCONTEXT_FPU_EXCMASK_BUG): Define
-       for Linux/amd64 (since its GLibc getcontext currently has the bug).
-
-2011-01-17  Ivan Maidanski  <ivmai@mail.ru>
-
-       * allchblk.c (GC_use_entire_heap): Change type to int (as declared
-       in gc.h); set the default value depending on new GC_USE_ENTIRE_HEAP
-       macro.
-       * misc.c (GC_init): Test GC_USE_ENTIRE_HEAP environment variable to
-       alter the default value of GC_use_entire_heap.
-       * doc/README.environment (GC_USE_ENTIRE_HEAP): Document.
-       * doc/README.macros (GC_USE_ENTIRE_HEAP): Ditto.
-
-2011-01-12  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gcconfig.h (PARALLEL_MARK): Do not make it cause
-       MPROTECT_VDB undefining.
-
-2011-01-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * gc_dlopen.c: Reformat the comments and adjust code indentation.
-       * include/private/gcconfig.h (DYNAMIC_LOADING): Fix filename in
-       the comment.
-
-2011-01-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (THREAD_FLD, MAX_HEAP_SECTS,
-       _GC_arrays, GC_push_all_stack_sections, PRINT_BLACK_LIST,
-       GC_add_to_black_list_stack, GC_ASSERT, SIG_SUSPEND,
-       NEED_FIND_LIMIT): Reformat the code and comments for.
-       * include/private/gc_priv.h (_GC_arrays): Move the conditional
-       macro definitions (shortcuts for GC_arrays members) into the
-       structure body.
-
-2011-01-07  Ivan Maidanski  <ivmai@mail.ru>
-
-       * .cvsignore: Add more auto-generated files.
-       * include/private/.cvsignore: Ditto.
-       * darwin_stop_world.c (GC_mach_handler_thread,
-       GC_use_mach_handler_thread,
-       GC_darwin_register_mach_handler_thread): Define only if
-       MPROTECT_VDB.
-       * darwin_stop_world.c (GC_suspend_thread_list): Use
-       GC_mach_handler_thread and GC_use_mach_handler_thread only if
-       MPROTECT_VDB.
-       * darwin_stop_world.c (GC_stop_world): Reset GC_mach_threads_count
-       only if defined (i.e. unless GC_NO_THREADS_DISCOVERY).
-       * misc.c (GC_init): Fix comment for GWW_VDB.
-       * os_dep.c (GC_mprotect_state_t): Reformat the code.
-       * os_dep.c (DARWIN_EXC_STATE, DARWIN_EXC_STATE_COUNT,
-       DARWIN_EXC_STATE_T, DARWIN_EXC_STATE_DAR): New macros.
-       * os_dep.c (catch_exception_raise): Use DARWIN_EXC_STATE,
-       DARWIN_EXC_STATE_COUNT, DARWIN_EXC_STATE_T, DARWIN_EXC_STATE_DAR;
-       reformat the comment.
-       * pthread_support.c (GC_thr_init): Define "dummy" local variable
-       only unless GC_DARWIN_THREADS; reformat the code.
-       * include/private/gcconfig.h (MPROTECT_VDB): Define for Darwin
-       even in the single-threaded mode; define for iPhone/iPad.
-       * include/private/gcconfig.h (IA64): Remove unnecessary "ifdef"
-       around "undef".
-       * include/private/gcconfig.h (HEURISTIC1): Remove unused for
-       Cygwin.
-       * include/private/gcconfig.h (STACKBOTTOM): Use fixed address for
-       Darwin/arm (instead of HEURISTIC1).
-       * include/private/gcconfig.h (GET_MEM): Reformat the code.
-
-2011-01-05  Ivan Maidanski  <ivmai@mail.ru>
-
-       * misc.c (GC_write): Replace multiple "ifdef/endif" with "elif"
-       (for ECOS and NOSYS).
-       * os_dep.c (GC_get_main_stack_base): Ditto.
-       * os_dep.c (GC_get_main_stack_base): Check
-       USE_GET_STACKBASE_FOR_MAIN macro before checking STACKBOTTOM one;
-       remove "dummy" variable (use result one instead); reformat the
-       code.
-       * doc/README.macros (SN_TARGET_PS3): Document.
-       * extra/threadlibs.c (main): Don't output "-lpthread" (and "-ldl")
-       for Android.
-       * include/private/pthread_support.h: Fix comment for "endif".
-
-2010-12-26  Ivan Maidanski  <ivmai@mail.ru> (mostly really Miguel de Icaza)
-
-       * misc.c (GC_allocate_ml): Define global variable if SN_TARGET_PS3.
-       * misc.c (GC_init): Initialize GC_allocate_ml if SN_TARGET_PS3.
-       * os_dep.c (SIGSEGV): Define to dummy zero if SN_TARGET_PS3.
-       * os_dep.c (GC_unix_mmap_get_mem): Don't define if SN_TARGET_PS3.
-       * os_dep.c (GC_default_push_other_roots,
-       GC_push_thread_structures): Define for SN_TARGET_PS3.
-       * include/private/gc_locks.h (GC_allocate_ml, LOCK, UNLOCK): Define
-       for SN_TARGET_PS3.
-       * include/private/gcconfig.h (SN_TARGET_PS3): Recognize new macro
-       (Sony PS/3 target).
-       * include/private/gcconfig.h (THREADS): Define unconditionally if
-       SN_TARGET_PS3.
-       * include/private/gcconfig.h (GET_MEM): Define for SN_TARGET_PS3.
-
-2010-12-26  Ivan Maidanski  <ivmai@mail.ru>
-
-       * alloc.c (GC_collect_or_expand): Replace NIL with NULL in message.
-       * dbg_mlc.c (GC_debug_malloc, GC_debug_malloc_ignore_off_page,
-       GC_debug_malloc_atomic_ignore_off_page,
-       GC_debug_generic_malloc_inner,
-       GC_generic_malloc_inner_ignore_off_page, GC_debug_malloc_stubborn,
-       GC_debug_malloc_atomic, GC_debug_malloc_uncollectable,
-       GC_debug_malloc_atomic_uncollectable): Ditto.
-       * gcj_mlc.c (GC_debug_gcj_malloc): Ditto.
-       * dbg_mlc.c (GC_check_annotated_obj): Replace NIL with NULL in a
-       comment.
-       * dyn_load.c (GC_FirstDLOpenedLinkMap): Ditto.
-       * mark_rts.c (GC_roots_present): Ditto.
-       * doc/README: Ditto.
-       * include/private/gc_hdrs.h (IS_FORWARDING_ADDR_OR_NIL): Ditto.
-       * include/private/gc_priv.h (_GC_arrays): Ditto.
-
-2010-12-26  Ivan Maidanski  <ivmai@mail.ru> (mostly really Geoff Norton
-                                             and Jonathan Pryor)
-
-       * configure.ac: Use AC_CHECK_LIB() to check for pthread instead of
-       just blindly linking to -lpthread, as Android includes pthread
-       support within libc and does not provide a separate libpthread.
-       * dyn_load.c (GC_register_dynamic_libraries): Skip current link map
-       entry if l_addr is NULL (Android/bionic only).
-       * pthread_stop_world.c (android_thread_kill): New internal function
-       (Android only).
-       * pthread_stop_world.c (GC_suspend_all, GC_start_world): Call
-       android_thread_kill (based on tkill) instead of pthread_kill on
-       Android (since pthread_kill cannot be used safely on the platform).
-       * pthread_support.c (GC_new_thread): Store thread Id (obtained from
-       gettid) for use by android_thread_kill (Android only).
-       * include/private/pthread_support.h (GC_Thread_Rep): Add kernel_id
-       structure member (Android only).
-       * include/private/gcconfig.h: Recognize __x86_64 macro as a synonym
-       of __x86_64__ (Darwin); define __environ macro (Android on M68K).
-       * configure: Regenerate.
-
-2010-12-02  Ivan Maidanski  <ivmai@mail.ru>
-
-       * allchblk.c (GC_freehblk): Print extended error message (done via
-       GC_printf() before aborting with a short message) only if
-       GC_print_stats.
-       * dyn_load.c (GC_register_dynamic_libraries): Ditto.
-       * os_dep.c (GC_get_maps, GC_register_data_segments, GC_remap,
-       PROTECT, GC_write_fault_handler, GC_mprotect_thread): Ditto.
-       * pthread_stop_world.c (GC_start_world): Ditto.
-       * win32_threads.c (GC_register_my_thread_inner): Ditto.
-       * os_dep.c (GC_get_main_stack_base, GC_register_data_segments,
-       GC_dirty_init): Remove redundant print of an error message before
-       aborting with the same message.
-       * os_dep.c (GC_register_data_segments): Remove format specifier
-       from the string passed to GC_err_puts(); use ABORT instead of EXIT
-       (if invalid executable type).
-       * os_dep.c (GC_remap): Adjust printf format specifier (for long
-       type).
-       * os_dep.c (GC_dirty_init): Print a message about SIG_IGN detected
-       (for SIGSEGV/BUS) only if GC_print_stats.
-       * os_dep.c (catch_exception_raise): Join 2 adjacent GC_err_printf
-       calls.
-
-2010-11-25  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/test.c (main): Print the relevant message if GWW_VDB.
-       * include/private/gcconfig.h: Don't define MPROTECT_VDB for Win32
-       on x64 if compiled by GCC.
-
-2010-11-04  Ivan Maidanski  <ivmai@mail.ru>
-
-       * tests/staticrootstest.c: Include string.h for memset() prototype.
-       * tests/thread_leak_test.c (main): Fix printf() format specifiers.
-
-2010-10-22  Ivan Maidanski <ivmai@mail.ru>
-
-       * CMakeLists.txt: Check enable_parallel_mark on Darwin.
-       * configure.ac: Ditto.
-       * darwin_stop_world.c (DARWIN_SUSPEND_GC_THREADS,
-       DARWIN_QUERY_TASK_THREADS): Rename to GC_NO_THREADS_DISCOVERY and
-       GC_DISCOVER_TASK_THREADS, respectively.
-       * os_dep.c (DARWIN_SUSPEND_GC_THREADS): Ditto.
-       * pthread_support.c (DARWIN_SUSPEND_GC_THREADS): Ditto.
-       * darwin_stop_world.c (DARWIN_QUERY_TASK_THREADS): Don't define
-       (and remove FIXME).
-       * darwin_stop_world.c (GC_use_threads_discovery): Add GC_API;
-       comment; remove FIXME.
-       * win32_threads.c (GC_NO_DLLMAIN): Rename to
-       GC_NO_THREADS_DISCOVERY.
-       * tests/test.c (GC_NO_DLLMAIN): Ditto.
-       * doc/README.macros (GC_NO_DLLMAIN): Ditto.
-       * doc/README.win32 (GC_NO_DLLMAIN): Ditto.
-       * doc/README.macros (GC_NO_THREADS_DISCOVERY): Update the comment.
-       * win32_threads.c (GC_win32_dll_threads): Define as macro to true
-       if GC_DISCOVER_TASK_THREADS (and not GC_NO_THREADS_DISCOVERY);
-       update the comment.
-       * win32_threads.c (GC_use_DllMain): Rename to
-       GC_use_threads_discovery; do not set GC_win32_dll_threads if
-       GC_DISCOVER_TASK_THREADS.
-       * win32_threads.c (GC_started_thread_while_stopped,
-       GC_lookup_thread_inner, UNPROTECT_THREAD, GC_lookup_pthread,
-       GC_thr_init, GC_pthread_create, DllMain): Rewrite some expressions
-       which use GC_win32_dll_threads to minimize the possibility of
-       an "unreachable code" compiler warning when GC_win32_dll_threads
-       is defined as a macro.
-       * win32_threads.c (GC_unregister_my_thread): Don't call
-       GC_delete_thread() if GC_win32_dll_threads and THREAD_LOCAL_ALLOC
-       (since can't happen); use "t" local variable only if not
-       GC_win32_dll_threads.
-       * win32_threads.c (GC_register_my_thread_inner): Reformat the
-       comment.
-       * doc/README.macros (GC_DISCOVER_TASK_THREADS): Document.
-       * include/gc.h (GC_use_DllMain): Rename to
-       GC_use_threads_discovery but keep old name as a macro definition.
-       * include/gc.h (GC_use_threads_discovery): Declare also for
-       Darwin; update the comment.
-       * tests/test.c (main): Call GC_use_threads_discovery for Darwin
-       (to test the mode if possible).
-       * configure: Regenerate.
-
-2010-10-16  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (DARWIN_SUSPEND_GC_THREADS,
-       DARWIN_QUERY_TASK_THREADS): New macro recognized.
-       * darwin_stop_world.c (GC_query_task_threads): add STATIC;
-       initialize to false; define as macro if DARWIN_SUSPEND_GC_THREADS
-       or DARWIN_QUERY_TASK_THREADS; remove FIXME.
-       * darwin_stop_world.c (GC_use_threads_discovery): New function
-       (for setting GC_query_task_threads value).
-       * darwin_stop_world.c (GC_mach_handler_thread,
-       GC_use_mach_handler_thread, GC_mach_thread, GC_MAX_MACH_THREADS,
-       GC_mach_threads, GC_mach_threads_count, GC_suspend_thread_list,
-       GC_darwin_register_mach_handler_thread): Define only if not
-       DARWIN_SUSPEND_GC_THREADS.
-       * darwin_stop_world.c (GC_stop_world, GC_start_world): Exclude
-       the code for GC_query_task_threads case from compilation unless
-       DARWIN_SUSPEND_GC_THREADS.
-       * os_dep.c (GC_darwin_register_mach_handler_thread): Declared only
-       if Darwin threads and not DARWIN_SUSPEND_GC_THREADS.
-       * os_dep.c (GC_mprotect_thread): Call
-       GC_darwin_register_mach_handler_thread only if THREADS and not
-       DARWIN_SUSPEND_GC_THREADS.
-       * pthread_support.c (marker_mach_threads): Don't define if
-       DARWIN_SUSPEND_GC_THREADS.
-       * pthread_support.c (GC_mark_thread): Don't fill in
-       marker_mach_threads if DARWIN_SUSPEND_GC_THREADS.
-       * include/private/gc_locks.h (GC_need_to_lock): Always declare for
-       THREADS case.
-
-2010-10-15  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_query_task_threads): Don't define to
-       false for DARWIN_DONT_PARSE_STACK case; unconditionally initialize
-       the variable to false (for now).
-       * darwin_stop_world.c (GC_push_all_stacks): Call task_threads()
-       only if not DARWIN_DONT_PARSE_STACK.
-       * darwin_stop_world.c (GC_stop_world, GC_start_world): Use the
-       approach based on task_threads() only if GC_query_task_threads
-       else use GC_threads table.
-
-2010-10-15  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_mach_threads): Remove static qualifier.
-       * darwin_stop_world.c (GC_stop_init): Remove (as we do not need to
-       really clear GC_mach_threads[]).
-       * darwin_stop_world.c (GC_stop_world): Reset GC_mach_threads_count
-       (instead of calling GC_stop_init).
-       * include/private/pthread_support.h (GC_stop_init): Remove proto.
-       * pthread_support.c (GC_stop_init): Add proto (unless Darwin).
-       * pthread_support.c (GC_thr_init): Don't call GC_stop_init() if
-       GC_DARWIN_THREADS.
-
-2010-10-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_stack_range_for): New static function
-       (move the code from GC_push_all_stacks).
-       * darwin_stop_world.c (GC_push_all_stacks): Call
-       GC_stack_range_for(); rename kern_return local variable to
-       kern_result.
-       * darwin_stop_world.c (GC_is_mach_marker): Change argument type
-       from mach_port_t to thread_act_t.
-       * pthread_support.c (GC_is_mach_marker): Ditto.
-
-2010-10-12  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_push_all_stacks): Fix "my_task" local
-       variable initialization (always call current_task()).
-       * pthread_support.c (GC_thr_init, GC_register_my_thread_inner):
-       Don't set thread's stop_info.stack_ptr value for Darwin.
-       * include/private/darwin_stop_world.h (thread_stop_info): Update
-       the comment for stack_ptr.
-
-2010-10-10  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_push_all_stacks): Rename "r", "me" local
-       variables to "kern_return" and "my_thread" ones, respectively;
-       call mach_port_deallocate() unconditionally.
-       * darwin_stop_world.c (GC_stop_world): Don't call mach_thread_self
-       if DEBUG_THREADS.
-
-2010-10-09  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_mach_thread): Move from
-       darwin_stop_world.h.
-       * include/private/darwin_stop_world.h (GC_mach_thread): Remove.
-       * win32_threads.c (GC_start_world): Define "thread_id" local
-       variable only if GC_ASSERTIONS; decide whether to resume a thread
-       based on its "suspended" field value; assert that suspended thread
-       stack_base is non-zero and the thread is not our one.
-
-2010-10-08  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_thread_resume): New inline function
-       (move code from GC_thread_resume).
-       * darwin_stop_world.c (GC_start_world): Check result of
-       task_threads(); call GC_thread_resume().
-       * os_dep.c (GC_malloc_heap_l, GC_is_malloc_heap_base): Define
-       only if not CYGWIN32.
-       * os_dep.c (GC_is_heap_base): Call GC_is_malloc_heap_base() only
-       if not CYGWIN32.
-
-2010-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (FindTopOfStack): Change return type to
-       ptr_t (from long); make GC_INNER; add GC_ prefix.
-       * darwin_stop_world.c (GC_push_all_stacks): Add thread_blocked
-       local variable (initialized from the corresponding GC_thread
-       field unless GC_query_task_threads); add assertion that our
-       thread is not blocked; prefix FindTopOfStack with GC_ and remove
-       no longer needed cast to ptr_t of the result; handle thread
-       blocked case (and remove FIXME); use GC_push_all_stack_sections
-       unless GC_query_task_threads (and remove FIXME).
-       * pthread_support.c (GC_FindTopOfStack): Declare (if needed).
-       * pthread_support.c (GC_do_blocking_inner): Call
-       GC_save_regs_in_stack (if needed) before acquiring the lock.
-       * win32_threads.c (GC_do_blocking_inner): Ditto.
-       * pthread_support.c (GC_do_blocking_inner): Set/clear topOfStack
-       field of GC_thread (Darwin only).
-       * include/private/pthread_support.h (GC_thread): Add topOfStack
-       field for Darwin (unless DARWIN_DONT_PARSE_STACK).
-
-2010-10-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * finalize.c (GC_check_finalizer_nested): Change return type to
-       char pointer (instead of int pointer); use explicit cast for
-       GC_finalizer_nested assignment.
-       * pthread_support.c (GC_check_finalizer_nested): Ditto.
-       * win32_threads.c (GC_check_finalizer_nested): Ditto.
-       * finalize.c (GC_finalizer_nested): Change type to unsigned char.
-       * finalize.c (GC_notify_or_invoke_finalizers): Change type of
-       "pnested" local variable to char pointer.
-       * pthread_support.c (GC_do_blocking_inner,
-       GC_call_with_gc_active): Use explicit cast for "thread_blocked"
-       field assignment.
-       * win32_threads.c (GC_lookup_pthread): Use explicit cast for
-       "suspended" field assignment.
-       * win32_threads.c (GC_Thread_Rep): Use short type for
-       finalizer_skipped; use char type for finalizer_nested and flags
-       fields and reorder some fields (to minimize GC_Thread_Rep
-       structure size).
-       * include/private/pthread_support.h (GC_Thread_Rep): Ditto.
-       * win32_threads.c (GC_Thread_Rep): Use char type for suspended
-       field (instead of GC_bool).
-       * include/private/pthread_support.h (GC_Thread_Rep): Use char type
-       for thread_blocked field (instead of short).
-
-2010-09-30  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_query_task_threads): New variable (or
-       macro).
-       * darwin_stop_world.c (GC_push_all_stacks): Use
-       GC_query_task_threads (to choose between algorithms based on
-       kernel task_threads and based on GC_threads table); update FIXME;
-       remove commented out GC_push_one statements.
-       * pthread_support.c (GC_thr_init, GC_do_blocking_inner,
-       GC_call_with_gc_active, GC_register_my_thread_inner): Initialize
-       stack_ptr field for all platforms.
-       * pthread_support.c (GC_call_with_gc_active): Initialize
-       saved_stack_ptr field for all platforms.
-       * include/private/darwin_stop_world.h (thread_stop_info): Add
-       stack_ptr field; change type of already_suspended from int to
-       GC_bool.
-
-2010-09-29  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_MAX_MACH_THREADS): New macro.
-       * darwin_stop_world.c (GC_mach_threads, GC_stop_init): Use
-       GC_MAX_MACH_THREADS instead of THREAD_TABLE_SZ.
-       * darwin_stop_world.c (GC_mach_threads): Add FIXME.
-       * darwin_stop_world.c (GC_stop_init, GC_suspend_thread_list,
-       GC_stop_world): Use FALSE and TRUE for already_suspended field and
-       "changed", "found" variables.
-       * darwin_stop_world.c (GC_is_mach_marker): New prototype (only if
-       PARALLEL_MARK).
-       * darwin_stop_world.c (GC_suspend_thread_list): Change return type
-       to GC_bool; change type of "changed", "found" to GC_bool; make
-       "my_thread" as an argument (instead of acquiring/deallocating it
-       locally); do not add my_thread, GC_mach_handler_thread and marker
-       threads to GC_mach_threads table; check for overflow of
-       GC_mach_threads table; increase GC_mach_threads_count if "found"
-       is true and info.suspend_count is non-zero.
-       * darwin_stop_world.c (GC_suspend_thread_list, GC_start_world):
-       Adjust "thread" format specifiers for GC_printf(); search thread
-       in "old_list" starting from the previous found one.
-       * darwin_stop_world.c (GC_stop_world): Rename "changes" to
-       "changed" local variable; remove "result" variable; adjust
-       GC_printf debugging message.
-       * darwin_stop_world.c (GC_start_world): Do not check for
-       my_thread and GC_use_mach_handler_thread (since they are not added
-       to GC_mach_threads table); call thread_info() only if
-       DEBUG_THREADS or GC_ASSERTIONS.
-       * pthread_support.c (marker_mach_threads): New static variable (if
-       Darwin).
-       * pthread_support.c (GC_is_mach_marker): New function (if Darwin).
-       * pthread_support.c (GC_mark_thread): Fill in marker_mach_threads
-       table (if Darwin).
-
-2010-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_parallel): Define only if THREADS.
-       * misc.c (GC_get_parallel): Ditto.
-       * include/gc.h (GC_parallel, GC_get_parallel,
-       GC_get_suspend_signal, GC_allow_register_threads,
-       GC_register_my_thread, GC_unregister_my_thread): Define only if
-       GC_THREADS.
-       * include/gc.h (GC_get_heap_size): Fix a typo in a comment.
-
-2010-09-11  Ivan Maidanski <ivmai@mail.ru> (really Ludovic Courtes)
-
-       * configure.ac: Use `AC_C_INLINE'.
-       * include/private/gc_priv.h (GC_INLINE): Use "inline" keyword
-       (determined by configure AC_C_INLINE) if HAVE_CONFIG_H is defined.
-       * configure.ac: Expand all tabs to spaces.
-       * configure: Regenerate.
-       * include/private/config.h.in: Ditto.
-
-2010-09-11  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (DL_ITERATE_PHDR_STRONG): New macro (define for
-       FreeBSD).
-       * dyn_load.c (GC_register_main_static_data): Move the definition
-       above GC_register_dynamic_libraries_dl_iterate_phdr one (FreeBSD
-       case); unconditionally return FALSE if DL_ITERATE_PHDR_STRONG.
-       * dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr): Test
-       GC_register_main_static_data() result (instead of direct testing
-       of dl_iterate_phdr (to prevent a compiler warning).
-       * os_dep.c (CODE_OK): Test si_code also for the value of 2
-       (FreeBSD case; required for FreeBSD v7+).
-       * os_dep.c (CODE_OK): Properly use parentheses (HPUX case).
-       * include/private/gcconfig.h (DATASTART): Cast etext argument in
-       GC_FreeBSDGetDataStart() call; remove unnecessary "&" (FreeBSD
-       case).
-
-2010-09-09  Ivan Maidanski <ivmai@mail.ru> (with input from Ludovic Courtes)
-
-       * include/private/specific.h (quick_thread_id): Define thru
-       GC_approx_sp(); define as a macro.
-       * include/private/specific.h (getspecific): Use GC_INLINE instead
-       of __inline__ (to work around Sun CC which does not recognize
-       inline keyword surrounded with underscores).
-       * include/private/specific.h: Expand all tabs to spaces; remove
-       trailing spaces at EOLn.
-
-2010-09-04  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (FindTopOfStack): Simplify condition
-       expressions.
-       * darwin_stop_world.c (GC_push_all_stacks): Merge two variants
-       of this function (DARWIN_DONT_PARSE_STACK).
-       * darwin_stop_world.c (GC_push_all_stacks): Add a check for our
-       thread is found (same as in pthread_stop_world.c).
-       * darwin_stop_world.c (GC_push_all_stacks): Print the number of
-       scanned threads if verbose (same as in pthread_stop_world.c).
-
-2010-09-04  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_push_all_stacks): Reset
-       thread_state_count value before every thread_get_state call;
-       refine the comment for thread_state_count.
-       * darwin_stop_world.c (GC_push_all_stacks): Ignore rsp, rip/eip,
-       rflags, cs, fs, gs, ss, ds, es, __pc registers; uncomment ebp
-       register pushing.
-       * darwin_stop_world.c (GC_push_all_stacks): Set outCount to
-       GC_MACH_THREAD_STATE_COUNT (instead of THREAD_STATE_MAX).
-       * darwin_stop_world.c (GC_push_all_stacks): Remove FIXME and WARN
-       for i386.
-
-2010-09-03  Ivan Maidanski <ivmai@mail.ru>
-
-       * doc/README.macros (DARWIN_DONT_PARSE_STACK): Fix a typo.
-       * darwin_stop_world.c (GC_use_mach_handler_thread): Change type
-       to GC_bool.
-       * darwin_stop_world.c (GC_suspend_thread_list, GC_start_world):
-       Simplify the expressions involving GC_use_mach_handler_thread.
-       * darwin_stop_world.c (GC_darwin_register_mach_handler_thread):
-       Initialize GC_use_mach_handler_thread to TRUE (instead of 1).
-
-2010-09-02  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_pthread_redirects.h (GC_pthread_sigmask, GC_dlopen,
-       pthread_sigmask, dlopen): Don't define for Win32 pthreads (and
-       don't include signal.h and dlfcn.h).
-
-2010-08-25  Ivan Maidanski <ivmai@mail.ru> (with help from Hans Boehm)
-
-       * dyn_load.c (GC_register_dynlib_callback): Add FIXME.
-
-2010-08-18  Ivan Maidanski <ivmai@mail.ru> (really Andreas Tobler)
-
-       * include/private/gcconfig.h: Add support for FreeBSD on ppc64.
-
-2010-08-18  Ivan Maidanski <ivmai@mail.ru> (with help from Andreas Tobler)
-
-       * os_dep.c (PROTECT, UNPROTECT): Correct VM_PROT_EXEC to
-       VM_PROT_EXECUTE.
-
-2010-08-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * aclocal.m4: Regenerate (by autoreconf -vif using autoconf-2.67,
-       automake-1.11.1 and libtool-2.2.8).
-       * configure: Ditto.
-       * ltmain.sh: Ditto.
-       * Makefile.in: Ditto.
-       * include/private/config.h.in: Ditto.
-       * m4/libtool.m4: Ditto.
-       * m4/ltoptions.m4: Ditto.
-       * m4/ltversion.m4: Ditto.
-       * m4/lt~obsolete.m4: Ditto.
-
-2010-08-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * os_dep.c (os2_alloc): Don't set PAG_EXECUTE unless
-       pages_executable is on.
-       * os_dep.c (os2_alloc): Add FIXME (for recursion).
-       * os_dep.c (UNPROTECT): Abort with a more informative message if
-       pages_executable is on ("mprotect" case).
-       * os_dep.c (PROTECT, UNPROTECT): Set VM_PROT_EXEC if
-       pages_executable is on (Darwin case).
-       * pthread_support.c (GC_init_real_syms): Abort with an informative
-       message if libgc is linked after libpthread.
-
-2010-08-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (GC_register_dynlib_callback): Adjust "start" pointer
-       for 64-bit targets.
-       * pthread_support.c (start_mark_threads): Expand PTHREAD_CREATE
-       macro.
-       * pthread_support.c (start_mark_threads): Call INIT_REAL_SYMS()
-       since REAL(pthread_create) is used.
-       * pthread_support.c (PTHREAD_CREATE): Remove unused.
-
-2010-08-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * extra/threadlibs.c (main): Remove --wrap for "read" (since not
-       wrapped anymore).
-       * doc/README.linux (GC_USE_LD_WRAP): Ditto.
-       * os_dep.c (__wrap_read): Ditto (in the comment).
-
-2010-08-14  Ivan Maidanski <ivmai@mail.ru> (with help from Hans Boehm)
-
-       * include/gc_pthread_redirects.h: Test GC_PTHREADS and GC_H at the
-       beginning of the file.
-       * include/gc_pthread_redirects.h (GC_PTHREAD_EXIT_ATTRIBUTE): New
-       macro (defined only for Linux and Solaris).
-       * include/gc_pthread_redirects.h (GC_pthread_cancel,
-       GC_pthread_exit): Declare new API function (only if
-       GC_PTHREAD_EXIT_ATTRIBUTE).
-       * include/gc_pthread_redirects.h (pthread_cancel, pthread_exit):
-       Redirect (if GC_PTHREAD_EXIT_ATTRIBUTE).
-       * include/private/pthread_support.h (DISABLED_GC): New macro.
-       * pthread_support.c (pthread_cancel, pthread_exit): Restore
-       original definition or declare "real" function (if needed and
-       GC_PTHREAD_EXIT_ATTRIBUTE).
-       * pthread_support.c (GC_pthread_cancel_t, GC_pthread_exit_t):
-       Declare new types if needed.
-       * pthread_support.c (GC_pthread_cancel, GC_pthread_exit): New
-       function definition (only if GC_PTHREAD_EXIT_ATTRIBUTE).
-       * pthread_support.c (GC_init_real_syms): Initialize pointers to
-       the "real" pthread_cancel and pthread_exit (only if
-       GC_PTHREAD_EXIT_ATTRIBUTE).
-       * pthread_support.c (GC_unregister_my_thread): Enable collections
-       if DISABLED_GC was set (only if GC_PTHREAD_EXIT_ATTRIBUTE).
-       * pthread_support.c (pthread_cancel, pthread_exit): New wrapped
-       function definition (only if GC_PTHREAD_EXIT_ATTRIBUTE defined).
-       * pthread_support.c (GC_start_routine): Refine the comment.
-       * extra/threadlibs.c (main): Adjust --wrap (add "read",
-       "pthread_exit", "pthread_cancel" but remove "sleep").
-       * doc/README.linux (GC_USE_LD_WRAP): Ditto.
-       * doc/README.linux: Expand all tabs to spaces; remove trailing
-       spaces at EOLn.
-
-2010-08-12  Ivan Maidanski <ivmai@mail.ru> (mostly really Mike Gran)
-
-       * include/gc.h (GC_MALLOC_STUBBORN): Remove trailing ';' in the
-       macro definition.
-       * include/gc.h (GC_reachable_here): Ditto.
-       * include/gc.h (GC_reachable_here): Prefix and postfix "volatile"
-       with double '_'.
-
-2010-07-29  Ivan Maidanski <ivmai@mail.ru> (with input from NIIBE Yutaka)
-
-       * pthread_start.c: New file.
-       * CMakeLists.txt (SRC): Add pthread_start.c.
-       * Makefile.am (libgc_la_SOURCES): Ditto.
-       * Makefile.direct (CSRCS): Ditto.
-       * Makefile.direct (OBJS): Add pthread_start.obj.
-       * extra/gc.c: Add a comment; include pthread_start.c.
-       * pthread_support.c (start_info): Move the struct definition down
-       closer to its usage.
-       * pthread_support.c (GC_thread_exit_proc): Replace STATIC with
-       GC_INNER.
-       * pthread_support.c (GC_inner_start_routine): Move to the
-       definition to pthread_start.c; leave only the prototype; remove
-       STATIC.
-       * pthread_support.c (GC_start_rtn_prepare_thread): New function
-       (contains parts of the original GC_inner_start_routine).
-       * Makefile.in: Regenerate.
-       * configure: Ditto.
-
-2010-07-28  Ivan Maidanski <ivmai@mail.ru> (mostly really Noah Lavine)
-
-       * configure.ac (NO_EXECUTE_PERMISSION): Add comment.
-       * doc/README.macros (NO_EXECUTE_PERMISSION): Update the
-       documentation.
-       * include/gc.h (GC_set_pages_executable, GC_get_pages_executable):
-       New API function declaration.
-       * include/gc.h (GC_ignore_warn_proc): Reformat the comment.
-       * os_dep.c (OPT_PROT_EXEC): Remove (superseded by
-       pages_executable).
-       * os_dep.c (pages_executable): New static variable.
-       * os_dep.c (IGNORE_PAGES_EXECUTABLE): New macro (used by
-       GC_get_pages_executable only).
-       * os_dep.c (GC_unix_mmap_get_mem, GC_remap, PROTECT, UNPROTECT):
-       Replace OPT_PROT_EXEC with pages_executable.
-       * os_dep.c (GC_unix_mmap_get_mem, GC_remap, GC_win32_get_mem,
-       GC_wince_get_mem, UNPROTECT): Undefine IGNORE_PAGES_EXECUTABLE.
-       * os_dep.c (GC_win32_get_mem, GC_wince_get_mem, GC_remap, PROTECT,
-       UNPROTECT): Use PAGE_EXECUTE_... only if pages_executable is on.
-       * os_dep.c (GC_set_pages_executable, GC_get_pages_executable): New
-       API function definition.
-
-2010-07-28  Ivan Maidanski <ivmai@mail.ru>
-
-       * tests/test.c (check_heap_stats): Increase max_heap_sz by 20% for
-       64-bit CPUs (to prevent "Unexpected heap growth" failure on Win64,
-       at least).
-
-2010-07-14  Ivan Maidanski <ivmai@mail.ru>
-
-       * tests/test.c (check_heap_stats): Increase max_heap_sz by 25% for
-       32-bit CPUs (to prevent "Unexpected heap growth" failure).
-
-2010-07-13  Ivan Maidanski <ivmai@mail.ru>
-
-       * gc_dlopen.c (dlopen): Prototype REAL_DLFUNC if GC_USE_LD_WRAP.
-       * pthread_support.c (pthread_create, pthread_join, pthread_detach,
-       pthread_sigmask): Ditto.
-       * gc_dlopen.c (dlopen): Remove cast (redundant since the prototype
-       is added).
-       * gc_dlopen.c (GC_dlopen): Fix return type.
-       * pthread_support.c (GC_init_real_syms): Don't define
-       LIBPTHREAD_NAME, LIBPTHREAD_NAME_LEN, len, namebuf and
-       libpthread_name if RTLD_NEXT.
-
-2010-07-13  Ivan Maidanski <ivmai@mail.ru>
-
-       * gc_dlopen.c (disable_gc_for_dlopen): Update the comment.
-       * gc_dlopen.c (dlopen): Ditto.
-       * include/gc.h: Update copyright header.
-       * include/gc.h (GC_enable_incremental): Refine the comment.
-       * include/gc.h (DECLSPEC_NORETURN): Define macro as empty if
-       missing (only for Win32).
-       * include/gc.h (GC_ExitThread): Use DECLSPEC_NORETURN.
-       * win32_threads.c (GC_ExitThread): Ditto.
-       * include/gc.h (GC_endthreadex): Add a comment.
-
-2010-05-31  Ivan Maidanski <ivmai@mail.ru> (really Alexander Belchenko)
-
-       * include/cord.h: Fix typos.
-       * include/cord.h: Expand all tabs to spaces; remove trailing
-       spaces at EOLn.
-
-2010-05-22  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.in: Regenerate.
-       * configure: Ditto.
-
-2010-05-22  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.am (EXTRA_DIST): Add "CMakeLists.txt" and
-       "tests/CMakeLists.txt".
-       * doc/doc.am (dist_pkgdata_DATA): Add "doc/README.cmake".
-
-2010-05-21  Ivan Maidanski <ivmai@mail.ru> (really Bradley Smith and
-                                            Stefano Rivera)
-
-       * mach_dep.c (NO_GETCONTEXT): Also define if AVR32.
-       * include/private/gcconfig.h (AVR32): New macro (also define the
-       supplementary macros for the target).
-       * include/private/thread_local_alloc (USE_COMPILER_TLS): Don't
-       define for AVR32.
-
-2010-05-13  Ivan Maidanski <ivmai@mail.ru> (mostly really Uros Bizjak)
-
-       * tests/leak_test.c (main): Explicitly define as returning int
-       (to prevent a spurious test failure on some Linux/alpha targets).
-       * tests/thread_leak_test.c (main): Ditto.
-       * tests/thread_leak_test.c: Initialize GC_find_leak in the main
-       thread (before GC_INIT) only.
-       * tests/leak_test.c (main): Use GC_set_find_leak() instead of
-       accessing GC_find_leak directly.
-       * tests/thread_leak_test.c (main): Ditto.
-
-2010-05-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h (GC_find_leak, GC_finalize_on_demand,
-       GC_java_finalization, GC_dont_expand, GC_no_dls,
-       GC_dont_precollect): Simplify the comment (remove the information
-       about data races since the value is boolean).
-
-2010-04-16  Ivan Maidanski <ivmai@mail.ru> (mostly really Louis Zhuang)
-
-       * os_dep.c (GC_get_stack_base, GC_get_main_stack_base): New
-       Solaris-specific implementation (based on thr_stksegment).
-       * os_dep.c (stackbase_main_self, stackbase_main_ss_sp): New static
-       variable used by the Solaris-specific GC_get_stack_base().
-
-2010-04-16  Ivan Maidanski <ivmai@mail.ru> (mostly really NIIBE Yutaka)
-
-       * pthread_support.c (GC_mark_thread_local_free_lists,
-       GC_check_tls): Mark (and check) only for live threads (in case of
-       GC_destroy_thread_local() is called already but GC_delete_thread()
-       is not yet).
-       * win32_threads.c (GC_mark_thread_local_free_lists, GC_check_tls):
-       Ditto (matters only if GC_PTHREADS defined).
-
-2010-04-09  Ivan Maidanski <ivmai@mail.ru>
-
-       * NT_MAKEFILE: Remove the comment about DLL and Win32S.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_MAKEFILE: Add ".SUFFIXES" directive (to handle gc_cpp.cc
-       properly on VS 2005+).
-       * NT_MAKEFILE: Update GC log file name in comments.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * doc/README.win32: Ditto.
-       * NT_MAKEFILE: Remove ":full" for "-debug" option (since no
-       longer supported by VS).
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_MAKEFILE: Commented out copying of gc_cpp.cc to gc_cpp.cpp.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * NT_STATIC_THREADS_MAKEFILE: Add -D PARALLEL_MARK option.
-       * NT_STATIC_THREADS_MAKEFILE: Increase stack size for gctest.exe.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Remove "-stack" option (use the
-       default stack size limit).
-       * NT_X64_THREADS_MAKEFILE: Rename "gc64_dll.dll" to "gc64.dll".
-       * win32_threads.c (GC_get_next_stack): Always define (since it is
-       also used for Cygwin now).
-
-2010-03-26  Ivan Maidanski <ivmai@mail.ru> (really Hans Boehm)
-
-       * alloc.c (GC_maybe_gc): Move GC_notify_full_gc() call upper to
-       be just before GC_clear_marks() call.
-       * include/gc_mark.h (GC_start_callback_proc): Refine the comment.
-
-2010-03-23  Ivan Maidanski <ivmai@mail.ru> (really Dave Korn)
-
-       * Makefile.am (check_LTLIBRARIES): Initialize to empty.
-       * tests/tests.am (TESTS, check_PROGRAMS): Add staticrootstest.
-       * tests/tests.am (staticrootstest_SOURCES, staticrootstest_LDADD,
-       libstaticrootslib_la_SOURCES, libstaticrootslib_la_LIBADD,
-       libstaticrootslib_la_LDFLAGS, libstaticrootslib_la_DEPENDENCIES):
-       Define.
-       * tests/tests.am (check_LTLIBRARIES): Add libstaticrootslib.la.
-       * .cvsignore: Ignore libstaticrootslib.la.
-       * Makefile.in: Regenerate.
-
-2010-03-20  Ivan Maidanski <ivmai@mail.ru>
-
-       * m4/libtool.m4: Re-add auto-generated file (for "make dist").
-       * m4/lt~obsolete.m4: Ditto.
-       * m4/ltoptions.m4: Ditto.
-       * m4/ltsugar.m4: Ditto.
-       * m4/ltversion.m4: Ditto.
-
-2010-03-20  Ivan Maidanski <ivmai@mail.ru> (really Dave Korn)
-
-       * tests/staticrootstest.c: New file.
-       * tests/staticrootslib.c: Ditto.
-
-2010-03-19  Ivan Maidanski <ivmai@mail.ru> (really Dave Korn)
-
-       * dyn_load.c (GC_get_next_stack, GC_cond_add_roots): Define for
-       Cygwin as well as other win32 targets.
-       * dyn_load.c (GC_wnt): Define to constant true.
-       * dyn_load.c (GC_register_dynamic_libraries): Define for Cygwin as
-       well as other win32 targets.
-       * mark_rts.c (rt_hash, GC_roots_present, add_roots_to_index):
-       Don't define for Cygwin, as on other win32.
-       * mark_rts.c (GC_add_roots_inner, GC_clear_roots): Handle on
-       Cygwin as for other win32 targets.
-       * mark_rts.c (GC_rebuild_root_index): Don't declare on Cygwin, as
-       other win32.
-       * mark_rts.c (GC_remove_tmp_roots): Do declare on Cygwin as on
-       other win32.
-       * mark_rts.c (GC_remove_roots, GC_remove_roots_inner): Don't
-       declare on Cygwin as on other win32.
-       * mark_rts.c (GC_is_tmp_root): Do declare on Cygwin when
-       !NO_DEBUGGING, as on other win32 targets.
-       * mark_rts.c (GC_cond_register_dynamic_libraries): Handle on
-       Cygwin as for other win32 targets.
-       * os_dep.c (GC_setpagesize): Handle on Cygwin as on other win32.
-       * os_dep.c (GC_get_main_stack_base): Don't declare on Cygwin, as
-       other win32.
-       * os_dep.c (GC_sysinfo): Declare on Cygwin, as other win32.
-       * os_dep.c (GC_win32_get_mem): Declare on Cygwin, as on other
-       Win32, but call GC_unix_get_mem instead of GlobalAlloc.
-       * os_dep.c (GC_win32_free_heap): Declare on Cygwin (as empty).
-       * ptr_chck.c (GC_is_visible): Register dynamic libraries on Cygwin
-       as on other win32 platforms.
-       * win32_threads.c (GC_get_next_stack): Define on Cygwin as well as
-       for dynamic loading targets.
-       * include/private/gc_priv.h (GC_INNER): Don't try to use
-       visibility on Cygwin which does not support it.
-       * include/private/gc_priv.h (struct roots): Don't declare r_next
-       member on Cygwin as on other windows hosts.
-       * include/private/gc_priv.h (LOG_RT_SIZE, RT_SIZE): Don't define
-       likewise.
-       * include/private/gc_priv.h (struct _GC_arrays): Do declare
-       _heap_bases[] member and don't declare _root_index likewise.
-       * include/private/gc_priv.h (GC_heap_bases): Do define likewise.
-       * include/private/gc_priv.h (_SYSTEM_INFO): Do forward-declare
-       likewise.
-       * include/private/gc_priv.h (GC_sysinfo): Do declare extern
-       likewise.
-       * include/private/gcconfig.h (GC_win32_get_mem, GET_MEM): Do
-       prototype on Cygwin as other win32 platforms.
-
-2010-03-13  Ivan Maidanski <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_main_stack_base): Use pthread_getattr_np() and
-       pthread_attr_getstack() instead of GC_get_stack_base() (and check
-       returned stackaddr for NULL); output a warning on failure.
-
-2010-03-12  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_start_call_back): Replace the definition type to
-       GC_start_callback_proc.
-       * alloc.c (GC_set_start_callback, GC_get_start_callback): New
-       setter/getter function.
-       * alloc.c (GC_try_to_collect_inner): Call GC_notify_full_gc()
-       unconditionally (because GC_try_to_collect_inner always does full
-       GC).
-       * include/gc_mark.h (GC_start_callback_proc): New type.
-       * include/gc_mark.h (GC_set_start_callback,
-       GC_get_start_callback): New API function declaration.
-
-2010-03-12  Ivan Maidanski <ivmai@mail.ru>
-
-       * doc/README.macros (USE_GET_STACKBASE_FOR_MAIN): Document.
-       * os_dep.c (GC_get_main_stack_base): Recognize
-       USE_GET_STACKBASE_FOR_MAIN (only if THREADS and LINUX_STACKBOTTOM)
-       and use GC_get_stack_base() in this case.
-
-2010-03-05  Ivan Maidanski <ivmai@mail.ru> (really Burkhard Linke)
-
-       * os_dep.c (GC_get_stack_base): Add LOCK/UNLOCK() (since
-       GC_find_limit_with_bound() should be called with the lock held).
-       * backgraph.c (FOR_EACH_PRED): Fix a typo.
-
-2010-03-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_set_stop_func, GC_get_stop_func): Add
-       DCL_LOCK_STATE.
-       * finalize.c (GC_notify_or_invoke_finalizers): Ditto.
-       * gc_dlopen.c (disable_gc_for_dlopen): Ditto.
-       * gcj_mlc.c (maybe_finalize, GC_debug_gcj_malloc): Ditto.
-       * mark.c (GC_print_trace): Ditto.
-       * misc.c (GC_set_warn_proc, GC_get_warn_proc, GC_enable,
-       GC_disable, GC_new_free_list, GC_new_kind, GC_new_proc,
-       GC_set_oom_fn, GC_get_oom_fn, GC_set_finalizer_notifier,
-       GC_get_finalizer_notifier): Ditto.
-       * os_dep.c (GC_get_stack_base, GC_print_callers): Ditto.
-       * pthread_support.c (GC_is_thread_tsd_valid,
-       GC_wait_for_gc_completion, GC_init_parallel, GC_do_blocking_inner,
-       GC_call_with_gc_active, GC_unregister_my_thread, pthread_join,
-       pthread_detach, GC_register_my_thread, GC_inner_start_routine,
-       pthread_create): Ditto.
-       * reclaim.c (GC_print_all_errors): Ditto.
-       * win32_threads.c (GC_is_thread_tsd_valid, GC_register_my_thread,
-       GC_unregister_my_thread, GC_do_blocking_inner,
-       GC_call_with_gc_active, GC_lookup_pthread, GC_pthread_join,
-       GC_pthread_start_inner, GC_thread_exit_proc, GC_pthread_detach,
-       GC_init_parallel): Ditto.
-
-2010-02-25  Ivan Maidanski <ivmai@mail.ru> (really Bruce Mitchener)
-
-       * .cvsignore: New file.
-       * include/private/.cvsignore: Ditto.
-
-2010-02-24  Ivan Maidanski <ivmai@mail.ru>
-
-       * CMakeLists.txt: Change copyright header.
-       * tests/CMakeLists.txt: Ditto.
-
-2010-02-24  Ivan Maidanski <ivmai@mail.ru> (really Bruce Mitchener)
-
-       * doc/README.darwin: Update.
-
-2010-02-24  Ivan Maidanski <ivmai@mail.ru> (really Bruce Mitchener)
-
-       * CMakeLists.txt: Adjust INCLUDE_DIRECTORIES and SRC (to make it
-       usable on Mac OS X).
-       * doc/README.cmake: Update.
-
-2010-02-24  Ivan Maidanski <ivmai@mail.ru> (really Jack Andrews)
-
-       * CMakeLists.txt: New file (adding CMake support).
-       * tests/CMakeLists.txt: Ditto.
-       * doc/README.cmake: Ditto.
-
-2010-02-19  Ivan Maidanski <ivmai@mail.ru> (really Bruce Mitchener)
-
-       * configure.ac (darwin): Don't define HAS_PPC_THREAD_STATE...
-       macros.
-       * include/private/gc_priv.h (THREAD_FLD): Recognize
-       __DARWIN_UNIX03 instead of HAS_PPC_THREAD_STATE... macros.
-       * configure: Regenerate.
-       * include/private/config.h.in: Ditto.
-
-2010-02-15  Ivan Maidanski <ivmai@mail.ru> (really Alexandr Shadchin)
-
-       * pthread_support.c: Include <sys/param.h> and <sys/sysctl.h> for
-       OpenBSD.
-       * pthread_support.c (get_ncpu): Define also for Darwin, NetBSD and
-       OpenBSD.
-       * pthread_support.c (GC_thr_init): Use get_ncpu() for Darwin,
-       NetBSD and OpenBSD.
-
-2010-02-04  Ivan Maidanski <ivmai@mail.ru>
-
-       * mallocx.c (GC_generic_malloc_many, GC_malloc_many): Define even
-       if THREADS is undefined.
-       * include/gc.h (GC_malloc_many): Update the comment.
-
-2010-02-03  Ivan Maidanski <ivmai@mail.ru>
-
-       * ChangeLog: Fix some typos.
-
-2010-01-29  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.in: Regenerate (by autoreconf -vif using
-       libtool-2.2.6b, automake-1.11.1, autoconf-2.65).
-       * aclocal.m4: Ditto.
-       * compile: Ditto.
-       * config.guess: Ditto.
-       * config.sub: Ditto.
-       * configure: Ditto.
-       * depcomp: Ditto.
-       * install-sh: Ditto.
-       * ltmain.sh: Ditto.
-       * missing: Ditto.
-       * mkinstalldirs: Ditto.
-
-2010-01-15  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_cpp.h (GC_PLACEMENT_DELETE): Define for Embarcadero
-       (formerly known as Borland) C++ compiler v6.21+.
-       * include/gc_cpp.h (GC_NO_OPERATOR_NEW_ARRAY): Define for ancient
-       VC++ compilers.
-
-2009-12-18  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (GC_register_my_thread_inner,
-       GC_pthread_start_inner): Undo the previous commit changes for
-       the thread flags and DETACHED state (since the state is only
-       tested in GC_thread_exit_proc).
-
-2009-12-18  Ivan Maidanski <ivmai@mail.ru> (with input from
-                                           Jean-Claude Beaudoin)
-
-       * include/gc.h (GC_unregister_my_thread): Fix a typo; update the
-       comment.
-       * pthread_support.c (GC_delete_thread): Allow to delete the main
-       thread (don't call GC_INTERNAL_FREE for it); update the comment.
-       * win32_threads.c (GC_delete_thread): Ditto.
-       * pthread_support.c (GC_unregister_my_thread): Add an assertion
-       for FINISHED flag is unset.
-       * tests/test.c (check_heap_stats): Test the main thread
-       unregistering (only if THREADS).
-       * win32_threads.c (GC_register_my_thread_inner): Set flags to
-       DETACHED (only if GC_PTHREADS).
-       * win32_threads.c (GC_unregister_my_thread): Add FIXME (for
-       GC_wait_for_gc_completion).
-       * win32_threads.c (GC_pthread_start_inner): Clear flags detached
-       state if needed; set pthread_id and flags while holding the lock.
-
-2009-12-17  Ivan Maidanski <ivmai@mail.ru> (with input from Andy Wingo)
-
-       * include/private/gc_priv.h (SIG_SUSPEND): Don't define for
-       OpenBSD and Darwin.
-
-2009-12-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h: Recognize _M_X64 (as an alias for _AMD64_).
-
-2009-12-10  Hans-J. Boehm <Hans.Boehm@hp.com>
-
-       * test.c (main, WinMain): Consistently don't invoke
-       GC_enable_incremental() if MAKE_BACKGRAPH is defined, but
-       do invoke it even if parallel marking is enabled.
-
-2009-12-08  Ivan Maidanski <ivmai@mail.ru>
-
-       * tests/test.c (reverse_test): Comment out a check for MSWIN32
-       (when determing BIG value) assuming outdated win32S.
-       * tests/test.c (reverse_test): Rename to reverse_test_inner;
-       change the declaration (to be of GC_fn_type); call itself thru
-       GC_call_with_gc_active() if the argument is zero.
-       * tests/test.c (reverse_test): New function added calling
-       reverse_test_inner thru GC_do_blocking (to test GC_do_blocking and
-       GC_call_with_gc_active).
-
-2009-12-08  Ivan Maidanski <ivmai@mail.ru> (with input from Marcos Dione)
-
-       * doc/README.macros (IGNORE_DYNAMIC_LOADING, PLATFORM_ANDROID):
-       Document.
-       * dyn_load.c: Don't include <elf.h> if PLATFORM_ANDROID.
-       * dyn_load.c: Include bionic <linker.h> (instead of <link.h>) if
-       PLATFORM_ANDROID.
-       * include/private/gcconfig.h (LINUX): Define also if
-       PLATFORM_ANDROID (for the windows-based toolkit).
-       * include/private/gcconfig.h (SEARCH_FOR_DATA_START): Explicitly
-       define for Android/x86 platform.
-       * include/private/gcconfig.h (IGNORE_DYNAMIC_LOADING): Recognize
-       new macro (undefine DYNAMIC_LOADING in this case).
-       * include/private/gcconfig.h (CANCEL_SAFE): Don't define if
-       PLATFORM_ANDROID.
-       * include/private/gcconfig.h (IF_CANCEL): Fix definition for the
-       explicitly defined CANCEL_SAFE.
-
-2009-12-08  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_allochblk_nth): Don't call GC_remove_protection()
-       if GC_DISABLE_INCREMENTAL.
-       * reclaim.c (GC_reclaim_generic): Ditto.
-       * checksums.c (GC_page_was_ever_dirty): Add prototype.
-       * include/private/gc_locks.h (GC_mark_lock_holder): Don't declare
-       unless PARALLEL_MARK.
-       * include/private/gc_priv.h (GC_dirty_maintained,
-       GC_page_was_dirty, GC_remove_protection, GC_dirty_init): Don't
-       declare if GC_DISABLE_INCREMENTAL.
-       * include/private/gc_priv.h (GC_print_finalization_stats): Don't
-       declare if SMALL_CONFIG.
-       * include/private/gcconfig.h (CHECKSUMS): Explicitly undefine if
-       GC_DISABLE_INCREMENTAL (since nothing to check).
-       * include/private/gcconfig.h (DEFAULT_VDB): Don't define if
-       GC_DISABLE_INCREMENTAL.
-       * os_dep.c (GC_dirty_maintained): Ditto.
-       * mark.c (GC_initiate_gc): Don't call GC_read_dirty() if
-       GC_DISABLE_INCREMENTAL.
-       * os_dep.c (GC_gww_page_was_ever_dirty, GC_page_was_ever_dirty):
-       Uncomment; define only if CHECKSUMS.
-
-2009-12-08  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_push_all_stacks): Fix a bug (call
-       GC_push_all_stack() instead of GC_push_all_stack_frames()).
-       * include/private/gc_priv.h (GC_push_all_stack_frames,
-       GC_push_all_register_frames): Rename to
-       GC_push_all_stack_sections and GC_push_all_register_sections,
-       respectively.
-       * mark_rts.c (GC_push_all_stack_frames,
-       GC_push_all_register_frames, GC_push_all_stack_part_eager_frames,
-       GC_push_current_stack): Ditto.
-       * pthread_stop_world.c (GC_push_all_stacks): Ditto.
-       * win32_threads.c (GC_push_stack_for): Ditto.
-       * misc.c (GC_call_with_gc_active): Rename "frame" local variable
-       to "stacksect".
-       * pthread_support.c (GC_call_with_gc_active): Ditto.
-       * win32_threads.c (GC_call_with_gc_active): Ditto.
-       * pthread_support.c (GC_call_with_gc_active): Update FIXME for
-       Darwin.
-       * win32_threads.c (GC_Thread_Rep): Update the comment for
-       traced_stack_sect.
-
-2009-12-08  Ivan Maidanski <ivmai@mail.ru> (really mostly Hans Boehm)
-
-       * darwin_stop_world.c (GC_push_all_stacks): Rename
-       activation_frame to traced_stack_sect.
-       * include/private/gc_priv.h (GC_push_all_stack_frames,
-       GC_push_all_register_frames): Ditto.
-       * include/private/pthread_support.h (GC_Thread_Rep): Ditto.
-       * mark_rts.c (GC_push_all_register_frames,
-       GC_push_all_stack_frames, GC_push_all_stack_part_eager_frames,
-       GC_push_current_stack): Ditto.
-       * pthread_stop_world.c (GC_push_all_stacks): Ditto.
-       * pthread_support.c (GC_call_with_gc_active): Ditto.
-       * win32_threads.c (GC_Thread_Rep, GC_call_with_gc_active,
-       GC_push_stack_for): Ditto.
-       * include/private/gc_priv.h (GC_activation_frame_s): Rename to
-       GC_traced_stack_sect_s.
-       * include/private/gc_priv.h (GC_activation_frame): Rename to
-       GC_traced_stack_sect.
-       * misc.c (GC_activation_frame, GC_call_with_gc_active): Ditto.
-       * doc/README.macros (UNICODE): Document.
-
-2009-12-07  Ivan Maidanski <ivmai@mail.ru>
-
-       * doc/README.macros (GC_READ_ENV_FILE): Document (new macro).
-       * include/private/gc_priv.h (GETENV): Recognize GC_READ_ENV_FILE;
-       declare and use GC_envfile_getenv().
-       * misc.c (GC_envfile_content, GC_envfile_length): New static
-       variable (only if GC_READ_ENV_FILE).
-       * misc.c (GC_ENVFILE_MAXLEN): New macro (used in GC_envfile_init).
-       * misc.c (GC_envfile_init, GC_envfile_getenv): New function (only
-       if GC_READ_ENV_FILE).
-       * misc.c (GC_init): Call GC_envfile_init() (before using GETENV)
-       if GC_READ_ENV_FILE.
-       * misc.c (GC_init): Move GC_setpagesize() and GC_init_win32()
-       calls to be just before GC_envfile_init() one (since the latter
-       uses GET_MEM).
-       * misc.c (GC_abort): use ExitProcess() (instead of DebugBreak) for
-       WinCE if NO_DEBUGGING; add a comment for DebugBreak() (for WinCE).
-       * mark_rts.c (GC_add_roots_inner): Remove redundant trailing '\n'
-       from the ABORT message.
-       * misc.c (GC_init): Ditto.
-       * os_dep.c (GC_get_main_stack_base, GC_register_data_segments):
-       Ditto.
-       * pthread_stop_world.c (GC_push_all_stacks): Ditto.
-       * pthread_support.c (GC_init_real_syms, start_mark_threads):
-       Ditto.
-
-2009-12-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (GC_get_next_stack): Don't define for Cygwin
-       (since unused for now).
-
-2009-12-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (HAVE_REGISTER_MAIN_STATIC_DATA): Don't define unless
-       GC_register_main_static_data() is defined.
-       * dyn_load.c (GC_register_dynamic_libraries): Define only if used
-       (if DYNAMIC_LOADING or PCR or Win32/CE).
-       * dyn_load.c (GC_register_main_static_data): Define the default
-       one only if DYNAMIC_LOADING.
-       * include/private/gc_priv.h (GC_register_dynamic_libraries):
-       Declare only if used (to prevent compiler warning).
-
-2009-12-04  Ivan Maidanski <ivmai@mail.ru>
-
-       * mark_rts.c (GC_approx_sp): Add a comment (for GCC).
-
-2009-12-04  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_version.h, configure.ac, doc/README: Change to
-       version 7.2alpha5.
-       * configure: Regenerate.
-
-[7.2alpha4]
-
-2009-12-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_version.h, configure.ac, doc/README: Change to
-       version 7.2alpha4.
-       * configure: Regenerate.
-
-2009-11-21  Ivan Maidanski <ivmai@mail.ru>
-
-       * configure.ac (AC_CONFIG_COMMANDS): Quote srcdir value.
-       * configure: Regenerate.
-
-2009-11-18  Ivan Maidanski <ivmai@mail.ru> (really mostly Zoltan Varga)
-
-       * include/gc.h (GC_get_suspend_signal): New function declaration.
-       * misc.c (GC_get_suspend_signal): New API function (only if
-       THREADS).
-
-2009-11-16  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (min_bytes_allocd): Multiply GC_free_space_divisor by
-       two if GC_incremental (instead of TRUE_INCREMENTAL).
-
-2009-11-10  Ivan Maidanski <ivmai@mail.ru>
-
-       * sparc_mach_dep.S (GC_push_regs): Remove the reference.
-
-2009-11-09  Ivan Maidanski <ivmai@mail.ru>
-
-       * os_dep.c (SIZE_T, PULONG_PTR): Remove.
-       * os_dep.c (ULONG_PTR): Replace with GC_ULONG_PTR (defined as GC
-       "word"); add the comment.
-       * os_dep.c (GetWriteWatch_type, detect_GetWriteWatch,
-       GC_gww_read_dirty): Prefix ULONG_PTR with "GC_".
-
-2009-11-07  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (THREAD_TABLE_SZ): Change back to a power-of-two
-       const value (for speed).
-       * win32_threads.c (THREAD_TABLE_INDEX): New macro.
-       * win32_threads.c (GC_new_thread, GC_lookup_thread_inner,
-       GC_delete_gc_thread, GC_delete_thread, GC_lookup_pthread): Use
-       THREAD_TABLE_INDEX instead of THREAD_TABLE_SZ.
-       * win32_threads.c (PTHREAD_MAP_HASH): Rename to PTHREAD_MAP_INDEX.
-
-2009-11-07  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (THREAD_TABLE_SZ): Make the const value prime.
-
-2009-11-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * backgraph.c: Remove apostrophe char from "#error".
-
-2009-11-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * doc/README.macros (GC_DISABLE_INCREMENTAL): Document.
-       * include/private/gcconfig.h (GC_DISABLE_INCREMENTAL): Recognize
-       new macro; implicitly define it if SMALL_CONFIG.
-       * alloc.c (GC_incremental, GC_timeout_stop_func): Check for
-       GC_DISABLE_INCREMENTAL instead of SMALL_CONFIG.
-       * include/private/gc_priv.h (GC_incremental, TRUE_INCREMENTAL,
-       GC_push_conditional): Ditto.
-       * mark.c (GC_push_next_marked_dirty, GC_push_selected,
-       GC_push_conditional, GC_block_was_dirty): Ditto.
-       * misc.c (GC_enable_incremental): Ditto.
-       * misc.c (GC_init): Ditto (for "GC_PAUSE_TIME_TARGET" and
-       "GC_ENABLE_INCREMENTAL" environment variables).
-       * misc.c (GC_enable_incremental): Reformat the code.
 
-2009-11-06  Ivan Maidanski <ivmai@mail.ru>
+[7.3alpha2] (development)
+=========================
+
+* Move "cord" library tests to "cord/tests" folder.
+* Move asm machine-dependent files to "src" folder.
+* Move build tools sources to "tools" folder.
+* Remove binary icon file for de_win.
+* Remove cordtest from "cord" library.
+* Remove gc_amiga_redirects.h (included internally) from public headers.
+* Remove obsolete unused asm files for ALPHA, HPUX, SGI, RS6000, ULTRIX.
+* Replace ARGSUSED comment-based annotation with GCC 'unused' attribute.
+* Turn on "extra" GCC warnings.
+* Turn on unused-parameter checking for GCC.
+
+
+[7.2] (candidate)
+=================
+
+* Add GC_WIN32_PTHREADS target in configure.
+* Add GC_get_heap_usage_safe() to API as a thread-safe alternative to
+GC_get_bytes_since_gc and friends.
+* Add info that getcontext() resets FPE mask no longer on Linux/x86_64.
+* Add realloc_test.c test.
+* Check pthread_create/join result in test.
+* Fix "comparison of signed and unsigned values" compiler warnings.
+* Fix GC_find_limit_with_bound to always reset fault handler on return.
+* Fix GC_init_lib_bounds (and GC_init, GC_get_main_stack_base) regarding
+malloc redirection.
+* Fix duplicate definitions in gcconfig.h for NetBSD.
+* Fix gc_cpp.cc for Cygwin (remove duplicate function definition).
+* Fix mach_dep.c to include sys/ucontext.h on Mac OS X 10.6.
+* Fix various warnings reported by LINT-like tools
+* Port some thread tests to Win32.
+* Refine API GC setters and getter comments regarding locking.
+* Remove duplicate calls in GC_register_dynamic_libraries.
+* Remove locking in API GC_get_bytes_since_gc and friends.
+* Remove newly-added GC_get_heap_size/free_bytes_inner from API.
+* Remove some local variables that are unused.
+* Support multi-threading for RTEMS target.
+* Use global GC_noop_sink variable in GC_noop1 to suppress compiler warning.
+* Use pkg-config to pick up libatomic_ops, etc.
+
+
+[7.2alpha6] 2011-06-14
+======================
+
+* configure_atomic_ops.sh: Remove.
+* Makefile.direct (dist gc.tar): Remove configure_atomic_ops.sh.
+* Makefile.am (EXTRA_DIST): Add autogen.sh.
+
+* NT_STATIC_THREADS_MAKEFILE (.cpp.obj): Remove duplicate .cpp
+filename passed.
+* NT_X64_THREADS_MAKEFILE (.cpp.obj): Use lowercase file
+extension.
+* NT_X64_STATIC_THREADS_MAKEFILE (.cpp.obj): Likewise.
+* NT_MAKEFILE (.cpp.obj): Likewise.
+
+* alloc.c (GC_add_current_malloc_heap, GC_build_back_graph,
+GC_traverse_back_graph): Move prototype to gc_priv.h.
+* checksums.c (GC_page_was_ever_dirty): Likewise.
+* dbg_mlc.c (GC_default_print_heap_obj_proc): Likewise.
+* dyn_load.c (GC_parse_map_entry, GC_get_maps,
+GC_segment_is_thread_stack, GC_roots_present, GC_is_heap_base,
+GC_get_next_stack): Likewise.
+* finalize.c (GC_reset_finalizer_nested,
+GC_check_finalizer_nested): Likewise.
+* gcj_mlc.c (GC_start_debugging, GC_store_debug_info): Likewise.
+* malloc.c (GC_extend_size_map, GC_text_mapping): Likewise.
+* mark_rts.c (GC_mark_thread_local_free_lists): Likewise.
+* misc.c (GC_register_main_static_data, GC_init_win32,
+GC_setpagesize, GC_init_linux_data_start,
+GC_set_and_save_fault_handler, GC_init_dyld, GC_init_netbsd_elf,
+GC_initialize_offsets, GC_bl_init, GC_do_blocking_inner,
+GC_bl_init_no_interiors): Likewise.
+* os_dep.c (GC_greatest_stack_base_below, GC_push_all_stacks):
+Likewise.
+* reclaim.c (GC_check_leaked): Likewise.
+* win32_threads.c (GC_gww_dirty_init): Likewise.
+* darwin_stop_world.c (GC_is_mach_marker, GC_mprotect_stop,
+GC_mprotect_resume): Move prototype to darwin_stop_world.h.
+* pthread_support.c (GC_FindTopOfStack): Likewise.
+* dyn_load.c (GC_cond_add_roots): Merge adjacent definitions.
+* mark.c (GC_page_was_ever_dirty): Remove (as already declared).
+* mark_rts.c (GC_roots_present): Change return type to void
+pointer (to match the prototype); return NULL instead of FALSE.
+* mark_rts.c (GC_add_roots_inner): Cast GC_roots_present() result.
+* os_dep.c (NEED_PROC_MAPS): Move definition to gcconfig.h.
+* os_dep.c (GC_write_fault_handler): Make STATIC.
+* os_dep.c (GC_set_write_fault_handler): New function (only if
+GC_WIN32_THREADS).
+* pthread_start.c (GC_start_rtn_prepare_thread,
+GC_thread_exit_proc): Move prototype to pthread_support.h.
+* pthread_support.c (GC_nacl_initialize_gc_thread,
+GC_nacl_shutdown_gc_thread, GC_unblock_gc_signals):
+Likewise.
+* pthread_support.c (GC_stop_init): Move prototype to
+pthread_stop_world.h.
+* win32_threads.c (GC_write_fault_handler): Remove prototype.
+* win32_threads.c (GC_register_my_thread_inner): Call
+GC_set_write_fault_handler instead of SetUnhandledExceptionFilter
+(only if MPROTECT_VDB).
+* doc/README.win32: Add information about DMC.
+* include/private/gc_priv.h (GC_set_write_fault_handler): New
+prototype (only if GC_WIN32_THREADS and MPROTECT_VDB).
+
+* misc.c (vsnprintf): Redirect to vsprintf() if NO_VSNPRINTF.
+
+* win32_threads.c (GC_unregister_my_thread): Use KNOWN_FINISHED()
+instead of FINISHED macro.
+* tests/test.c (check_heap_stats): Round up max_heap_sz value for
+Win32 (same as for USE_MMAP).
+
+* tests/test.c (check_heap_stats): Adjust printf format specifier
+for max_heap_sz; cast max_heap_sz accordingly.
+
+* doc/README.solaris2: Add note.
+
+* configure.ac (SOLARIS25_PROC_VDB_BUG_FIXED): Don't define for
+Solaris/x86 2.10+.
+
+* tests/threadkey_test.c (SKIP_THREADKEY_TEST): Skip the test if
+defined; explicitly define for some targets.
+
+* mark.c (GC_dirty): Add prototype (only if MANUAL_VDB).
+* stubborn.c (GC_dirty): Likewise.
+* include/private/gcconfig.h (GWW_VDB, MPROTECT_VDB, PCR_VDB,
+PROC_VDB): Undefine if MANUAL_VDB.
+* include/private/gcconfig.h (DEFAULT_VDB): Don't define if
+MANUAL_VDB.
+* os_dep.c (async_set_pht_entry_from_index): Define for
+MANUAL_VDB.
+* os_dep.c (GC_read_dirty): Set GC_dirty_maintained only if
+success; if ioctl() failed then just print warning instead of
+aborting.
+
+* include/private/gc_priv.h (GC_ASSERT): Use "%d" (instead of %ld)
+for line number printing.
+
+* os_dep.c (GC_read_dirty): Add debug logging if DEBUG_DIRTY_BITS
+(for PROC_VDB only); print errors via GC_err_printf; rename "ps"
+and "np" local variables to npages and pagesize, respectively;
+remove "current_addr" local variable.
+
+* os_dep.c (GC_get_main_stack_base): Convert to GC_get_stack_base
+for BeOS and OS/2; define HAVE_GET_STACK_BASE.
+* os_dep.c (GET_MAIN_STACKBASE_SPECIAL): Define when a specific
+GC_get_main_stack_base implementation is defined.
+* os_dep.c (GC_get_main_stack_base): Define that based on
+GC_get_stack_base() in a single place (only if
+GET_MAIN_STACKBASE_SPECIAL is unset); check GC_get_stack_base()
+result.
+
+* mark.c (GC_push_selected): Remove "push_fn" argument (use
+GC_push_all directly); update the documentation.
+* mark.c (GC_push_conditional): Simplify the code (for better
+readability).
+
+* mark.c (alloc_mark_stack): Use FALSE/TRUE (instead of 0/1) for
+boolean local variables.
+* doc/README.macros (GC_PREFER_MPROTECT_VDB): Update.
+* os_dep.c (GC_page_was_dirty, GC_page_was_ever_dirty,
+GC_remove_protection): Define for GWW_VDB and PROC_VDB in a single
+place.
+* os_dep.c (GC_page_was_dirty, GC_page_was_ever_dirty): Compute
+PHT_HASH(h) only once (store result to a local variable).
+
+* doc/README.solaris2: Update.
+
+* include/private/gcconfig.h (end, InitStackBottom): Declare
+extern variable for RTEMS.
+* include/private/gcconfig.h (DATASTART, DATAEND, STACKBOTTOM):
+Update (for RTEMS).
+* include/private/gcconfig.h (DATAEND): Fix a typo in the macro
+name (for RTEMS).
+* tests/test.c (CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER):
+Replace with CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER (for RTEMS).
+
+* include/private/gcconfig.h (MPROTECT_VDB): Enable for Solaris in
+single-threaded environment.
+
+* include/private/gcconfig.h (MPROTECT_VDB): Undefine if PROC_VDB.
+* tests/test.c (NUMBER_ROUND_UP): New macro.
+* tests/test.c (check_heap_stats): Round up total expected heap
+size to the nearest 4 MiB bound.
+* tests/test.c (check_heap_stats): Print the current and expected
+heap sizes in case of failure.
+
+* checksums.c (GC_check_blocks, GC_check_dirty): Do log printing
+only if GC_print_stats; print errors using GC_err_printf.
+* checksums.c (GC_check_blocks): Join adjacent printf() calls into
+a single one.
+
+* pthread_support.c (pthread_join): Add assertion (check thread is
+finished).
+* pthread_support.c (GC_register_my_thread): Don't detach the
+thread if invoked from the thread destructor.
+* win32_threads.c (GC_register_my_thread): Likewise.
+* win32_threads.c (GC_unregister_my_thread): Don't delete the
+thread (just set FINISHED) if the thread is not detached (only if
+GC_PTHREADS); add assertion (check the thread is not finished).
+* tests/threadkey_test.c (main): Join some created threads.
+
+* pthread_support.c (GC_delete_gc_thread): Rename "gc_id" local
+variable to "t".
+* win32_threads.c (GC_delete_gc_thread): Likewise.
+* pthread_support.c (pthread_join, pthread_detach,
+pthread_cancel): Rename "thread_gc_id" local variable to "t".
+* win32_threads.c (GC_pthread_detach): Likewise.
+* win32_threads.c (GC_delete_gc_thread): Remove "gc_nvid" local
+variable.
+* win32_threads.c (GC_pthread_join): Rename "joinee" local
+variable to "t".
+
+* pthread_stop_world.c (pthread_sigmask): Undefine even if not
+DEBUG_THREADS.
+* pthread_stop_world.c (GC_unblock_gc_signals): New function (only
+if GC_EXPLICIT_SIGNALS_UNBLOCK).
+* pthread_support.c (GC_unblock_gc_signals): New prototype.
+* pthread_support.c (GC_register_my_thread_inner,
+GC_register_my_thread): Call GC_unblock_gc_signals (only if
+GC_EXPLICIT_SIGNALS_UNBLOCK); add comment.
+* include/private/gcconfig.h (GC_EXPLICIT_SIGNALS_UNBLOCK): New
+macro.
+
+* pthread_stop_world.c (GC_suspend_handler_inner): Remove "dummy",
+"sig" local variables; rename my_thread local variable to "self".
+
+* tests/threadkey_test.c (LIMIT): Use smaller value (don't create
+more than 30 in parallel by default).
+
+* tests/threadkey_test.c (key_once, main): Work around for Solaris
+PTHREAD_ONCE_INIT.
+* tests/threadkey_test.c (LIMIT): Use smaller value for Solaris.
+
+* dyn_load.c (GC_FirstDLOpenedLinkMap): Remove unused "r" local
+variable.
+* pthread_support.c (GC_unregister_my_thread_inner): Revert back
+GC_remove_specific invocation; add a comment.
+* include/private/thread_local_alloc.h (GC_remove_specific):
+Revert back.
+* specific.c (slow_getspecific): Cast qtid to AO_t.
+* include/private/specific.h (key_create, setspecific,
+remove_specific): Remove "extern" keyword.
+* include/private/specific.h (getspecific): Change type of "qtid"
+local variable to unsigned long.
+
+* pthread_support.c (GC_check_tls): Fix "#endif" comment.
+* include/gc.h (GC_REDIRECT_TO_LOCAL): Remove deprecated comment.
+* include/private/thread_local_alloc.h (THREAD_LOCAL_ALLOC):
+Remove redundant test of the macro.
+
+* backgraph.c (add_edge): Recognize DEBUG_PRINT_BIG_N_EDGES macro.
+* os_dep.c (GC_set_and_save_fault_handler): Recognize
+SIGACTION_FLAGS_NODEFER_HACK macro.
+* pthread_support.c (mark_mutex): Recognize GLIBC_2_1_MUTEX_HACK
+macro.
+* pthread_support.c (GC_acquire_mark_lock): Remove commented out
+code.
+* include/private/gc_priv.h (SUNOS5SIGS): Don't include
+sys/siginfo.h on Linux.
+* include/private/gcconfig.h (FORCE_WRITE_PREFETCH): New macro
+recognized, force PREFETCH_FOR_WRITE to be defined on x86.
+* include/private/gcconfig.h (USE_HPUX_FIXED_STACKBOTTOM): New
+macro recognized (for HP/UX).
+
+* os_dep.c (GC_gww_page_was_ever_dirty): Fix comment (for
+GWW_VDB).
+* os_dep.c (GC_dirty_init): Use memset() for GC_written_pages
+resetting (for PROC_VDB).
+
+* tests/threadkey_test.c: New file.
+* tests/tests.am (TESTS, check_PROGRAMS): Add 'threadkey_test'.
+* tests/tests.am (threadkey_test_SOURCES, threadkey_test_LDADD):
+New variable.
+
+* pthread_support.c (GC_unregister_my_thread_inner): Don't call
+GC_remove_specific.
+* include/private/thread_local_alloc.h (GC_remove_specific):
+Remove (since it is empty for all targets).
+* pthread_support.c (GC_record_stack_base): New inline function.
+* win32_threads.c (GC_record_stack_base): Likewise.
+* pthread_support.c (GC_register_my_thread_inner): Invoke
+GC_record_stack_base.
+* win32_threads.c (GC_register_my_thread_inner): Likewise.
+* pthread_support.c (GC_register_my_thread): If thread is FINISHED
+then call GC_record_stack_base, clear FINISHED, initialize
+thread-local list and return success.
+* win32_threads.c (GC_register_my_thread): Likewise.
+* include/gc.h (GC_register_my_thread): Update documentation.
+* include/private/thread_local_alloc.h (GC_thread_key): Likewise.
+
+* thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Join
+adjacent "#ifdef".
+* thread_local_alloc.c (GC_malloc_atomic): Call
+GC_core_malloc_atomic (instead of GC_core_malloc).
+
+* pthread_start.c (GC_start_rtn_prepare_thread): Change return
+type to GC_thread.
+* pthread_start.c (GC_inner_start_routine): Pass the current
+thread descriptor to pthread_cleanup_push (same as in
+win32_threads.c).
+* pthread_stop_world.c (GC_push_all_stacks): Rename "me" local
+variable to "self".
+* win32_threads.c (GC_push_all_stacks): Likewise.
+* pthread_stop_world.c (GC_suspend_all, GC_start_world): Rename
+"my_thread" local variable to "self".
+* pthread_support.c (GC_unregister_my_thread_inner): New static
+function.
+* pthread_support.c (GC_unregister_my_thread,
+GC_thread_exit_proc): Use GC_unregister_my_thread_inner.
+* win32_threads.c (GC_register_my_thread, GC_unregister_my_thread,
+GC_do_blocking_inner): Rename "t" local variable to "thread_id".
+* win32_threads.c (GC_wait_marker, GC_notify_all_marker): Rename
+"id" local variable to "thread_id".
+
+* pthread_support.c (GC_unregister_my_thread): Call pthread_self
+only once.
+* win32_threads.c (GC_pthread_start_inner): Likewise.
+* pthread_support.c (GC_unregister_my_thread): Add debug output.
+* win32_threads.c (GC_unregister_my_thread): Likewise.
+* pthread_support.c (GC_register_my_thread,
+GC_start_rtn_prepare_thread): Rename "my_pthread" local variable
+to "self".
+
+* include/gc.h (GC_HIDE_POINTER, GC_REVEAL_POINTER): Define
+unconditionally (do not test GC_I_HIDE_POINTERS); update the
+comment.
+* include/gc.h (HIDE_POINTER, REVEAL_POINTER): Define as alias to
+GC_HIDE/REVEAL_POINTER, respectively.
+* include/private/gc_pmark.h (GC_I_HIDE_POINTERS): Do not define.
+* include/private/gc_priv.h (GC_I_HIDE_POINTERS): Likewise.
+
+* include/gc.h (GC_register_my_thread): Refine the comment.
+
+* include/gc_inline.h (GC_MALLOC_WORDS, GC_CONS): Add missing
+parentheses.
+* include/gc_typed.h (GC_get_bit, GC_set_bit,
+GC_CALLOC_EXPLICITLY_TYPED): Likewise.
+
+* include/private/gcconfig.h (NO_GETCONTEXT): Add missing ')'.
+
+* include/private/gcconfig.h (NO_GETCONTEXT): Do not use
+getcontext(2) on m68k because it is not implemented there.
+
+* alloc.c (GC_clear_a_few_frames): Use BZERO().
+* mark_rts.c (GC_clear_roots, GC_rebuild_root_index): Likewise.
+* reclaim.c (GC_start_reclaim): Likewise.
+* blacklst.c (total_stack_black_listed): Remove "len" local
+variable.
+* dbg_mlc.c (GC_generate_random_valid_address): Replace "for"
+statement with "do-while" one.
+* dyn_load.c (GC_register_dynamic_libraries,
+GC_register_dynlib_callback): Remove redundant parentheses.
+
+* cord/cordxtra.c (CORD_from_file_lazy_inner): Suppress
+"unused result" compiler warning for fread().
+
+* os_dep.c (GC_write_fault_handler): Break when in_allocd_block
+is set to true.
+
+* dbg_mlc.c (GC_has_other_debug_info): Change return type to int;
+return -1 if the object has (or had) debugging info but was
+marked deallocated.
+* include/private/dbg_mlc.h (GC_has_other_debug_info): Likewise.
+* dbg_mlc.c (GC_has_other_debug_info): Update documentation;
+remove "ohdr" local variable.
+* dbg_mlc.c (GC_debug_free): Don't call GC_free if the object has
+probably been deallocated.
+* dbg_mlc.c (GC_debug_free): Don't actually free the object even
+in the leak-finding mode if GC_findleak_delay_free.
+* dbg_mlc.c (GC_check_leaked): New function (only unless
+SHORT_DBG_HDRS).
+* doc/README.environment (GC_FINDLEAK_DELAY_FREE): Document.
+* doc/README.macros (GC_FINDLEAK_DELAY_FREE): Likewise.
+* include/private/dbg_mlc.h (START_FLAG, END_FLAG): Use GC_WORD_C
+on 64-bit architectures.
+* include/private/dbg_mlc.h (NOT_MARKED): Remove redundant
+parentheses.
+* include/private/dbg_mlc.h (GC_HAS_DEBUG_INFO): Update (due to
+GC_has_other_debug_info change).
+* include/private/gc_priv.h (GC_findleak_delay_free): New global
+variable declaration (unless SHORT_DBG_HDRS).
+* misc.c (GC_findleak_delay_free): New global variable; recognize
+GC_FINDLEAK_DELAY_FREE.
+* misc.c (GC_init): Recognize GC_FINDLEAK_DELAY_FREE environment
+variable (unless SHORT_DBG_HDRS).
+* reclaim.c (GC_check_leaked): Declare (unless SHORT_DBG_HDRS).
+* reclaim.c (GC_add_leaked): Don't add the object to leaked list
+if marked as deallocated.
+
+* dbg_mlc.c (GC_has_other_debug_info): Fix punctuation in the
+comment.
+* dbg_mlc.c (GC_FREED_MEM_MARKER): New macro.
+* dbg_mlc.c (GC_debug_free): Use GC_FREED_MEM_MARKER.
+* dbg_mlc.c (GC_smashed): Refine documentation.
+* mark.c (GC_push_selected): Change dirty_fn return type to
+GC_bool.
+* os_dep.c (GC_page_was_ever_dirty): Make GC_INNER.
+* reclaim.c (GC_reclaim_small_nonempty_block): Remove "kind"
+local  variable.
+* reclaim.c (GC_reclaim_block): Pass true constant to
+GC_reclaim_small_nonempty_block (instead of report_if_found).
+* doc/README.autoconf: Update; fix a typo.
+* include/private/gcconfig.h (GC_WORD_C): New macro.
+
+* dbg_mlc.c (GC_store_debug_info_inner): Cast "linenum".
+* dbg_mlc.c (GC_check_annotated_obj): Fix punctuation in the
+comment.
+* dbg_mlc.c (GC_print_smashed_obj): Add (and print) "msg"
+argument.
+* dbg_mlc.c (GC_debug_free, GC_print_all_smashed_proc): Pass
+message to GC_print_smashed_obj.
+* dbg_mlc.c (GC_debug_free): Call GC_size once.
+* dbg_mlc.c (GC_debug_realloc): Calculate old_sz only if
+allocation succeeded; remove unnecessary check for object is
+smashed (since this is done in GC_debug_free); remove "clobbered"
+local variable.
+
+* dbg_mlc.c (GC_store_debug_info_inner, GC_store_debug_info):
+Rename "integer" argument to "linenum"; change the type of the
+argument to int.
+* gcj_mlc.c (GC_store_debug_info): Likewise.
+* dbg_mlc.c (GET_OH_LINENUM): New macro.
+* dbg_mlc.c (GC_print_obj, GC_print_smashed_obj): Use
+GET_OH_LINENUM; adjust print format specifier.
+* dbg_mlc.c (GC_debug_malloc, GC_debug_malloc_ignore_off_page,
+GC_debug_malloc_atomic_ignore_off_page,
+GC_debug_generic_malloc_inner,
+GC_debug_generic_malloc_inner_ignore_off_page,
+GC_debug_malloc_stubborn, GC_debug_malloc_atomic,
+GC_debug_malloc_uncollectable,
+GC_debug_malloc_atomic_uncollectable): Remove unnecessary cast of
+"i".
+* gcj_mlc.c (GC_debug_gcj_malloc): Likewise.
+
+* os_dep.c (GC_linux_stack_base): Rename to
+GC_linux_main_stack_base.
+* os_dep.c (GC_freebsd_stack_base): Rename to
+GC_freebsd_main_stack_base; adjust error message.
+* pthread_stop_world.c (GC_stop_init): Use GC_SEM_INIT_PSHARED
+as an argument for sem_init().
+* pthread_support.c (pthread_create): Likewise.
+* pthread_support.c (pthread_create): Abort in case sem_init()
+fails.
+* include/private/gc_priv.h (GC_SEM_INIT_PSHARED): Define.
+* tests/initsecondarythread.c: Include gcconfig.h; call GC_INIT
+from main() if it should be done from the primordial thread only.
+
+* alloc.c: Don't include sys/types.h for ArmCC.
+* dyn_load.c: Likewise.
+* os_dep.c: Likewise.
+* mach_dep.c (_setjmp, _longjmp): Redirect to setjmp/longjmp for
+ArmCC.
+* mark.c (GC_noop): Define specially for ArmCC.
+* include/private/gc_priv.h (GC_noop): Likewise.
+* misc.c (GC_init): Don't test pointers comparison for ArmCC.
+* misc.c: Don't include unistd.h for ArmCC.
+* os_dep.c (pages_executable): Rename to GC_pages_executable;
+make STATIC.
+* os_dep.c (GC_unix_mmap_get_mem): Don't define for ArmCC.
+* ptr_chck.c (GC_is_visible): Explicitly cast
+(GC_DS_PER_OBJECT-GC_INDIR_PER_OBJ_BIAS) to word (to suppress
+a compiler warning).
+* include/private/gcconfig.h: Recognize __arm.
+* include/private/gcconfig.h (HBLKPTR): Define for ArmCC.
+* include/private/gcconfig.h (HBLKPTR): Add parentheses for
+"bytes" argument.
+
+* pthread_support.c (GC_get_nprocs): Don't define for Android.
+* pthread_support.c (GC_dummy_thread_local): Don't test
+GC_LINUX_THREADS.
+* include/gc_config_macros.h (GC_ADD_CALLER, GC_RETURN_ADDR):
+Define for Android.
+
+* mach_dep.c (NO_GETCONTEXT): Move to gcconfig.h.
+* os_dep.c (GC_write_fault_handler): Don't include ucontext.h if
+NO_GETCONTEXT.
+* include/private/gcconfig.h (GETPAGESIZE): Define as a sysconf
+call for Android.
+
+* include/private/gc_locks.h (WIN32_LEAN_AND_MEAN, NOSERVICE):
+Define before including windows.h.
+* include/private/gc_priv.h (WIN32_LEAN_AND_MEAN, NOSERVICE):
+Likewise.
+* include/private/thread_local_alloc.h (WIN32_LEAN_AND_MEAN,
+NOSERVICE): Likewise.
+* include/private/gc_priv.h (MS_TIME_DIFF): Avoid floating-point
+arithmetics; add a comment.
+
+* mark.c (GC_clear_hdr_marks): Don't test USE_MARK_BYTES.
+* extra/setjmp_t.c (main): Don't test USE_MARK_BITS.
+* include/private/gc_pmark.h (SET_MARK_BIT_EXIT_IF_SET): Likewise.
+* include/private/gc_pmark.h (SET_MARK_BIT_EXIT_IF_SET): Remove
+"mark_byte" local variable.
+* include/private/gc_pmark.h (OR_WORD_EXIT_IF_SET): Add a comment
+about that AO_or() is not used by GC unless USE_MARK_BITS
+explicitly set.
+* include/private/gc_priv.h (OR_WORD): Likewise.
+* include/private/gc_pmark.h (INCR_MARKS): Remove trailing ';',
+add parentheses.
+* include/private/gc_priv.h (ONES): Define before use by
+MAKE_COOLER.
+* include/private/gc_priv.h (MARK_BITS_SZ): Define where used.
+* include/private/gc_priv.h (OR_WORD): Don't define if
+USE_MARK_BYTES.
+* include/private/gcconfig.h (USE_MARK_BYTES); Remove duplicate
+definition; simplify expression.
+
+* os_dep.c (GC_get_maps): Always close the file.
+* pthread_support.c (GC_get_nprocs): Likewise.
+* os_dep.c (READ): Define similarly across the file (without
+parameters).
+* pthread_support.c (GC_get_nprocs): Use signed int type for "i"
+and "len" local variables (since read() may return -1).
+* include/private/gc_pmark.h (LONG_MULT): Add prefix/suffix
+double underscore; add "volatile" for asm.
+* include/private/gc_pmark.h (LONG_MULT): Add missing
+parentheses.
+* include/private/gc_priv.h (OR_WORD): Likewise.
+* include/private/gc_priv.h (OR_WORD): Remove unnecessary brackets
+and ';' symbol.
+
+* os_dep.c (GC_get_stack_base): Implement for Android (same as
+for Linux).
+* pthread_support.c (GC_get_nprocs): Return 1 (instead of -1) if
+failed to open "stat" file (not to issue a warning twice); update
+the comment.
+* pthread_support.c (GC_thr_init): Call sysconf() on Android to
+get the number of CPUs.
+
+* include/private/gc_priv.h (_GNU_SOURCE): Revert one of the
+recent patches regarding this macro as the macro should be set
+(to 1) before including any other system header.
+
+* doc/README.environment (GC_INITIAL_HEAP_SIZE,
+GC_MAXIMUM_HEAP_SIZE): Update.
+
+* misc.c (GC_parse_mem_size_arg): Allow 'k', 'M', 'G' suffixes in
+heap size specifier; return 0 if not a valid one.
+* include/gc_cpp.h: Explicitly define inline one-argument delete
+operator for Cygwin (as a workaround).
+* tests/test_cpp.cc (main): Suppress compiler warnings about
+"assigned value is unused".
+
+* misc.c (GC_parse_mem_size_arg): New function.
+* misc.c (GC_init): Use GC_parse_mem_size_arg().
+* pthread_stop_world.c (tkill): Declare for Android.
+
+* include/private/gc_priv.h (_GNU_SOURCE): Include features.h
+first (except for NaCl) and then define the macro to 1 if not yet.
+
+* tests/tests.am (TESTS, check_PROGRAMS): Add
+'initsecondarythread'.
+* tests/tests.am (initsecondarythread_SOURCES,
+initsecondarythread_LDADD): New variable.
+
+* dbg_mlc.c (GC_store_debug_info_inner): Always define; add
+"const" to its string argument.
+* dbg_mlc.c (GC_store_debug_info): Call GC_store_debug_info_inner.
+* dbg_mlc.c (GC_debug_free): Set GC_have_errors in case of
+smashed or previously deallocated found.
+* dbg_mlc.c (GC_check_heap_block): Replace while loop with a for
+one.
+* reclaim.c (GC_reclaim_check): Likewise.
+* dbg_mlc.c (GC_check_heap_proc): Remove redundant cast to word.
+* os_dep.c (GC_get_stack_base): Don't initialize
+stackbase_main_self/ss_sp on Solaris if thr_main() is zero (thus
+calling GC_INIT() from a non-primordial thread is possible now).
+* reclaim.c (GC_add_leaked): Turn into an inline one.
+* reclaim.c (GC_reclaim_small_nonempty_block):
+Change report_if_found type from int/word to boolean.
+* include/private/gc_priv.h (GC_start_reclaim): Likewise.
+* include/private/gc_priv.h (set_mark_bit_from_hdr,
+clear_mark_bit_from_hdr): Place closing parenthesis properly.
+
+* os_dep.c (GC_get_main_stack_base): Try to use
+pthread_attr_getstack first for Linux if THREADS.
+* doc/README.macros (USE_GET_STACKBASE_FOR_MAIN): Adjust text
+alignment.
+
+* dbg_mlc.c (GC_generate_random_backtrace_no_gc): Fix a message
+typo.
+* dbg_mlc.c (GC_debug_malloc): Add a comment (about zero size).
+* dbg_mlc.c (GC_strdup): Call GC_err_printf instead of WARN (in
+case of NULL argument).
+* dbg_mlc.c (GC_free): In case of NULL argument, just return
+(without any warning printed); eliminate "uncollectable" local
+variable.
+
+* configure.ac (THREADDLLIBS): Use alternate thread library on
+Solaris 8.
+* configure.ac (need_atomic_ops_asm): Set to true only for Sparc
+Solaris.
+* configure.ac: Don't use libdl on mips-sgi-irix6.
+
+* mach_dep.c (NO_GETCONTEXT); Define for RTEMS.
+* mach_dep.c (GC_with_callee_saves_pushed): Don't call
+__builtin_unwind_init() for RTEMS; use setjmp() without the
+leading underscore (for RTEMS).
+* tests/test.c (BIG): Use smaller value for RTEMS.
+* tests/test.c (main): Customize for RTEMS.
+
+* configure.host: Remove doubled words in comments.
+* os_dep.c: Likewise.
+* doc/README: Likewise.
+* extra/setjmp_t.c: Likewise.
+* tests/huge_test.c: Likewise.
+* extra/setjmp_t.c (getpagesize, nested_sp, main, g): Replace the
+K&R-style function definition with the ANSI C one.
+* extra/setjmp_t.c (nested_sp): Implement in the same way as
+GC_approx_sp.
+
+* dyn_load.c (GC_dyld_sections): Add more sctions.
+* dyn_load.c (GC_dyld_add_sect_fmts): New static varaible.
+* dyn_load.c (L2_MAX_OFILE_ALIGNMENT): New macro.
+* dyn_load.c (GC_dyld_image_add, GC_dyld_image_remove): Improve
+logging; add support for on-demand sections.
+
+* gcj_mlc.c (GC_gcj_malloc_initialized): Use STATIC unless
+GC_ASSERTIONS.
+* include/private/gc_priv.h (GC_gcj_malloc_initialized): Don't
+declare (as external) unless GC_ASSERTIONS.
+* os_dep.c (GC_win32_free_heap): Clear GC_heap_bases[] also for
+Cygwin; add FIXME.
+* include/private/gcconfig.h: Include <sys/unistd.h> for RTEMS.
+* include/private/gcconfig.h: Add "#error" for every "-->" mark.
+* include/private/gcconfig.h (CLEAR_DOUBLE): Turn the code into
+an expression.
+* include/private/pthread_support.h (SUSPENDED_EXT): Add new flag
+(which existed previously as SUSPENDED and still exists in GCJ).
+* include/private/pthread_support.h (DISABLED_GC): Change the
+value (as it is already used by SUSPENDED_EXT).
+
+* tests/test.c (reverse_test):  Modify count (BIG) for
+ppc64-darwin.
+
+* reclaim.c (GC_print_all_errors): Recognize new GC_ABORT_ON_LEAK
+macro and environment variable; abort if any error has been
+printed provided the environment variable (or macro) is set.
+* doc/README.environment (GC_ABORT_ON_LEAK): Document.
+* doc/README.macros (GC_ABORT_ON_LEAK): Likewise.
+
+* os_dep.c (GC_unix_sbrk_get_mem, GC_unix_get_mem): Don't define
+for RTEMS.
+* include/private/gcconfig.h (RTEMS): Add support for.
+* include/private/gcconfig.h (GET_MEM): Use calloc() for RTEMS.
+
+* mallocx.c (GC_malloc_uncollectable): Move to malloc.c (since
+it is used internally in some places).
+
+* dbg_mlc.c (GC_register_finalizer_no_order): Remove redundant
+declaration.
+* dbg_mlc.c (GC_debug_malloc_replacement,
+GC_debug_realloc_replacement): Rename RA to GC_DBG_RA.
+* malloc.c (GC_debug_malloc_replacement): Likewise.
+* mallocx.c (GC_debug_realloc_replacement): Likewise.
+* dbg_mlc.c (GC_store_debug_info): Move proto from dbg_mlc.h.
+* malloc.c (GC_strdup, GC_strndup, GC_wcsdup): Move to mallocx.c.
+* malloc.c: Include errno.h only REDIRECT_MALLOC; remove redundant
+includes of string.h.
+* mallocx.c: Include string.h (for GC_strdup).
+* include/private/dbg_mlc.h (GC_store_debug_info): Move declaration
+to dbg_mlc.c.
+* include/private/gc_locks.h (UNCOND_LOCK, UNCOND_UNLOCK): Remove
+redundant trailing ';'.
+* include/private/gc_priv.h (START_WORLD, COND_DUMP): Likewise.
+* include/private/gc_locks.h (LOCK, UNLOCK): Place opening '{'
+properly.
+* include/private/gc_priv.h (GC_DBG_RA): Move from dbg_mlc.c,
+malloc.c, mallocx.c.
+
+* alloc.c (GC_check_heap, GC_print_all_smashed): Move the
+definition from misc.c.
+* dbg_mlc.c (GC_debug_malloc_atomic_uncollectable): Define as
+public.
+* include/gc.h (GC_debug_malloc_atomic_uncollectable): Declare.
+* include/gc.h (GC_MALLOC_ATOMIC_UNCOLLECTABLE): Define new public
+macro.
+* dbg_mlc.c (MAX_SMASHED): Don't define if already set.
+* reclaim.c (MAX_LEAKED): Likewise.
+* dbg_mlc.c (GC_add_smashed): Add FIXME about the concurrent
+access to the global array.
+* reclaim.c (GC_add_leaked): Likewise.
+* misc.c (GC_print_back_height): Set on if GC_PRINT_BACK_HEIGHT
+(new macro) is defined.
+* doc/README.macros (GC_PRINT_BACK_HEIGHT): Document.
+* misc.c (GC_dump_regularly, GC_init): Replace 0/1 for
+GC_dump_regularly and GC_print_back_height variables with
+FALSE/TRUE.
+* reclaim.c (GC_print_all_errors): Refine the comment.
+
+* tests/test.c (reverse_test_inner): Undo one of the previous
+patches which shifts "c" and "d" pointers only if
+ALL_INTERIOR_POINTERS (since interior pointers are always
+recognized in stacks).
+
+* misc.c (GC_stdout, GC_stderr): Move the definition to the place
+where GC_log is defined (Unix only).
+* misc.c (GC_init): Recognize "GC_ONLY_LOG_TO_FILE" environment
+variable and the similar macro; redirect GC_stdout and GC_stderr
+to GC_log if "GC_LOG_FILE" environment variable is set unless
+prohibited by GC_ONLY_LOG_TO_FILE (Unix only).
+* doc/README.environment (GC_ONLY_LOG_TO_FILE): Document.
+* doc/README.macros (GC_ONLY_LOG_TO_FILE): Likewise.
+
+* misc.c (GC_stdout, GC_write): Rename GC_stdout to GC_log (Win32
+only).
+* misc.c (GC_write): Add for MacOS (and OS/2); change WRITE()
+accordingly.
+* misc.c (GC_printf): Check GC_quiet before va_start().
+
+* allchblk.c (GC_freehblk): Use GC_log_printf instead of GC_printf
+inside "if (GC_print_stats)" branch.
+* alloc.c (GC_collect_or_expand): Likewise.
+* dyn_load.c (GC_register_dynamic_libraries): Likewise.
+* headers.c (GC_scratch_alloc): Likewise.
+* os_dep.c (GC_get_maps, GC_remap, PROTECT,
+GC_write_fault_handler, GC_dirty_init, GC_mprotect_thread): Likewise.
+* alloc.c (min_bytes_allocd): Use GC_log_printf instead of
+GC_printf for DEBUG_THREADS output.
+* darwin_stop_world.c (GC_stack_range_for, GC_suspend_thread_list,
+GC_stop_world, GC_thread_resume, GC_start_world): Likewise.
+* pthread_start.c (GC_inner_start_routine): Likewise.
+* pthread_stop_world.c (GC_suspend_handler, GC_restart_handler,
+GC_push_all_stacks, GC_suspend_all, GC_stop_world,
+GC_start_world): Likewise.
+* pthread_support.c (GC_mark_thread, GC_get_nprocs,
+GC_start_rtn_prepare_thread, pthread_create): Likewise.
+* checksums.c (GC_update_check_page): Use GC_printf() instead of
+GC_err_printf() for error printing.
+* checksums.c (GC_check_blocks, GC_check_dirty): Use GC_log_printf
+instead of GC_printf for logging purposes.
+* dyn_load.c (sys_errlist, sys_nerr, errno): Move declaration of
+external variable outside from GC_register_dynamic_libraries.
+* dyn_load.c (GC_register_dynamic_libraries): Don't use
+sys_errlist value if errno equals to sys_nerr.
+* dyn_load.c (GC_register_dynamic_libraries): Use GC_log_printf
+instead of GC_printf for DL_VERBOSE output.
+* dyn_load.c (GC_dyld_image_add, GC_dyld_image_remove,
+GC_init_dyld): Use GC_log_printf instead of GC_printf for
+DARWIN_DEBUG output.
+* os_dep.c (catch_exception_raise): Use GC_log_printf
+instead of GC_printf for DEBUG_EXCEPTION_HANDLING output.
+* reclaim.c (GC_print_free_list): Move "n" increment out of
+GC_printf() call.
+
+* win32_threads.c (DEBUG_CYGWIN_THREADS, DEBUG_WIN32_PTHREADS,
+DEBUG_WIN32_THREADS): Remove.
+* win32_threads.c (GC_register_my_thread_inner,
+GC_win32_start_inner): Use GC_log_printf instead of GC_printf
+inside "if (GC_print_stats)" branch.
+* win32_threads.c (GC_PTHREAD_PTRVAL): New macro (defined only if
+GC_PTHREADS).
+* win32_threads.c (GC_delete_gc_thread, NUMERIC_THREAD_ID,
+GC_pthread_join, GC_pthread_create): Use GC_PTHREAD_PTRVAL
+macro.
+* win32_threads.c (GC_push_stack_for, GC_mark_thread,
+GC_CreateThread, GC_beginthreadex, GC_pthread_join,
+GC_pthread_create, GC_pthread_start_inner, GC_thread_exit_proc,
+GC_mark_thread_local_free_lists): Use GC_log_printf instead of
+GC_printf for DEBUG_THREADS output.
+* win32_threads.c (GC_win32_start_inner, GC_CreateThread,
+GC_beginthreadex, GC_pthread_join, GC_pthread_create,
+GC_pthread_start_inner, GC_thread_exit_proc): Cast
+GetCurrentThreadId result to long; don't cast value of pthread_t
+type to int; adjust printf format specifiers.
+* doc/README.win32 (DEBUG_WIN32_PTHREADS): Remove obsolete
+information.
+
+* tests/test.c (cons, small_cons, gcj_cons, check_ints,
+check_uncollectable_ints, print_int_list, check_marks_int_list,
+fork_a_thread, finalizer, mktree, chktree, alloc8bytes,
+alloc_small, tree_test, typed_test, check_heap_stats, WinMain,
+test, main): Remove unnecessary casts of GC_printf calls to void.
+
+* allchblk.c (GC_print_hblkfreelist): Adjust (make uniform across
+BDWGC) printed message (adjust letters case, terminating dot and
+new line symbols).
+* alloc.c (GC_check_fl_marks): Likewise.
+* backgraph.c (new_back_edges): Likewise.
+* checksums.c (GC_check_dirty): Likewise.
+* darwin_stop_world.c (GC_push_all_stacks,
+GC_suspend_thread_list): Likewise.
+* dbg_mlc.c (GC_print_type, GC_debug_free, GC_debug_realloc,
+store_old): Likewise.
+* dyn_load.c (GC_register_dynamic_libraries): Likewise.
+* mark.c (GC_initiate_gc, GC_mark_some, GC_mark_from, GC_push_all,
+GC_push_selected, GC_push_next_marked_dirty): Likewise.
+* mark_rts.c (GC_exclude_static_roots_inner): Likewise.
+* os_dep.c (GC_remap, GC_default_push_other_roots,
+GC_push_thread_structures, GC_dirty_init, GC_read_dirty,
+catch_exception_raise_state, catch_exception_raise_state_identity,
+GC_mprotect_thread_notify, GC_mprotect_thread,
+catch_exception_raise): Likewise.
+* pthread_stop_world.c (GC_print_sig_mask, GC_push_all_stacks,
+GC_stop_world, GC_stop_init): Likewise.
+* pthread_support.c (GC_thr_init, GC_register_my_thread_inner,
+GC_start_routine): Likewise.
+* win32_threads.c (GC_register_my_thread_inner,
+GC_push_all_stacks, GC_win32_start_inner, GC_pthread_join,
+GC_pthread_start_inner): Likewise.
+* alloc.c (GC_expand_hp_inner): Realign the code.
+* mark.c (GC_mark_from, GC_mark_local, GC_do_parallel_mark):
+Likewise.
+* misc.c (GC_init): Likewise.
+* os_dep.c (GC_dirty_init, GC_read_dirty): Likewise.
+* include/private/gc_pmark.h (PUSH_CONTENTS_HDR): Likewise.
+* tests/test.c (run_one_test): Likewise.
+* misc.c (GC_err_puts): Document.
+* misc.c (GC_err_write): Remove.
+* os_dep.c (dump_maps): Likewise.
+* include/private/gc_priv.h (GC_err_write): Likewise.
+* os_dep.c (GC_print_address_map): Call GC_err_puts() instead of
+dump_maps() and GC_err_write().
+* os_dep.c (GC_read_dirty): Remove redundant brackets.
+
+* tests/test.c (reverse_test_inner): Test interior pointer
+recognition only if ALL_INTERIOR_POINTERS.
+* tests/test.c (run_one_test): Replace GC_all_interior_pointers
+with GC_get_all_interior_pointers(); simplify the expression.
+* tests/test.c (check_heap_stats): Replace GC_bytes_allocd and
+GC_bytes_allocd_before_gc with GC_get_total_bytes().
+* tests/test.c (main): Replace GC_gc_no with GC_get_gc_no().
+
+* dbg_mlc.c (GC_debug_strdup, GC_debug_free): Output a portability
+warning if the argument is NULL and GC is in leaks detection mode.
+* dbg_mlc.c (GC_debug_strndup, GC_debug_wcsdup): New public
+function definition.
+* malloc.c (GC_strndup, GC_wcsdup, strndup): Likewise.
+* mallocx.c (GC_posix_memalign): Likewise.
+* malloc.c (strdup): Fix string size value; rename "len" to "lb".
+* mallocx.c: Include errno.h unless WinCE (otherwise include
+windows.h for Win32 error constants).
+* win32_threads.c: Define WIN32_LEAN_AND_MEAN and NOSERVICE before
+windows.h inclusion.
+* misc.c (GC_init): Register at-exit callback if GC_find_leak
+(even if GC_FIND_LEAK macro is unset).
+* pthread_stop_world.c (NACL_STORE_REGS,
+__nacl_suspend_thread_if_needed, GC_nacl_initialize_gc_thread):
+Use BCOPY() instead of memcpy().
+* pthread_support.c (GC_init_real_syms): Likewise.
+* doc/README.macros (GC_DEBUG_REPLACEMENT, GC_REQUIRE_WCSDUP):
+Document new macro.
+* doc/README.macros (REDIRECT_MALLOC): Update documentation.
+* include/gc.h (GC_strndup, GC_posix_memalign, GC_debug_strndup):
+New API function prototype.
+* include/gc.h (GC_MALLOC, GC_REALLOC): Redirect to
+GC_debug_malloc/realloc_replacement() if GC_DEBUG_REPLACEMENT.
+* include/gc.h (GC_STRDUP): Remove redundant parentheses.
+* include/leak_detector.h (realloc, strdup): Likewise.
+* include/gc.h (GC_STRNDUP): New API macro.
+* include/gc.h (GC_NEW, GC_NEW_ATOMIC, GC_NEW_STUBBORN,
+GC_NEW_UNCOLLECTABLE): Add missing parentheses.
+* include/gc.h (GC_wcsdup, GC_debug_wcsdup): New API function
+prototype (only if GC_REQUIRE_WCSDUP).
+* include/gc.h (GC_WCSDUP): New API macro (only if
+GC_REQUIRE_WCSDUP).
+* include/leak_detector.h: Include stdlib.h and string.h after gc.h (unless
+GC_DONT_INCLUDE_STDLIB).
+* include/leak_detector.h (malloc, calloc, free, realloc):
+Undefine symbol before its redefinition.
+* include/leak_detector.h (strndup, memalign, posix_memalign):
+Redefine to the corresponding GC function.
+* include/leak_detector.h (wcsdup): Redefine to GC_WCSDUP (only
+if GC_REQUIRE_WCSDUP).
+* include/leak_detector.h (CHECK_LEAKS): Add comment; don't define
+the macro if already defined.
+
+* misc.c (GC_abort): Use _exit() (instead of DebugBreak) on Win32
+when doing code static analysis (to inform the tool that the
+function is a no-return one).
+* os_dep.c (GC_linux_stack_base): Remove a duplicate validation
+of the length of "stat" file; use signed int type for "i",
+"buf_offset" and "len" local variables (since read() may
+return -1).
+
+* blacklst.c (GC_bl_init_no_interiors): New function (the code
+moved from GC_bl_init).
+* blacklst.c (GC_bl_init): Invoke GC_bl_init_no_interiors unless
+GC_all_interior_pointers mode; remove unnecessarily parameter cast
+for GC_scratch_alloc call.
+* include/private/gc_priv.h (GC_bl_init): Move the function
+declaration to misc.c file.
+* misc.c (GC_bl_init_no_interiors): Add a prototype.
+* misc.c (GC_set_all_interior_pointers): Allow values other than 0
+and 1; allow altering GC_set_all_interior_pointers value even
+after GC initialization.
+* obj_map.c (GC_initialize_offsets): Clear GC_valid_offsets and
+GC_modws_valid_offsets if GC_all_interior_pointers is off.
+* misc.c (GC_init): Don't call GC_initialize_offsets() unless
+GC_all_interior_pointers mode.
+
+* alloc.c (GC_finish_collection): Remove redundant brackets;
+adjust code indentation.
+* blacklst.c (GC_add_to_black_list_normal): Simplify expression
+(to improve code readability).
+* blacklst.c (GC_is_black_listed): Join nested "if" (into a single
+conditional expression); initialize "nblocks" just before the loop
+beginning.
+* misc.c (GC_init): Don't compute initial_heap_sz if GC is already
+initialized.
+* include/private/gc_priv.h (GC_initialize_offsets): Move the
+function declaration to misc.c file.
+* obj_map.c (GC_initialize_offsets): Remove offsets_initialized
+static variable since the function is called only once.
+* tests/middle.c (main): Use setter for GC_all_interior_pointers;
+adjust printf format specifier (and cast the value passed to).
+
+* doc/README.macros (SMALL_CONFIG, LARGE_CONFIG): Refine the
+documentation.
+* include/private/gc_hdrs.h (LOG_BOTTOM_SZ): Ignore SMALL_CONFIG
+if LARGE_CONFIG is defined.
+* include/private/gc_priv.h (CPP_LOG_HBLKSIZE): Likewise.
+
+* alloc.c (GC_finish_collection): Replace "#else #ifdef" with
+"#elif".
+* include/private/gc_priv.h (CPP_LOG_HBLKSIZE, LOG_PHT_ENTRIES,
+MAX_ROOT_SETS, MAX_HEAP_SECTS): Likewise.
+* alloc.c (GC_expand_hp_inner): Check for GC_collect_at_heapsize
+overflow even if not LARGE_CONFIG.
+* dbg_mlc.c (GC_check_heap_proc): Check "oh" size even if
+SMALL_CONFIG.
+* finalize.c (GC_print_finalization_stats): Fix "#endif" comment.
+* doc/README.environment (GC_LOG_FILE, GC_PRINT_VERBOSE_STATS,
+GC_FULL_FREQUENCY): Refine the documentation.
+
+* extra/msvc_dbg.c: Test _MSC_VER macro; include "gc.h" (for
+GC_word).
+* extra/msvc_dbg.c (ULONG_PTR): Replace with GC_ULONG_PTR; define
+as word.
+
+* dbg_mlc.c (GC_get_back_ptr_info, GC_print_obj,
+GC_print_smashed_obj, GC_debug_free_inner): Add a code for a
+LINT-like tool to instruct it that the function is invoked only
+with valid parameters (otherwise a SEGV is ok); recognize LINT2
+new macro.
+* misc.c (GC_abort): Instruct a LINT-like tool that the function
+never returns in fact.
+* os_dep.c (GC_linux_stack_base): Check for read buffer overflow;
+close the file immediately after read; use STRTOULL() instead of
+decoding the address number manually.
+* include/private/gc_priv.h (EXPECT): Don't specify outcome for a
+LINT-like tool.
+* include/private/gc_priv.h (GC_all_interior_pointers): Instruct a
+LINT-like tool that the value is restricted to zero and one only
+(required since the variable is global and its value is used as a
+part of array index expression is some places).
+
+* dbg_mlc.c (GC_make_closure): Fix SEGV in case GC_malloc returns
+NULL.
+* dbg_mlc.c (GC_debug_register_finalizer,
+GC_debug_register_finalizer_no_order,
+GC_debug_register_finalizer_unreachable,
+GC_debug_register_finalizer_ignore_self): Handle out of memory
+case properly (similar to GC_register_finalizer_inner).
+* headers.c (GC_install_header): Handle the case when alloc_hdr()
+returns NULL.
+* os_dep.c (GC_get_maps_len): Defend against missing "maps" file.
+* pthread_support.c (GC_mark_thread): Place a dummy return
+statement (which uses "id" argument) before the actual use of "id"
+as an array index (to suppress a warning produced by some static
+code analysis tools).
+* win32_threads.c (GC_mark_thread): Likewise.
+* pthread_support.c (GC_thr_init): Abort (with the appropriate
+message) if out of memory.
+
+* finalize.c (GC_register_finalizer_inner): Fix a typo in a
+comment.
+*include/private/gcconfig.h (STACKBOTTOM): Likewise.
+* gcj_mlc.c (GC_core_gcj_malloc): Replace 0/1 with TRUE/FALSE in
+EXPECT (the 2nd argument).
+* malloc.c (GC_core_malloc_atomic, GC_core_malloc, GC_free):
+Likewise.
+* mark.c (GC_mark_and_push, GC_mark_and_push_stack): Likewise.
+* thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Likewise.
+* include/private/gc_hdrs.h (HC_GET_HDR): Likewise.
+* include/private/gc_priv.h (SMALL_OBJ): Likewise.
+* include/private/specific.h (getspecific): Likewise.
+* pthread_support.c (LOCK_STATS): Add a comment.
+
+* include/gc_pthread_redirects.h (GC_NO_DLOPEN,
+GC_NO_PTHREAD_SIGMASK, GC_PTHREAD_CREATE_CONST,
+GC_PTHREAD_EXIT_ATTRIBUTE, GC_NO_PTHREAD_CANCEL): Move the
+definition to gc_config_macros.
+
+* pthread_support.c (pthread_cancel, GC_pthread_cancel_t,
+GC_pthread_cancel): Test GC_NO_PTHREAD_CANCEL (instead of NACL and
+GC_PTHREAD_EXIT_ATTRIBUTE).
+* include/gc_pthread_redirects.h (GC_pthread_cancel,
+pthread_cancel): Likewise.
+* pthread_support.c (GC_pthread_create, GC_pthread_sigmask,
+GC_pthread_join, GC_pthread_detach, GC_pthread_cancel): Realign
+code.
+* include/gc_pthread_redirects.h (GC_PTHREAD_EXIT_ATTRIBUTE):
+Define as empty for NaCl.
+* include/gc_pthread_redirects.h (GC_NO_PTHREAD_CANCEL): New macro
+defined.
+
+* dyn_load.c (GC_init_dyld): Do not invoke
+_dyld_bind_fully_image_containing_address() if GC_no_dls (as it is
+not required to register the main data segment in that case).
+* include/gc.h (GC_no_dls): Adjust the comment.
+
+* dyn_load.c (GC_MUST_RESTORE_REDEFINED_DLOPEN): Test
+GC_NO_DLOPEN.
+* gc_dlopen.c: Likewise.
+* include/gc_pthread_redirects.h (GC_dlopen, dlopen): Likewise.
+* gc_dlopen.c: Don't include dlfcn.h (as it is included in
+gc_pthread_redirects.h).
+* pthread_support.c (pthread_sigmask, GC_pthread_sigmask_t,
+GC_pthread_sigmask): Test GC_NO_PTHREAD_SIGMASK (instead of
+GC_DARWIN_THREADS, GC_OPENBSD_THREADS and NACL).
+* include/gc_pthread_redirects.h (GC_pthread_sigmask,
+pthread_sigmask): Likewise.
+* win32_threads.c (pthread_sigmask, GC_pthread_sigmask): Test
+GC_NO_PTHREAD_SIGMASK (instead of GC_WIN32_PTHREADS).
+* pthread_support.c (pthread_create, GC_pthread_create_t,
+GC_pthread_create): Rename GC_PTHREAD_CONST to
+GC_PTHREAD_CREATE_CONST.
+* win32_threads.c (GC_pthread_create): Likewise.
+* include/gc_pthread_redirects.h: Likewise.
+* include/gc_pthread_redirects.h (GC_NO_DLOPEN,
+GC_NO_PTHREAD_SIGMASK): New macro defined.
+* include/gc_pthread_redirects.h (GC_PTHREAD_CREATE_CONST): Set to
+empty for NaCl.
+* include/gc_pthread_redirects.h (GC_PTHREAD_EXIT_ATTRIBUTE): Do
+not define for Android (as CANCEL_SAFE is not defined).
+
+* include/gc.h (GC_ADD_CALLER, GC_RETURN_ADDR,
+GC_HAVE_BUILTIN_BACKTRACE, GC_CAN_SAVE_CALL_STACKS): Move
+definition to gc_config_macros.h file.
+* include/gc_config_macros.h: Check the file is included from gc.h
+file.
+* include/gc_version.h: Likewise.
+
+* gc_dlopen.c: Empty unit for NaCl.
+* os_dep.c: Include fcntl.h for NaCl.
+* os_dep.c (GC_get_main_stack_base): Ignore
+USE_GET_STACKBASE_FOR_MAIN macro for NaCl.
+* os_dep.c (GC_get_stack_base): Return GC_UNIMPLEMENTED for NaCl.
+* os_dep.c (GC_remap): Use mmap (instead of mprotect) for NaCl.
+* pthread_start.c (GC_inner_start_routine): Don't invoke
+pthread_cleanup_push/pop for NaCl.
+* pthread_stop_world.c (GC_nacl_num_gc_threads,
+GC_nacl_thread_idx, GC_nacl_park_threads_now,
+GC_nacl_thread_parker, GC_nacl_gc_thread_self,
+GC_nacl_thread_parked, GC_nacl_thread_used,
+GC_nacl_thread_parking_inited, GC_nacl_thread_alloc_lock): New
+variable (fo NaCl only).
+* pthread_stop_world.c (GC_remove_allowed_signals,
+suspend_handler_mask, GC_stop_count, GC_world_is_stopped,
+GC_retry_signals, SIG_THR_RESTART, GC_suspend_ack_sem,
+GC_restart_ack_sem, GC_suspend_handler_inner, GC_suspend_handler,
+GC_restart_handler): Don't define for NaCl.
+* pthread_support.c (GC_get_nprocs): Likewise.
+* include/private/gc_priv.h (SIG_SUSPEND): Likewise.
+* include/private/gcconfig.h (LINUX): Likewise.
+* pthread_stop_world.c (GC_push_all_stacks): Push register storage
+for NaCl.
+* pthread_stop_world.c (GC_suspend_all, GC_stop_world,
+GC_start_world): Implement for NaCl.
+* pthread_stop_world.c (GC_stop_world): Don't define unused "i"
+local variable for OpenBSD (and NaCl).
+* pthread_stop_world.c (NACL_STORE_REGS): New macro definition for
+NaCl.
+* pthread_stop_world.c (nacl_pre_syscall_hook,
+__nacl_suspend_thread_if_needed, nacl_post_syscall_hook,
+GC_nacl_initialize_gc_thread, GC_nacl_shutdown_gc_thread): New
+function (for NaCl only).
+* pthread_stop_world.c (GC_stop_init): Empty for NaCl.
+* pthread_support.c (pthread_cancel, pthread_sigmask): Don't
+redirect for NaCl.
+* include/gc_pthread_redirects.h (pthread_cancel,
+pthread_sigmask): Likewise.
+* pthread_support.c (GC_nacl_initialize_gc_thread,
+GC_nacl_shutdown_gc_thread): New internal prototype (NaCl only).
+* pthread_support.c (GC_new_thread, GC_delete_thread): Initialize
+and shutdown thread for NaCl.
+* pthread_support.c (GC_thr_init): Call sysconf for NaCl.
+* pthread_support.c (GC_pthread_exit): Call GC_thread_exit_proc
+for NaCl.
+* include/gc.h: Don't include features.h for NaCl.
+* include/gc_pthread_redirects.h (GC_PTHREAD_CONST): New macro.
+* include/gc_pthread_redirects.h (GC_pthread_create): Use
+GC_PTHREAD_CONST instead of const.
+* win32_threads.c (GC_pthread_create): Likewise.
+* pthread_support.c (GC_pthread_create_t, GC_pthread_create,
+pthread_create): Likewise.
+* include/private/gcconfig.h (NACL): Recognize NaCl.
+* include/private/gcconfig.h (GC_LINUX_THREADS): Valid for NaCl.
+* include/private/pthread_stop_world.h (thread_stop_info): Add
+reg_storage member; define NACL_GC_REG_STORAGE_SIZE macro (for
+NaCl only).
+* include/private/pthread_support.h (GC_nacl_gc_thread_self):
+Declare internal variable (for NaCl only).
+
+* mach_dep.c (GC_with_callee_saves_pushed): Fix FE_ALL_EXCEPT
+macro.
+
+* mark.c (GC_mark_some): Prefix and suffix "asm" and "volatile"
+keywords with double underscore.
+* os_dep.c (catch_exception_raise, catch_exception_raise_state,
+catch_exception_raise_state_identity): Add GC_API_OSCALL to
+function definition.
+* os_dep.c (catch_exception_raise_state,
+catch_exception_raise_state_identity): Move definition to be
+before GC_ports.
+* os_dep.c (catch_exception_raise): Declare to have the symbol
+defined before GC_ports.
+* os_dep.c (GC_ports): Store references to catch_exception_raise,
+catch_exception_raise_state, catch_exception_raise_state_identity
+(to prevent stripping these symbols as dead).
+* os_dep.c (catch_exception_raise, catch_exception_raise_state,
+catch_exception_raise_state_identity): Mark these symbols as
+"referenced dynamically" via an assembler directive (unless
+NO_DESC_CATCH_EXCEPTION_RAISE).
+* include/private/gc_priv.h (GC_API_OSCALL): New macro (defined
+similar to GC_API but as if GC_DLL is always defined).
+
+* os_dep.c: Don't include signal.h for GC_write_fault_handler on
+Win32.
+* os_dep.c (SIG_OK): Don't return true unless SIGSEGV or SIGBUS on
+FreeBSD.
+* os_dep.c (CODE_OK): Use SEGV_ACCERR on FreeBSD (define
+SEGV_ACCERR for older FreeBSD releases).
+
+* dyn_load.c (GC_register_map_entries,
+GC_register_dynamic_libraries_dl_iterate_phdr): Calculate
+DATASTART only once if DATASTART_IS_FUNC.
+* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr):
+Calculate DATAEND only once if DATAEND_IS_FUNC.
+* dyn_load.c: Add comment to some endif; realign some code.
+* dyn_load.c (GC_init_dyld): Don't use
+_dyld_bind_fully_image_containing_address if
+NO_DYLD_BIND_FULLY_IMAGE defined; add FIXME.
+* include/private/gcconfig.h (GC_data_start, GC_find_limit):
+Declare if used by DATASTART/DATAEND, respectively.
+* include/private/gcconfig.h (DATASTART_IS_FUNC, DATAEND_IS_FUNC):
+Define if DATASTART/DATAEND is a function, respectively.
+* include/private/gcconfig.h (GETPAGESIZE, NO_PTHREAD_TRYLOCK,
+NO_DYLD_BIND_FULLY_IMAGE): Define for Darwin/arm as well; include
+unistd.h.
+
+* os_dep.c (GC_setpagesize, GC_task_self, PROTECT, UNPROTECT):
+Reorder to remove redundant ifdef for Win32.
+* os_dep.c: Add comment to some endif.
+* os_dep.c: Include pthread.h (for Linux even if single-threaded)
+if USE_GET_STACKBASE_FOR_MAIN; also include it for Darwin.
+* os_dep.c (STACKBOTTOM): Redefine for Darwin (unless prohibited
+for some reason).
+* os_dep.c (GC_get_main_stack_base): Allow
+USE_GET_STACKBASE_FOR_MAIN for Linux even if single-threaded; add
+assertion for the returned result.
+* os_dep.c (GC_get_stack_base): Define for Darwin if
+multi-threaded.
+* os_dep.c (SIG_OK, CODE_OK): Add comment (for FreeBSD).
+* os_dep.c (ID_STOP, ID_RESUME): Define only if threads.
+* os_dep.c (catch_exception_raise): Remove redundant parentheses;
+refine the documentation.
+
+* NT_MAKEFILE: Define _CRT_SECURE_NO_DEPRECATE for C++ files as
+well.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* doc/README.macros (USE_GET_STACKBASE_FOR_MAIN): Refine.
+* include/gc.h (GC_INIT): Document.
+* include/private/gc_priv.h (GC_MACH_HEADER, GC_MACH_SECTION,
+GC_GETSECTBYNAME): Define depending only on the word size (i.e.,
+define these macros also for ARM).
+* tests/test.c (check_heap_stats): Print main thread stack bottom
+as well (only if verbose mode is on).
+
+* mach_dep.c (GC_with_callee_saves_pushed): Fix and improve code
+introduced by the previous patch (if GETCONTEXT_FPU_EXCMASK_BUG
+and X86_64).
+
+* darwin_stop_world.c (GC_FindTopOfStack): Prefix and suffix
+"volatile" keyword with double underscore.
+* mach_dep.c (GETCONTEXT_FPU_EXCMASK_BUG): Recognize new macro and
+include fenv.h if defined (unless NO_GETCONTEXT or HAVE_PUSH_REGS).
+* mach_dep.c (GC_with_callee_saves_pushed): Restore FPU exception
+mask corrupted by getcontext if GETCONTEXT_FPU_EXCMASK_BUG.
+* include/private/gcconfig.h (GETCONTEXT_FPU_EXCMASK_BUG): Define
+for Linux/amd64 (since its GLibc getcontext currently has the bug).
+
+* allchblk.c (GC_use_entire_heap): Change type to int (as declared
+in gc.h); set the default value depending on new GC_USE_ENTIRE_HEAP
+macro.
+* misc.c (GC_init): Test GC_USE_ENTIRE_HEAP environment variable to
+alter the default value of GC_use_entire_heap.
+* doc/README.environment (GC_USE_ENTIRE_HEAP): Document.
+* doc/README.macros (GC_USE_ENTIRE_HEAP): Likewise.
+
+* include/private/gcconfig.h (PARALLEL_MARK): Do not make it cause
+MPROTECT_VDB undefining.
+
+* include/private/gcconfig.h (DYNAMIC_LOADING): Fix filename in
+the comment.
+
+* include/private/gc_priv.h (_GC_arrays): Move the conditional
+macro definitions (shortcuts for GC_arrays members) into the
+structure body.
+
+* darwin_stop_world.c (GC_mach_handler_thread,
+GC_use_mach_handler_thread,
+GC_darwin_register_mach_handler_thread): Define only if
+MPROTECT_VDB.
+* darwin_stop_world.c (GC_suspend_thread_list): Use
+GC_mach_handler_thread and GC_use_mach_handler_thread only if
+MPROTECT_VDB.
+* darwin_stop_world.c (GC_stop_world): Reset GC_mach_threads_count
+only if defined (i.e. unless GC_NO_THREADS_DISCOVERY).
+* misc.c (GC_init): Fix comment for GWW_VDB.
+* os_dep.c (DARWIN_EXC_STATE, DARWIN_EXC_STATE_COUNT,
+DARWIN_EXC_STATE_T, DARWIN_EXC_STATE_DAR): New macros.
+* os_dep.c (catch_exception_raise): Use DARWIN_EXC_STATE,
+DARWIN_EXC_STATE_COUNT, DARWIN_EXC_STATE_T, DARWIN_EXC_STATE_DAR.
+* pthread_support.c (GC_thr_init): Define "dummy" local variable
+only unless GC_DARWIN_THREADS.
+* include/private/gcconfig.h (MPROTECT_VDB): Define for Darwin
+even in the single-threaded mode; define for iPhone/iPad.
+* include/private/gcconfig.h (IA64): Remove unnecessary "ifdef"
+around "undef".
+* include/private/gcconfig.h (HEURISTIC1): Remove unused for
+Cygwin.
+* include/private/gcconfig.h (STACKBOTTOM): Use fixed address for
+Darwin/arm (instead of HEURISTIC1).
+
+* misc.c (GC_write): Replace multiple "ifdef/endif" with "elif"
+(for ECOS and NOSYS).
+* os_dep.c (GC_get_main_stack_base): Likewise.
+* os_dep.c (GC_get_main_stack_base): Check
+USE_GET_STACKBASE_FOR_MAIN macro before checking STACKBOTTOM one;
+remove "dummy" variable (use result one instead).
+* doc/README.macros (SN_TARGET_PS3): Document.
+* extra/threadlibs.c (main): Don't output "-lpthread" (and "-ldl")
+for Android.
+* include/private/pthread_support.h: Fix comment for "endif".
+
+* misc.c (GC_allocate_ml): Define global variable if SN_TARGET_PS3.
+* misc.c (GC_init): Initialize GC_allocate_ml if SN_TARGET_PS3.
+* os_dep.c (SIGSEGV): Define to dummy zero if SN_TARGET_PS3.
+* os_dep.c (GC_unix_mmap_get_mem): Don't define if SN_TARGET_PS3.
+* os_dep.c (GC_default_push_other_roots,
+GC_push_thread_structures): Define for SN_TARGET_PS3.
+* include/private/gc_locks.h (GC_allocate_ml, LOCK, UNLOCK): Define
+for SN_TARGET_PS3.
+* include/private/gcconfig.h (SN_TARGET_PS3): Recognize new macro
+(Sony PS/3 target).
+* include/private/gcconfig.h (THREADS): Define unconditionally if
+SN_TARGET_PS3.
+* include/private/gcconfig.h (GET_MEM): Define for SN_TARGET_PS3.
+
+* alloc.c (GC_collect_or_expand): Replace NIL with NULL in message.
+* dbg_mlc.c (GC_debug_malloc, GC_debug_malloc_ignore_off_page,
+GC_debug_malloc_atomic_ignore_off_page,
+GC_debug_generic_malloc_inner,
+GC_generic_malloc_inner_ignore_off_page, GC_debug_malloc_stubborn,
+GC_debug_malloc_atomic, GC_debug_malloc_uncollectable,
+GC_debug_malloc_atomic_uncollectable): Likewise.
+* gcj_mlc.c (GC_debug_gcj_malloc): Likewise.
+* dbg_mlc.c (GC_check_annotated_obj): Replace NIL with NULL in a
+comment.
+* dyn_load.c (GC_FirstDLOpenedLinkMap): Likewise.
+* mark_rts.c (GC_roots_present): Likewise.
+* doc/README: Likewise.
+* include/private/gc_hdrs.h (IS_FORWARDING_ADDR_OR_NIL): Likewise.
+* include/private/gc_priv.h (_GC_arrays): Likewise.
+
+* configure.ac: Use AC_CHECK_LIB() to check for pthread instead of
+just blindly linking to -lpthread, as Android includes pthread
+support within libc and does not provide a separate libpthread.
+* dyn_load.c (GC_register_dynamic_libraries): Skip current link map
+entry if l_addr is NULL (Android/bionic only).
+* pthread_stop_world.c (android_thread_kill): New internal function
+(Android only).
+* pthread_stop_world.c (GC_suspend_all, GC_start_world): Call
+android_thread_kill (based on tkill) instead of pthread_kill on
+Android (since pthread_kill cannot be used safely on the platform).
+* pthread_support.c (GC_new_thread): Store thread Id (obtained from
+gettid) for use by android_thread_kill (Android only).
+* include/private/pthread_support.h (GC_Thread_Rep): Add kernel_id
+structure member (Android only).
+* include/private/gcconfig.h: Recognize __x86_64 macro as a synonym
+of __x86_64__ (Darwin); define __environ macro (Android on M68K).
+
+* allchblk.c (GC_freehblk): Print extended error message (done via
+GC_printf() before aborting with a short message) only if
+GC_print_stats.
+* dyn_load.c (GC_register_dynamic_libraries): Likewise.
+* os_dep.c (GC_get_maps, GC_register_data_segments, GC_remap,
+PROTECT, GC_write_fault_handler, GC_mprotect_thread): Likewise.
+* pthread_stop_world.c (GC_start_world): Likewise.
+* win32_threads.c (GC_register_my_thread_inner): Likewise.
+* os_dep.c (GC_get_main_stack_base, GC_register_data_segments,
+GC_dirty_init): Remove redundant print of an error message before
+aborting with the same message.
+* os_dep.c (GC_register_data_segments): Remove format specifier
+from the string passed to GC_err_puts(); use ABORT instead of EXIT
+(if invalid executable type).
+* os_dep.c (GC_remap): Adjust printf format specifier (for long
+type).
+* os_dep.c (GC_dirty_init): Print a message about SIG_IGN detected
+(for SIGSEGV/BUS) only if GC_print_stats.
+* os_dep.c (catch_exception_raise): Join 2 adjacent GC_err_printf
+calls.
+
+* tests/test.c (main): Print the relevant message if GWW_VDB.
+* include/private/gcconfig.h: Don't define MPROTECT_VDB for Win32
+on x64 if compiled by GCC.
+
+* tests/staticrootstest.c: Include string.h for memset() prototype.
+* tests/thread_leak_test.c (main): Fix printf() format specifiers.
+
+* CMakeLists.txt: Check enable_parallel_mark on Darwin.
+* configure.ac: Likewise.
+* darwin_stop_world.c (DARWIN_SUSPEND_GC_THREADS,
+DARWIN_QUERY_TASK_THREADS): Rename to GC_NO_THREADS_DISCOVERY and
+GC_DISCOVER_TASK_THREADS, respectively.
+* os_dep.c (DARWIN_SUSPEND_GC_THREADS): Likewise.
+* pthread_support.c (DARWIN_SUSPEND_GC_THREADS): Likewise.
+* darwin_stop_world.c (DARWIN_QUERY_TASK_THREADS): Don't define
+(and remove FIXME).
+* darwin_stop_world.c (GC_use_threads_discovery): Add GC_API;
+comment; remove FIXME.
+* win32_threads.c (GC_NO_DLLMAIN): Rename to
+GC_NO_THREADS_DISCOVERY.
+* tests/test.c (GC_NO_DLLMAIN): Likewise.
+* doc/README.macros (GC_NO_DLLMAIN): Likewise.
+* doc/README.win32 (GC_NO_DLLMAIN): Likewise.
+* doc/README.macros (GC_NO_THREADS_DISCOVERY): Update the comment.
+* win32_threads.c (GC_win32_dll_threads): Define as macro to true
+if GC_DISCOVER_TASK_THREADS (and not GC_NO_THREADS_DISCOVERY);
+update the comment.
+* win32_threads.c (GC_use_DllMain): Rename to
+GC_use_threads_discovery; do not set GC_win32_dll_threads if
+GC_DISCOVER_TASK_THREADS.
+* win32_threads.c (GC_started_thread_while_stopped,
+GC_lookup_thread_inner, UNPROTECT_THREAD, GC_lookup_pthread,
+GC_thr_init, GC_pthread_create, DllMain): Rewrite some expressions
+which use GC_win32_dll_threads to minimize the possibility of
+an "unreachable code" compiler warning when GC_win32_dll_threads
+is defined as a macro.
+* win32_threads.c (GC_unregister_my_thread): Don't call
+GC_delete_thread() if GC_win32_dll_threads and THREAD_LOCAL_ALLOC
+(since can't happen); use "t" local variable only if not
+GC_win32_dll_threads.
+* doc/README.macros (GC_DISCOVER_TASK_THREADS): Document.
+* include/gc.h (GC_use_DllMain): Rename to
+GC_use_threads_discovery but keep old name as a macro definition.
+* include/gc.h (GC_use_threads_discovery): Declare also for
+Darwin; update the comment.
+* tests/test.c (main): Call GC_use_threads_discovery for Darwin
+(to test the mode if possible).
+
+* darwin_stop_world.c (DARWIN_SUSPEND_GC_THREADS,
+DARWIN_QUERY_TASK_THREADS): New macro recognized.
+* darwin_stop_world.c (GC_query_task_threads): add STATIC;
+initialize to false; define as macro if DARWIN_SUSPEND_GC_THREADS
+or DARWIN_QUERY_TASK_THREADS; remove FIXME.
+* darwin_stop_world.c (GC_use_threads_discovery): New function
+(for setting GC_query_task_threads value).
+* darwin_stop_world.c (GC_mach_handler_thread,
+GC_use_mach_handler_thread, GC_mach_thread, GC_MAX_MACH_THREADS,
+GC_mach_threads, GC_mach_threads_count, GC_suspend_thread_list,
+GC_darwin_register_mach_handler_thread): Define only if not
+DARWIN_SUSPEND_GC_THREADS.
+* darwin_stop_world.c (GC_stop_world, GC_start_world): Exclude
+the code for GC_query_task_threads case from compilation unless
+DARWIN_SUSPEND_GC_THREADS.
+* os_dep.c (GC_darwin_register_mach_handler_thread): Declared only
+if Darwin threads and not DARWIN_SUSPEND_GC_THREADS.
+* os_dep.c (GC_mprotect_thread): Call
+GC_darwin_register_mach_handler_thread only if THREADS and not
+DARWIN_SUSPEND_GC_THREADS.
+* pthread_support.c (marker_mach_threads): Don't define if
+DARWIN_SUSPEND_GC_THREADS.
+* pthread_support.c (GC_mark_thread): Don't fill in
+marker_mach_threads if DARWIN_SUSPEND_GC_THREADS.
+* include/private/gc_locks.h (GC_need_to_lock): Always declare for
+THREADS case.
+
+* darwin_stop_world.c (GC_query_task_threads): Don't define to
+false for DARWIN_DONT_PARSE_STACK case; unconditionally initialize
+the variable to false (for now).
+* darwin_stop_world.c (GC_push_all_stacks): Call task_threads()
+only if not DARWIN_DONT_PARSE_STACK.
+* darwin_stop_world.c (GC_stop_world, GC_start_world): Use the
+approach based on task_threads() only if GC_query_task_threads
+else use GC_threads table.
+
+* darwin_stop_world.c (GC_mach_threads): Remove static qualifier.
+* darwin_stop_world.c (GC_stop_init): Remove (as we do not need to
+really clear GC_mach_threads[]).
+* darwin_stop_world.c (GC_stop_world): Reset GC_mach_threads_count
+(instead of calling GC_stop_init).
+* include/private/pthread_support.h (GC_stop_init): Remove proto.
+* pthread_support.c (GC_stop_init): Add proto (unless Darwin).
+* pthread_support.c (GC_thr_init): Don't call GC_stop_init() if
+GC_DARWIN_THREADS.
+
+* darwin_stop_world.c (GC_stack_range_for): New static function
+(move the code from GC_push_all_stacks).
+* darwin_stop_world.c (GC_push_all_stacks): Call
+GC_stack_range_for(); rename kern_return local variable to
+kern_result.
+* darwin_stop_world.c (GC_is_mach_marker): Change argument type
+from mach_port_t to thread_act_t.
+* pthread_support.c (GC_is_mach_marker): Likewise.
+
+* darwin_stop_world.c (GC_push_all_stacks): Fix "my_task" local
+variable initialization (always call current_task()).
+* pthread_support.c (GC_thr_init, GC_register_my_thread_inner):
+Don't set thread's stop_info.stack_ptr value for Darwin.
+* include/private/darwin_stop_world.h (thread_stop_info): Update
+the comment for stack_ptr.
+
+* darwin_stop_world.c (GC_push_all_stacks): Rename "r", "me" local
+variables to "kern_return" and "my_thread" ones, respectively;
+call mach_port_deallocate() unconditionally.
+* darwin_stop_world.c (GC_stop_world): Don't call mach_thread_self
+if DEBUG_THREADS.
+
+* darwin_stop_world.c (GC_mach_thread): Move from
+darwin_stop_world.h.
+* include/private/darwin_stop_world.h (GC_mach_thread): Remove.
+* win32_threads.c (GC_start_world): Define "thread_id" local
+variable only if GC_ASSERTIONS; decide whether to resume a thread
+based on its "suspended" field value; assert that suspended thread
+stack_base is non-zero and the thread is not our one.
+
+* darwin_stop_world.c (GC_thread_resume): New inline function
+(move code from GC_thread_resume).
+* darwin_stop_world.c (GC_start_world): Check result of
+task_threads(); call GC_thread_resume().
+* os_dep.c (GC_malloc_heap_l, GC_is_malloc_heap_base): Define
+only if not CYGWIN32.
+* os_dep.c (GC_is_heap_base): Call GC_is_malloc_heap_base() only
+if not CYGWIN32.
+
+* darwin_stop_world.c (FindTopOfStack): Change return type to
+ptr_t (from long); make GC_INNER; add GC_ prefix.
+* darwin_stop_world.c (GC_push_all_stacks): Add thread_blocked
+local variable (initialized from the corresponding GC_thread
+field unless GC_query_task_threads); add assertion that our
+thread is not blocked; prefix FindTopOfStack with GC_ and remove
+no longer needed cast to ptr_t of the result; handle thread
+blocked case (and remove FIXME); use GC_push_all_stack_sections
+unless GC_query_task_threads (and remove FIXME).
+* pthread_support.c (GC_FindTopOfStack): Declare (if needed).
+* pthread_support.c (GC_do_blocking_inner): Call
+GC_save_regs_in_stack (if needed) before acquiring the lock.
+* win32_threads.c (GC_do_blocking_inner): Likewise.
+* pthread_support.c (GC_do_blocking_inner): Set/clear topOfStack
+field of GC_thread (Darwin only).
+* include/private/pthread_support.h (GC_thread): Add topOfStack
+field for Darwin (unless DARWIN_DONT_PARSE_STACK).
+
+* finalize.c (GC_check_finalizer_nested): Change return type to
+char pointer (instead of int pointer); use explicit cast for
+GC_finalizer_nested assignment.
+* pthread_support.c (GC_check_finalizer_nested): Likewise.
+* win32_threads.c (GC_check_finalizer_nested): Likewise.
+* finalize.c (GC_finalizer_nested): Change type to unsigned char.
+* finalize.c (GC_notify_or_invoke_finalizers): Change type of
+"pnested" local variable to char pointer.
+* pthread_support.c (GC_do_blocking_inner,
+GC_call_with_gc_active): Use explicit cast for "thread_blocked"
+field assignment.
+* win32_threads.c (GC_lookup_pthread): Use explicit cast for
+"suspended" field assignment.
+* win32_threads.c (GC_Thread_Rep): Use short type for
+finalizer_skipped; use char type for finalizer_nested and flags
+fields and reorder some fields (to minimize GC_Thread_Rep
+structure size).
+* include/private/pthread_support.h (GC_Thread_Rep): Likewise.
+* win32_threads.c (GC_Thread_Rep): Use char type for suspended
+field (instead of GC_bool).
+* include/private/pthread_support.h (GC_Thread_Rep): Use char type
+for thread_blocked field (instead of short).
+
+* darwin_stop_world.c (GC_query_task_threads): New variable (or
+macro).
+* darwin_stop_world.c (GC_push_all_stacks): Use
+GC_query_task_threads (to choose between algorithms based on
+kernel task_threads and based on GC_threads table); update FIXME;
+remove commented out GC_push_one statements.
+* pthread_support.c (GC_thr_init, GC_do_blocking_inner,
+GC_call_with_gc_active, GC_register_my_thread_inner): Initialize
+stack_ptr field for all platforms.
+* pthread_support.c (GC_call_with_gc_active): Initialize
+saved_stack_ptr field for all platforms.
+* include/private/darwin_stop_world.h (thread_stop_info): Add
+stack_ptr field; change type of already_suspended from int to
+GC_bool.
+
+* darwin_stop_world.c (GC_MAX_MACH_THREADS): New macro.
+* darwin_stop_world.c (GC_mach_threads, GC_stop_init): Use
+GC_MAX_MACH_THREADS instead of THREAD_TABLE_SZ.
+* darwin_stop_world.c (GC_mach_threads): Add FIXME.
+* darwin_stop_world.c (GC_stop_init, GC_suspend_thread_list,
+GC_stop_world): Use FALSE and TRUE for already_suspended field and
+"changed", "found" variables.
+* darwin_stop_world.c (GC_is_mach_marker): New prototype (only if
+PARALLEL_MARK).
+* darwin_stop_world.c (GC_suspend_thread_list): Change return type
+to GC_bool; change type of "changed", "found" to GC_bool; make
+"my_thread" as an argument (instead of acquiring/deallocating it
+locally); do not add my_thread, GC_mach_handler_thread and marker
+threads to GC_mach_threads table; check for overflow of
+GC_mach_threads table; increase GC_mach_threads_count if "found"
+is true and info.suspend_count is non-zero.
+* darwin_stop_world.c (GC_suspend_thread_list, GC_start_world):
+Adjust "thread" format specifiers for GC_printf(); search thread
+in "old_list" starting from the previous found one.
+* darwin_stop_world.c (GC_stop_world): Rename "changes" to
+"changed" local variable; remove "result" variable; adjust
+GC_printf debugging message.
+* darwin_stop_world.c (GC_start_world): Do not check for
+my_thread and GC_use_mach_handler_thread (since they are not added
+to GC_mach_threads table); call thread_info() only if
+DEBUG_THREADS or GC_ASSERTIONS.
+* pthread_support.c (marker_mach_threads): New static variable (if
+Darwin).
+* pthread_support.c (GC_is_mach_marker): New function (if Darwin).
+* pthread_support.c (GC_mark_thread): Fill in marker_mach_threads
+table (if Darwin).
+
+* alloc.c (GC_parallel): Define only if THREADS.
+* misc.c (GC_get_parallel): Likewise.
+* include/gc.h (GC_parallel, GC_get_parallel,
+GC_get_suspend_signal, GC_allow_register_threads,
+GC_register_my_thread, GC_unregister_my_thread): Define only if
+GC_THREADS.
+* include/gc.h (GC_get_heap_size): Fix a typo in a comment.
+
+* configure.ac: Use `AC_C_INLINE'.
+* include/private/gc_priv.h (GC_INLINE): Use "inline" keyword
+(determined by configure AC_C_INLINE) if HAVE_CONFIG_H is defined.
+
+* dyn_load.c (DL_ITERATE_PHDR_STRONG): New macro (define for
+FreeBSD).
+* dyn_load.c (GC_register_main_static_data): Move the definition
+above GC_register_dynamic_libraries_dl_iterate_phdr one (FreeBSD
+case); unconditionally return FALSE if DL_ITERATE_PHDR_STRONG.
+* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr): Test
+GC_register_main_static_data() result (instead of direct testing
+of dl_iterate_phdr (to prevent a compiler warning).
+* os_dep.c (CODE_OK): Test si_code also for the value of 2
+(FreeBSD case; required for FreeBSD v7+).
+* os_dep.c (CODE_OK): Properly use parentheses (HPUX case).
+* include/private/gcconfig.h (DATASTART): Cast etext argument in
+GC_FreeBSDGetDataStart() call; remove unnecessary "&" (FreeBSD
+case).
+
+* include/private/specific.h (quick_thread_id): Define thru
+GC_approx_sp(); define as a macro.
+* include/private/specific.h (getspecific): Use GC_INLINE instead
+of __inline__ (to work around Sun CC which does not recognize
+inline keyword surrounded with underscores).
+
+* darwin_stop_world.c (FindTopOfStack): Simplify condition
+expressions.
+* darwin_stop_world.c (GC_push_all_stacks): Merge two variants
+of this function (DARWIN_DONT_PARSE_STACK).
+* darwin_stop_world.c (GC_push_all_stacks): Add a check for our
+thread is found (same as in pthread_stop_world.c).
+* darwin_stop_world.c (GC_push_all_stacks): Print the number of
+scanned threads if verbose (same as in pthread_stop_world.c).
+
+* darwin_stop_world.c (GC_push_all_stacks): Reset
+thread_state_count value before every thread_get_state call;
+refine the comment for thread_state_count.
+* darwin_stop_world.c (GC_push_all_stacks): Ignore rsp, rip/eip,
+rflags, cs, fs, gs, ss, ds, es, __pc registers; uncomment ebp
+register pushing.
+* darwin_stop_world.c (GC_push_all_stacks): Set outCount to
+GC_MACH_THREAD_STATE_COUNT (instead of THREAD_STATE_MAX).
+* darwin_stop_world.c (GC_push_all_stacks): Remove FIXME and WARN
+for i386.
+
+* doc/README.macros (DARWIN_DONT_PARSE_STACK): Fix a typo.
+* darwin_stop_world.c (GC_use_mach_handler_thread): Change type
+to GC_bool.
+* darwin_stop_world.c (GC_suspend_thread_list, GC_start_world):
+Simplify the expressions involving GC_use_mach_handler_thread.
+* darwin_stop_world.c (GC_darwin_register_mach_handler_thread):
+Initialize GC_use_mach_handler_thread to TRUE (instead of 1).
+
+* include/gc_pthread_redirects.h (GC_pthread_sigmask, GC_dlopen,
+pthread_sigmask, dlopen): Don't define for Win32 pthreads (and
+don't include signal.h and dlfcn.h).
+
+* dyn_load.c (GC_register_dynlib_callback): Add FIXME.
+
+* include/private/gcconfig.h: Add support for FreeBSD on ppc64.
+
+* os_dep.c (PROTECT, UNPROTECT): Correct VM_PROT_EXEC to
+VM_PROT_EXECUTE.
+
+* os_dep.c (os2_alloc): Don't set PAG_EXECUTE unless
+pages_executable is on.
+* os_dep.c (os2_alloc): Add FIXME (for recursion).
+* os_dep.c (UNPROTECT): Abort with a more informative message if
+pages_executable is on ("mprotect" case).
+* os_dep.c (PROTECT, UNPROTECT): Set VM_PROT_EXEC if
+pages_executable is on (Darwin case).
+* pthread_support.c (GC_init_real_syms): Abort with an informative
+message if libgc is linked after libpthread.
+
+* dyn_load.c (GC_register_dynlib_callback): Adjust "start" pointer
+for 64-bit targets.
+* pthread_support.c (start_mark_threads): Expand PTHREAD_CREATE
+macro.
+* pthread_support.c (start_mark_threads): Call INIT_REAL_SYMS()
+since REAL(pthread_create) is used.
+* pthread_support.c (PTHREAD_CREATE): Remove unused.
+
+* extra/threadlibs.c (main): Remove --wrap for "read" (since not
+wrapped anymore).
+* doc/README.linux (GC_USE_LD_WRAP): Likewise.
+* os_dep.c (__wrap_read): Likewise.
+
+* include/gc_pthread_redirects.h: Test GC_PTHREADS and GC_H at the
+beginning of the file.
+* include/gc_pthread_redirects.h (GC_PTHREAD_EXIT_ATTRIBUTE): New
+macro (defined only for Linux and Solaris).
+* include/gc_pthread_redirects.h (GC_pthread_cancel,
+GC_pthread_exit): Declare new API function (only if
+GC_PTHREAD_EXIT_ATTRIBUTE).
+* include/gc_pthread_redirects.h (pthread_cancel, pthread_exit):
+Redirect (if GC_PTHREAD_EXIT_ATTRIBUTE).
+* include/private/pthread_support.h (DISABLED_GC): New macro.
+* pthread_support.c (pthread_cancel, pthread_exit): Restore
+original definition or declare "real" function (if needed and
+GC_PTHREAD_EXIT_ATTRIBUTE).
+* pthread_support.c (GC_pthread_cancel_t, GC_pthread_exit_t):
+Declare new types if needed.
+* pthread_support.c (GC_pthread_cancel, GC_pthread_exit): New
+function definition (only if GC_PTHREAD_EXIT_ATTRIBUTE).
+* pthread_support.c (GC_init_real_syms): Initialize pointers to
+the "real" pthread_cancel and pthread_exit (only if
+GC_PTHREAD_EXIT_ATTRIBUTE).
+* pthread_support.c (GC_unregister_my_thread): Enable collections
+if DISABLED_GC was set (only if GC_PTHREAD_EXIT_ATTRIBUTE).
+* pthread_support.c (pthread_cancel, pthread_exit): New wrapped
+function definition (only if GC_PTHREAD_EXIT_ATTRIBUTE defined).
+* pthread_support.c (GC_start_routine): Refine the comment.
+* extra/threadlibs.c (main): Adjust --wrap (add "read",
+"pthread_exit", "pthread_cancel" but remove "sleep").
+* doc/README.linux (GC_USE_LD_WRAP): Likewise.
+
+* include/gc.h (GC_MALLOC_STUBBORN): Remove trailing ';' in the
+macro definition.
+* include/gc.h (GC_reachable_here): Likewise.
+* include/gc.h (GC_reachable_here): Prefix and postfix "volatile"
+with double '_'.
+
+* pthread_start.c: New file.
+* CMakeLists.txt (SRC): Add pthread_start.c.
+* Makefile.am (libgc_la_SOURCES): Likewise.
+* Makefile.direct (CSRCS): Likewise.
+* Makefile.direct (OBJS): Add pthread_start.obj.
+* extra/gc.c: Add a comment; include pthread_start.c.
+* pthread_support.c (start_info): Move the struct definition down
+closer to its usage.
+* pthread_support.c (GC_thread_exit_proc): Replace STATIC with
+GC_INNER.
+* pthread_support.c (GC_inner_start_routine): Move to the
+definition to pthread_start.c; leave only the prototype; remove
+STATIC.
+* pthread_support.c (GC_start_rtn_prepare_thread): New function
+(contains parts of the original GC_inner_start_routine).
+
+* configure.ac (NO_EXECUTE_PERMISSION): Add comment.
+* doc/README.macros (NO_EXECUTE_PERMISSION): Update the
+documentation.
+* include/gc.h (GC_set_pages_executable, GC_get_pages_executable):
+New API function declaration.
+* os_dep.c (OPT_PROT_EXEC): Remove (superseded by
+pages_executable).
+* os_dep.c (pages_executable): New static variable.
+* os_dep.c (IGNORE_PAGES_EXECUTABLE): New macro (used by
+GC_get_pages_executable only).
+* os_dep.c (GC_unix_mmap_get_mem, GC_remap, PROTECT, UNPROTECT):
+Replace OPT_PROT_EXEC with pages_executable.
+* os_dep.c (GC_unix_mmap_get_mem, GC_remap, GC_win32_get_mem,
+GC_wince_get_mem, UNPROTECT): Undefine IGNORE_PAGES_EXECUTABLE.
+* os_dep.c (GC_win32_get_mem, GC_wince_get_mem, GC_remap, PROTECT,
+UNPROTECT): Use PAGE_EXECUTE_... only if pages_executable is on.
+* os_dep.c (GC_set_pages_executable, GC_get_pages_executable): New
+API function definition.
+
+* tests/test.c (check_heap_stats): Increase max_heap_sz by 20% for
+64-bit CPUs (to prevent "Unexpected heap growth" failure on Win64,
+at least).
+
+* tests/test.c (check_heap_stats): Increase max_heap_sz by 25% for
+32-bit CPUs (to prevent "Unexpected heap growth" failure).
+
+* gc_dlopen.c (dlopen): Prototype REAL_DLFUNC if GC_USE_LD_WRAP.
+* pthread_support.c (pthread_create, pthread_join, pthread_detach,
+pthread_sigmask): Likewise.
+* gc_dlopen.c (dlopen): Remove cast (redundant since the prototype
+is added).
+* gc_dlopen.c (GC_dlopen): Fix return type.
+* pthread_support.c (GC_init_real_syms): Don't define
+LIBPTHREAD_NAME, LIBPTHREAD_NAME_LEN, len, namebuf and
+libpthread_name if RTLD_NEXT.
+
+* gc_dlopen.c (disable_gc_for_dlopen): Update the comment.
+* gc_dlopen.c (dlopen): Likewise.
+* include/gc.h (GC_enable_incremental): Refine the comment.
+* include/gc.h (DECLSPEC_NORETURN): Define macro as empty if
+missing (only for Win32).
+* include/gc.h (GC_ExitThread): Use DECLSPEC_NORETURN.
+* win32_threads.c (GC_ExitThread): Likewise.
+* include/gc.h (GC_endthreadex): Add a comment.
+
+* include/cord.h: Fix typos.
+
+* Makefile.am (EXTRA_DIST): Add "CMakeLists.txt" and
+"tests/CMakeLists.txt".
+* doc/doc.am (dist_pkgdata_DATA): Add "doc/README.cmake".
+
+* mach_dep.c (NO_GETCONTEXT): Also define if AVR32.
+* include/private/gcconfig.h (AVR32): New macro (also define the
+supplementary macros for the target).
+* include/private/thread_local_alloc (USE_COMPILER_TLS): Don't
+define for AVR32.
+
+* tests/leak_test.c (main): Explicitly define as returning int
+(to prevent a spurious test failure on some Linux/alpha targets).
+* tests/thread_leak_test.c (main): Likewise.
+* tests/thread_leak_test.c: Initialize GC_find_leak in the main
+thread (before GC_INIT) only.
+* tests/leak_test.c (main): Use GC_set_find_leak() instead of
+accessing GC_find_leak directly.
+* tests/thread_leak_test.c (main): Likewise.
+
+* include/gc.h (GC_find_leak, GC_finalize_on_demand,
+GC_java_finalization, GC_dont_expand, GC_no_dls,
+GC_dont_precollect): Simplify the comment (remove the information
+about data races since the value is boolean).
+
+* os_dep.c (GC_get_stack_base, GC_get_main_stack_base): New
+Solaris-specific implementation (based on thr_stksegment).
+* os_dep.c (stackbase_main_self, stackbase_main_ss_sp): New static
+variable used by the Solaris-specific GC_get_stack_base().
+
+* pthread_support.c (GC_mark_thread_local_free_lists,
+GC_check_tls): Mark (and check) only for live threads (in case of
+GC_destroy_thread_local() is called already but GC_delete_thread()
+is not yet).
+* win32_threads.c (GC_mark_thread_local_free_lists, GC_check_tls):
+Likewise.
+
+* NT_MAKEFILE: Remove the comment about DLL and Win32S.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_MAKEFILE: Add ".SUFFIXES" directive (to handle gc_cpp.cc
+properly on VS 2005+).
+* NT_MAKEFILE: Update GC log file name in comments.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* doc/README.win32: Likewise.
+* NT_MAKEFILE: Remove ":full" for "-debug" option (since no
+longer supported by VS).
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_MAKEFILE: Commented out copying of gc_cpp.cc to gc_cpp.cpp.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* NT_STATIC_THREADS_MAKEFILE: Add -D PARALLEL_MARK option.
+* NT_STATIC_THREADS_MAKEFILE: Increase stack size for gctest.exe.
+* NT_X64_STATIC_THREADS_MAKEFILE: Remove "-stack" option (use the
+default stack size limit).
+* NT_X64_THREADS_MAKEFILE: Rename "gc64_dll.dll" to "gc64.dll".
+* win32_threads.c (GC_get_next_stack): Always define (since it is
+also used for Cygwin now).
+
+* alloc.c (GC_maybe_gc): Move GC_notify_full_gc() call upper to
+be just before GC_clear_marks() call.
+* include/gc_mark.h (GC_start_callback_proc): Refine the comment.
+
+* Makefile.am (check_LTLIBRARIES): Initialize to empty.
+* tests/tests.am (TESTS, check_PROGRAMS): Add staticrootstest.
+* tests/tests.am (staticrootstest_SOURCES, staticrootstest_LDADD,
+libstaticrootslib_la_SOURCES, libstaticrootslib_la_LIBADD,
+libstaticrootslib_la_LDFLAGS, libstaticrootslib_la_DEPENDENCIES):
+Define.
+* tests/tests.am (check_LTLIBRARIES): Add libstaticrootslib.la.
+
+* tests/staticrootstest.c: New file.
+* tests/staticrootslib.c: Likewise.
+
+* dyn_load.c (GC_get_next_stack, GC_cond_add_roots): Define for
+Cygwin as well as other win32 targets.
+* dyn_load.c (GC_wnt): Define to constant true.
+* dyn_load.c (GC_register_dynamic_libraries): Define for Cygwin as
+well as other win32 targets.
+* mark_rts.c (rt_hash, GC_roots_present, add_roots_to_index):
+Don't define for Cygwin, as on other win32.
+* mark_rts.c (GC_add_roots_inner, GC_clear_roots): Handle on
+Cygwin as for other win32 targets.
+* mark_rts.c (GC_rebuild_root_index): Don't declare on Cygwin, as
+other win32.
+* mark_rts.c (GC_remove_tmp_roots): Do declare on Cygwin as on
+other win32.
+* mark_rts.c (GC_remove_roots, GC_remove_roots_inner): Don't
+declare on Cygwin as on other win32.
+* mark_rts.c (GC_is_tmp_root): Do declare on Cygwin when
+!NO_DEBUGGING, as on other win32 targets.
+* mark_rts.c (GC_cond_register_dynamic_libraries): Handle on
+Cygwin as for other win32 targets.
+* os_dep.c (GC_setpagesize): Handle on Cygwin as on other win32.
+* os_dep.c (GC_get_main_stack_base): Don't declare on Cygwin, as
+other win32.
+* os_dep.c (GC_sysinfo): Declare on Cygwin, as other win32.
+* os_dep.c (GC_win32_get_mem): Declare on Cygwin, as on other
+Win32, but call GC_unix_get_mem instead of GlobalAlloc.
+* os_dep.c (GC_win32_free_heap): Declare on Cygwin (as empty).
+* ptr_chck.c (GC_is_visible): Register dynamic libraries on Cygwin
+as on other win32 platforms.
+* win32_threads.c (GC_get_next_stack): Define on Cygwin as well as
+for dynamic loading targets.
+* include/private/gc_priv.h (GC_INNER): Don't try to use
+visibility on Cygwin which does not support it.
+* include/private/gc_priv.h (struct roots): Don't declare r_next
+member on Cygwin as on other windows hosts.
+* include/private/gc_priv.h (LOG_RT_SIZE, RT_SIZE): Don't define
+likewise.
+* include/private/gc_priv.h (struct _GC_arrays): Do declare
+_heap_bases[] member and don't declare _root_index likewise.
+* include/private/gc_priv.h (GC_heap_bases): Do define likewise.
+* include/private/gc_priv.h (_SYSTEM_INFO): Do forward-declare
+likewise.
+* include/private/gc_priv.h (GC_sysinfo): Do declare extern
+likewise.
+* include/private/gcconfig.h (GC_win32_get_mem, GET_MEM): Do
+prototype on Cygwin as other win32 platforms.
+
+* os_dep.c (GC_get_main_stack_base): Use pthread_getattr_np() and
+pthread_attr_getstack() instead of GC_get_stack_base() (and check
+returned stackaddr for NULL); output a warning on failure.
+
+* alloc.c (GC_start_call_back): Replace the definition type to
+GC_start_callback_proc.
+* alloc.c (GC_set_start_callback, GC_get_start_callback): New
+setter/getter function.
+* alloc.c (GC_try_to_collect_inner): Call GC_notify_full_gc()
+unconditionally (because GC_try_to_collect_inner always does full
+GC).
+* include/gc_mark.h (GC_start_callback_proc): New type.
+* include/gc_mark.h (GC_set_start_callback,
+GC_get_start_callback): New API function declaration.
+
+* doc/README.macros (USE_GET_STACKBASE_FOR_MAIN): Document.
+* os_dep.c (GC_get_main_stack_base): Recognize
+USE_GET_STACKBASE_FOR_MAIN (only if THREADS and LINUX_STACKBOTTOM)
+and use GC_get_stack_base() in this case.
+
+* os_dep.c (GC_get_stack_base): Add LOCK/UNLOCK() (since
+GC_find_limit_with_bound() should be called with the lock held).
+* backgraph.c (FOR_EACH_PRED): Fix a typo.
+
+* alloc.c (GC_set_stop_func, GC_get_stop_func): Add
+DCL_LOCK_STATE.
+* finalize.c (GC_notify_or_invoke_finalizers): Likewise.
+* gc_dlopen.c (disable_gc_for_dlopen): Likewise.
+* gcj_mlc.c (maybe_finalize, GC_debug_gcj_malloc): Likewise.
+* mark.c (GC_print_trace): Likewise.
+* misc.c (GC_set_warn_proc, GC_get_warn_proc, GC_enable,
+GC_disable, GC_new_free_list, GC_new_kind, GC_new_proc,
+GC_set_oom_fn, GC_get_oom_fn, GC_set_finalizer_notifier,
+GC_get_finalizer_notifier): Likewise.
+* os_dep.c (GC_get_stack_base, GC_print_callers): Likewise.
+* pthread_support.c (GC_is_thread_tsd_valid,
+GC_wait_for_gc_completion, GC_init_parallel, GC_do_blocking_inner,
+GC_call_with_gc_active, GC_unregister_my_thread, pthread_join,
+pthread_detach, GC_register_my_thread, GC_inner_start_routine,
+pthread_create): Likewise.
+* reclaim.c (GC_print_all_errors): Likewise.
+* win32_threads.c (GC_is_thread_tsd_valid, GC_register_my_thread,
+GC_unregister_my_thread, GC_do_blocking_inner,
+GC_call_with_gc_active, GC_lookup_pthread, GC_pthread_join,
+GC_pthread_start_inner, GC_thread_exit_proc, GC_pthread_detach,
+GC_init_parallel): Likewise.
+
+* doc/README.darwin: Update.
+
+* CMakeLists.txt: Adjust INCLUDE_DIRECTORIES and SRC (to make it
+usable on Mac OS X).
+* doc/README.cmake: Update.
+
+* CMakeLists.txt: New file (adding CMake support).
+* tests/CMakeLists.txt: Likewise.
+* doc/README.cmake: Likewise.
+
+* configure.ac (darwin): Don't define HAS_PPC_THREAD_STATE...
+macros.
+* include/private/gc_priv.h (THREAD_FLD): Recognize
+__DARWIN_UNIX03 instead of HAS_PPC_THREAD_STATE... macros.
+
+* pthread_support.c: Include <sys/param.h> and <sys/sysctl.h> for
+OpenBSD.
+* pthread_support.c (get_ncpu): Define also for Darwin, NetBSD and
+OpenBSD.
+* pthread_support.c (GC_thr_init): Use get_ncpu() for Darwin,
+NetBSD and OpenBSD.
+
+* mallocx.c (GC_generic_malloc_many, GC_malloc_many): Define even
+if THREADS is undefined.
+* include/gc.h (GC_malloc_many): Update the comment.
+
+* include/gc_cpp.h (GC_PLACEMENT_DELETE): Define for Embarcadero
+(formerly known as Borland) C++ compiler v6.21+.
+* include/gc_cpp.h (GC_NO_OPERATOR_NEW_ARRAY): Define for ancient
+VC++ compilers.
+
+* win32_threads.c (GC_register_my_thread_inner,
+GC_pthread_start_inner): Undo the previous commit changes for
+the thread flags and DETACHED state (since the state is only
+tested in GC_thread_exit_proc).
+
+* include/gc.h (GC_unregister_my_thread): Fix a typo; update the
+comment.
+* pthread_support.c (GC_delete_thread): Allow to delete the main
+thread (don't call GC_INTERNAL_FREE for it); update the comment.
+* win32_threads.c (GC_delete_thread): Likewise.
+* pthread_support.c (GC_unregister_my_thread): Add an assertion
+for FINISHED flag is unset.
+* tests/test.c (check_heap_stats): Test the main thread
+unregistering (only if THREADS).
+* win32_threads.c (GC_register_my_thread_inner): Set flags to
+DETACHED (only if GC_PTHREADS).
+* win32_threads.c (GC_unregister_my_thread): Add FIXME (for
+GC_wait_for_gc_completion).
+* win32_threads.c (GC_pthread_start_inner): Clear flags detached
+state if needed; set pthread_id and flags while holding the lock.
+
+* include/private/gc_priv.h (SIG_SUSPEND): Don't define for
+OpenBSD and Darwin.
+
+* include/gc.h: Recognize _M_X64 (as an alias for _AMD64_).
+
+* test.c (main, WinMain): Consistently don't invoke
+GC_enable_incremental() if MAKE_BACKGRAPH is defined, but
+do invoke it even if parallel marking is enabled.
+
+* tests/test.c (reverse_test): Comment out a check for MSWIN32
+(when determing BIG value) assuming outdated win32S.
+* tests/test.c (reverse_test): Rename to reverse_test_inner;
+change the declaration (to be of GC_fn_type); call itself thru
+GC_call_with_gc_active() if the argument is zero.
+* tests/test.c (reverse_test): New function added calling
+reverse_test_inner thru GC_do_blocking (to test GC_do_blocking and
+GC_call_with_gc_active).
+
+* doc/README.macros (IGNORE_DYNAMIC_LOADING, PLATFORM_ANDROID):
+Document.
+* dyn_load.c: Don't include <elf.h> if PLATFORM_ANDROID.
+* dyn_load.c: Include bionic <linker.h> (instead of <link.h>) if
+PLATFORM_ANDROID.
+* include/private/gcconfig.h (LINUX): Define also if
+PLATFORM_ANDROID (for the windows-based toolkit).
+* include/private/gcconfig.h (SEARCH_FOR_DATA_START): Explicitly
+define for Android/x86 platform.
+* include/private/gcconfig.h (IGNORE_DYNAMIC_LOADING): Recognize
+new macro (undefine DYNAMIC_LOADING in this case).
+* include/private/gcconfig.h (CANCEL_SAFE): Don't define if
+PLATFORM_ANDROID.
+* include/private/gcconfig.h (IF_CANCEL): Fix definition for the
+explicitly defined CANCEL_SAFE.
+
+* allchblk.c (GC_allochblk_nth): Don't call GC_remove_protection()
+if GC_DISABLE_INCREMENTAL.
+* reclaim.c (GC_reclaim_generic): Likewise.
+* checksums.c (GC_page_was_ever_dirty): Add prototype.
+* include/private/gc_locks.h (GC_mark_lock_holder): Don't declare
+unless PARALLEL_MARK.
+* include/private/gc_priv.h (GC_dirty_maintained,
+GC_page_was_dirty, GC_remove_protection, GC_dirty_init): Don't
+declare if GC_DISABLE_INCREMENTAL.
+* include/private/gc_priv.h (GC_print_finalization_stats): Don't
+declare if SMALL_CONFIG.
+* include/private/gcconfig.h (CHECKSUMS): Explicitly undefine if
+GC_DISABLE_INCREMENTAL (since nothing to check).
+* include/private/gcconfig.h (DEFAULT_VDB): Don't define if
+GC_DISABLE_INCREMENTAL.
+* os_dep.c (GC_dirty_maintained): Likewise.
+* mark.c (GC_initiate_gc): Don't call GC_read_dirty() if
+GC_DISABLE_INCREMENTAL.
+* os_dep.c (GC_gww_page_was_ever_dirty, GC_page_was_ever_dirty):
+Uncomment; define only if CHECKSUMS.
+
+* darwin_stop_world.c (GC_push_all_stacks): Fix a bug (call
+GC_push_all_stack() instead of GC_push_all_stack_frames()).
+* include/private/gc_priv.h (GC_push_all_stack_frames,
+GC_push_all_register_frames): Rename to
+GC_push_all_stack_sections and GC_push_all_register_sections,
+respectively.
+* mark_rts.c (GC_push_all_stack_frames,
+GC_push_all_register_frames, GC_push_all_stack_part_eager_frames,
+GC_push_current_stack): Likewise.
+* pthread_stop_world.c (GC_push_all_stacks): Likewise.
+* win32_threads.c (GC_push_stack_for): Likewise.
+* misc.c (GC_call_with_gc_active): Rename "frame" local variable
+to "stacksect".
+* pthread_support.c (GC_call_with_gc_active): Likewise.
+* win32_threads.c (GC_call_with_gc_active): Likewise.
+* pthread_support.c (GC_call_with_gc_active): Update FIXME for
+Darwin.
+* win32_threads.c (GC_Thread_Rep): Update the comment for
+traced_stack_sect.
+
+* darwin_stop_world.c (GC_push_all_stacks): Rename
+activation_frame to traced_stack_sect.
+* include/private/gc_priv.h (GC_push_all_stack_frames,
+GC_push_all_register_frames): Likewise.
+* include/private/pthread_support.h (GC_Thread_Rep): Likewise.
+* mark_rts.c (GC_push_all_register_frames,
+GC_push_all_stack_frames, GC_push_all_stack_part_eager_frames,
+GC_push_current_stack): Likewise.
+* pthread_stop_world.c (GC_push_all_stacks): Likewise.
+* pthread_support.c (GC_call_with_gc_active): Likewise.
+* win32_threads.c (GC_Thread_Rep, GC_call_with_gc_active,
+GC_push_stack_for): Likewise.
+* include/private/gc_priv.h (GC_activation_frame_s): Rename to
+GC_traced_stack_sect_s.
+* include/private/gc_priv.h (GC_activation_frame): Rename to
+GC_traced_stack_sect.
+* misc.c (GC_activation_frame, GC_call_with_gc_active): Likewise.
+* doc/README.macros (UNICODE): Document.
+
+* doc/README.macros (GC_READ_ENV_FILE): Document (new macro).
+* include/private/gc_priv.h (GETENV): Recognize GC_READ_ENV_FILE;
+declare and use GC_envfile_getenv().
+* misc.c (GC_envfile_content, GC_envfile_length): New static
+variable (only if GC_READ_ENV_FILE).
+* misc.c (GC_ENVFILE_MAXLEN): New macro (used in GC_envfile_init).
+* misc.c (GC_envfile_init, GC_envfile_getenv): New function (only
+if GC_READ_ENV_FILE).
+* misc.c (GC_init): Call GC_envfile_init() (before using GETENV)
+if GC_READ_ENV_FILE.
+* misc.c (GC_init): Move GC_setpagesize() and GC_init_win32()
+calls to be just before GC_envfile_init() one (since the latter
+uses GET_MEM).
+* misc.c (GC_abort): use ExitProcess() (instead of DebugBreak) for
+WinCE if NO_DEBUGGING; add a comment for DebugBreak() (for WinCE).
+* mark_rts.c (GC_add_roots_inner): Remove redundant trailing '\n'
+from the ABORT message.
+* misc.c (GC_init): Likewise.
+* os_dep.c (GC_get_main_stack_base, GC_register_data_segments):
+Likewise.
+* pthread_stop_world.c (GC_push_all_stacks): Likewise.
+* pthread_support.c (GC_init_real_syms, start_mark_threads):
+Likewise.
+
+* win32_threads.c (GC_get_next_stack): Don't define for Cygwin
+(since unused for now).
+
+* dyn_load.c (HAVE_REGISTER_MAIN_STATIC_DATA): Don't define unless
+GC_register_main_static_data() is defined.
+* dyn_load.c (GC_register_dynamic_libraries): Define only if used
+(if DYNAMIC_LOADING or PCR or Win32/CE).
+* dyn_load.c (GC_register_main_static_data): Define the default
+one only if DYNAMIC_LOADING.
+* include/private/gc_priv.h (GC_register_dynamic_libraries):
+Declare only if used (to prevent compiler warning).
+
+* mark_rts.c (GC_approx_sp): Add a comment (for GCC).
+
+
+[7.2alpha4] 2009-12-01
+======================
+
+* configure.ac (AC_CONFIG_COMMANDS): Quote srcdir value.
+
+* include/gc.h (GC_get_suspend_signal): New function declaration.
+* misc.c (GC_get_suspend_signal): New API function (only if
+THREADS).
+
+* alloc.c (min_bytes_allocd): Multiply GC_free_space_divisor by
+two if GC_incremental (instead of TRUE_INCREMENTAL).
+
+* sparc_mach_dep.S (GC_push_regs): Remove the reference.
+
+* os_dep.c (SIZE_T, PULONG_PTR): Remove.
+* os_dep.c (ULONG_PTR): Replace with GC_ULONG_PTR (defined as GC
+"word"); add the comment.
+* os_dep.c (GetWriteWatch_type, detect_GetWriteWatch,
+GC_gww_read_dirty): Prefix ULONG_PTR with "GC_".
+
+* win32_threads.c (THREAD_TABLE_SZ): Change back to a power-of-two
+const value (for speed).
+* win32_threads.c (THREAD_TABLE_INDEX): New macro.
+* win32_threads.c (GC_new_thread, GC_lookup_thread_inner,
+GC_delete_gc_thread, GC_delete_thread, GC_lookup_pthread): Use
+THREAD_TABLE_INDEX instead of THREAD_TABLE_SZ.
+* win32_threads.c (PTHREAD_MAP_HASH): Rename to PTHREAD_MAP_INDEX.
+
+* win32_threads.c (THREAD_TABLE_SZ): Make the const value prime.
+
+* backgraph.c: Remove apostrophe char from "#error".
+
+* doc/README.macros (GC_DISABLE_INCREMENTAL): Document.
+* include/private/gcconfig.h (GC_DISABLE_INCREMENTAL): Recognize
+new macro; implicitly define it if SMALL_CONFIG.
+* alloc.c (GC_incremental, GC_timeout_stop_func): Check for
+GC_DISABLE_INCREMENTAL instead of SMALL_CONFIG.
+* include/private/gc_priv.h (GC_incremental, TRUE_INCREMENTAL,
+GC_push_conditional): Likewise.
+* mark.c (GC_push_next_marked_dirty, GC_push_selected,
+GC_push_conditional, GC_block_was_dirty): Likewise.
+* misc.c (GC_enable_incremental): Likewise.
+* misc.c (GC_init): Likewise.
+
+* dyn_load.c (WIN32_LEAN_AND_MEAN): Guard with ifndef.
+* misc.c (WIN32_LEAN_AND_MEAN): Likewise.
+* os_dep.c (WIN32_LEAN_AND_MEAN): Likewise.
+* allchblk.c (GC_allochblk_nth): Fix a minor typo (don't/doesn't)
+in a comment.
+* backgraph.c: Likewise.
+* dyn_load.c (GC_register_dynamic_libraries): Likewise.
+* extra/threadlibs.c (main): Likewise.
+* pthread_support.c (pthread_join): Likewise.
+* tests/test.c (main): Likewise.
+
+* mach_dep.c (GC_push_regs): Remove STATIC (just to catch
+a duplicate symbol definition linker error).
+* misc.c (GC_clear_stack_inner): Likewise.
+* sparc_mach_dep.S (GC_push_regs): Comment out the reference.
+
+* include/private/gc_priv.h (GC_write_disabled): New variable
+declaration (only if GC_ASSERTIONS and Win32 threads).
+* misc.c (GC_write): Add assertion for GC_write_disabled value is
+not on (only if THREADS).
+* win32_threads.c (GC_write_disabled): New variable (only if
+GC_ASSERTIONS and not Cygwin).
+* win32_threads.c (GC_stop_world): Set and clear GC_write_disabled
+(while holding GC_write_cs).
+
+* win32_threads.c (GC_please_stop): If DllMain-based thread
+registration is not compiled in then define GC_please_stop as
+a non-volatile variable for assertion only.
+* win32_threads.c (GC_stop_world): Set and clear only if defined.
+* win32_threads.c (GC_stop_world): Add the comment for GC_printf()
+usage (while holding GC_write_cs).
+* win32_threads.c (GC_delete_gc_thread): Likewise.
+* os_dep.c (GC_remove_protection): Likewise.
+
+* pthread_support.c (GC_inner_start_routine): Join 3 sequential
+GC_printf() calls into a single one (for DEBUG_THREADS).
+
+* include/private/gc_priv.h (GC_total_stacksize): New variable
+declaration (only if THREADS).
+* alloc.c (GC_total_stacksize): New variable (only if THREADS).
+* alloc.c (min_bytes_allocd): Calculate stack_size using
+GC_stackbottom only in the single-threaded case; otherwise use
+GC_total_stacksize; print GC_total_stacksize value if
+DEBUG_THREADS.
+* darwin_stop_world.c (GC_push_all_stacks): Use "%p" printf type
+specifier for lo/hi values (instead of "%lx").
+* darwin_stop_world.c (GC_push_all_stacks): Use
+GC_push_all_stack_frames() instead of GC_push_all_stack().
+* darwin_stop_world.c (GC_push_all_stacks): Recalculate
+GC_total_stacksize value.
+* pthread_stop_world.c (GC_push_all_stacks): Likewise.
+* win32_threads.c (GC_push_all_stacks): Likewise.
+* win32_threads.c (GC_push_stack_for): Pass "me" argument; return
+stack size; don't check for non-zero value of thread->stack_base.
+* win32_threads.c (GC_push_all_stacks): Don't call
+GC_push_stack_for() and don't check for "t->id == me" if
+thread->stack_base is zero.
+
+* dyn_load.c (GC_dump_meminfo): Prefix "%lx" printf type specifier
+with "0x".
+* os_dep.c (PROTECT): Likewise.
+* win32_threads.c (GC_mark_thread_local_free_lists): Cast p->id to
+int (to match printf type specifier).
+
+* tests/test.c (check_heap_stats): Take into account the unmapped
+memory size when checking for "Unexpected heap growth"; remove
+FIXME.
+
+* alloc.c: Revert last change.
+
+* include/private/gcconfig.h (STACKBOTTOM): Add a presence check
+for eCos/NOSYS.
+* misc.c (GC_write): Comment out _Jv_diag_write() call (since no
+longer defined in GCJ).
+
+* os_dep.c (brk): Rename to ecos_gc_brk.
+
+* alloc.c (min_bytes_allocd): Use GC_stackbottom value to compute
+stack_size even if THREADS.
+* doc/README.macros (DEBUG_THREADS): Document.
+* pthread_support.c (DEBUG_THREADS): Remove the commented out
+definition.
+* win32_threads.c (DEBUG_WIN32_THREADS): Remove duplicate
+definition.
+* win32_threads.c: Include errno.h (except for WinCE).
+* win32_threads.c (GC_win32_start_inner): Copy "start" and "param"
+to local variables, and free "arg" parameter before "start"
+invocation.
+* win32_threads.c (GC_beginthreadex): Set errno to EAGAIN on error
+(instead of calling SetLastError(ERROR_NOT_ENOUGH_MEMORY)).
+* win32_threads.c (GC_beginthreadex): Return 0 on error (instead
+of -1).
+
+* darwin_stop_world.c (GC_darwin_register_mach_handler_thread):
+Use GC_INNER for the function definition.
+* include/private/darwin_stop_world.h
+(GC_darwin_register_mach_handler_thread): Remove the prototype.
+* os_dep.c (GC_darwin_register_mach_handler_thread): Use GC_INNER
+for the function prototype.
+* include/private/gc_priv.h (NDEBUG): Explicitly define if
+NO_DEBUGGING and not GC_ASSERTIONS (before the standard headers
+inclusion).
+
+* include/private/gcconfig.h: Move DebugBreak() workaround (for
+x86mingw32ce toolchain) to gc_priv.h (after windows.h inclusion).
+
+* allchblk.c (GC_unmap_old, GC_merge_unmapped, GC_allochblk,
+GC_freehblk): Use GC_INNER for the function definition.
+* alloc.c (GC_never_stop_func, GC_should_collect,
+GC_try_to_collect_inner, GC_collect_a_little_inner,
+GC_set_fl_marks, GC_add_to_our_memory, GC_add_to_heap,
+GC_expand_hp_inner, GC_collect_or_expand, GC_allocobj): Likewise.
+* backgraph.c (GC_build_back_graph, GC_traverse_back_graph):
+Likewise.
+* blacklst.c (GC_default_print_heap_obj_proc, GC_bl_init,
+GC_promote_black_lists, GC_unpromote_black_lists,
+GC_add_to_black_list_normal, GC_add_to_black_list_stack,
+GC_is_black_listed): Likewise.
+* darwin_stop_world.c (GC_push_all_stacks, GC_push_all_stacks,
+GC_stop_init, GC_stop_world, GC_start_world): Likewise.
+* dbg_mlc.c (GC_has_other_debug_info, GC_store_back_pointer,
+GC_marked_for_finalization, GC_generate_random_backtrace_no_gc,
+GC_store_debug_info, GC_start_debugging,
+GC_debug_generic_malloc_inner,
+GC_debug_generic_malloc_inner_ignore_off_page,
+GC_debug_malloc_uncollectable, GC_debug_free_inner): Likewise.
+* dyn_load.c (GC_register_dynamic_libraries,
+GC_register_main_static_data, GC_init_dyld): Likewise.
+* finalize.c (GC_push_finalizer_structures, GC_finalize,
+GC_notify_or_invoke_finalizers, GC_print_finalization_stats):
+Likewise.
+* gcj_mlc.c (GC_core_gcj_malloc): Likewise.
+* headers.c (GC_find_header, GC_header_cache_miss,
+GC_scratch_alloc, GC_init_headers, GC_install_header,
+GC_install_counts, GC_remove_header, GC_remove_counts,
+GC_next_used_block, GC_prev_block): Likewise.
+* mach_dep.c (GC_with_callee_saves_pushed): Likewise.
+* malloc.c (GC_collect_or_expand, GC_alloc_large,
+GC_generic_malloc_inner, GC_generic_malloc_inner_ignore_off_page,
+GC_core_malloc_atomic, GC_core_malloc, GC_free_inner): Likewise.
+* mallocx.c (GC_generic_malloc_ignore_off_page): Likewise.
+* mark.c (GC_collection_in_progress, GC_clear_hdr_marks,
+GC_set_hdr_marks, GC_set_mark_bit, GC_clear_mark_bit,
+GC_clear_marks, GC_initiate_gc, GC_mark_some,
+GC_mark_stack_empty, GC_invalidate_mark_state,
+GC_signal_mark_stack_overflow, GC_mark_from, GC_help_marker,
+GC_mark_init, GC_push_all, GC_push_conditional,
+GC_mark_and_push_stack, GC_push_all_eager, GC_push_all_stack):
+Likewise.
+* mark_rts.c (GC_is_static_root, GC_roots_present, GC_approx_sp,
+GC_exclude_static_roots_inner, GC_push_all_register_frames,
+GC_push_all_stack_frames, GC_cond_register_dynamic_libraries,
+GC_push_roots): Likewise.
+* misc.c (GC_extend_size_map, GC_clear_stack, GC_err_write):
+Likewise.
+* new_hblk.c (GC_build_fl, GC_new_hblk): Likewise.
+* obj_map.c (GC_register_displacement_inner, GC_add_map_entry,
+GC_initialize_offsets): Likewise.
+* os_dep.c (GC_get_maps, GC_parse_map_entry, GC_text_mapping,
+GC_init_linux_data_start, GC_init_netbsd_elf, GC_setpagesize,
+GC_set_and_save_fault_handler, GC_setup_temporary_fault_handler,
+GC_reset_fault_handler, GC_get_register_stack_base, GC_init_win32,
+GC_add_current_malloc_heap, GC_is_heap_base, GC_unmap, GC_remap,
+GC_unmap_gap, GC_push_all_stacks, GC_gww_dirty_init,
+GC_dirty_init, GC_read_dirty, GC_page_was_dirty,
+GC_page_was_ever_dirty, GC_remove_protection,
+GC_write_fault_handler, GC_mprotect_stop, GC_mprotect_resume,
+GC_save_callers, GC_print_callers): Likewise.
+* pthread_stop_world.c (GC_push_all_stacks, GC_stop_world,
+GC_start_world, GC_stop_init): Likewise.
+* pthread_support.c (GC_mark_thread_local_free_lists,
+GC_lookup_thread, GC_reset_finalizer_nested,
+GC_check_finalizer_nested, GC_segment_is_thread_stack,
+GC_greatest_stack_base_below, GC_thr_init, GC_init_parallel,
+GC_do_blocking_inner, GC_lock, GC_acquire_mark_lock,
+GC_release_mark_lock, GC_wait_for_reclaim, GC_notify_all_builder,
+GC_wait_marker, GC_notify_all_marker): Likewise.
+* reclaim.c (GC_print_all_errors, GC_block_empty,
+GC_reclaim_generic, GC_start_reclaim, GC_continue_reclaim,
+GC_reclaim_all): Likewise.
+* thread_local_alloc.c (GC_init_thread_local,
+GC_destroy_thread_local, GC_mark_thread_local_fls_for): Likewise.
+* win32_threads.c (GC_reset_finalizer_nested,
+GC_check_finalizer_nested, GC_do_blocking_inner, GC_stop_world,
+GC_start_world, GC_push_all_stacks, GC_get_next_stack,
+GC_acquire_mark_lock, GC_release_mark_lock, GC_wait_for_reclaim,
+GC_notify_all_builder, GC_wait_marker, GC_notify_all_marker,
+GC_thr_init, GC_init_parallel, GC_lock,
+GC_mark_thread_local_free_lists): Likewise.
+* alloc.c (GC_add_current_malloc_heap, GC_build_back_graph,
+GC_traverse_back_graph): Use GC_INNER for the function prototype.
+* darwin_stop_world.c (GC_mprotect_stop, GC_mprotect_resume):
+Likewise.
+* dbg_mlc.c (GC_default_print_heap_obj_proc): Likewise.
+* dyn_load.c (GC_parse_map_entry, GC_get_maps,
+GC_segment_is_thread_stack, GC_roots_present, GC_is_heap_base,
+GC_get_next_stack): Likewise.
+* finalize.c (GC_reset_finalizer_nested,
+GC_check_finalizer_nested): Likewise.
+* gcj_mlc.c (GC_start_debugging): Likewise.
+* include/private/dbg_mlc.h (GC_save_callers, GC_print_callers,
+GC_has_other_debug_info, GC_store_debug_info): Likewise.
+* include/private/gc_hdrs.h (GC_header_cache_miss): Likewise.
+* include/private/gc_locks.h (GC_lock): Likewise.
+* include/private/gc_pmark.h (GC_signal_mark_stack_overflow,
+GC_mark_from): Likewise.
+* include/private/pthread_support.h (GC_lookup_thread,
+GC_stop_init): Likewise.
+* include/private/thread_local_alloc.h (GC_init_thread_local,
+GC_destroy_thread_local, GC_mark_thread_local_fls_for): Likewise.
+* malloc.c (GC_extend_size_map, GC_text_mapping): Likewise.
+* mark.c (GC_page_was_ever_dirty): Likewise.
+* mark_rts.c (GC_mark_thread_local_free_lists): Likewise.
+* misc.c (GC_register_main_static_data, GC_init_win32,
+GC_setpagesize, GC_init_linux_data_start,
+GC_set_and_save_fault_handler, GC_init_dyld, GC_init_netbsd_elf,
+GC_do_blocking_inner): Likewise.
+* os_dep.c (GC_greatest_stack_base_below): Likewise.
+* win32_threads.c (GC_write_fault_handler, GC_gww_dirty_init):
+Likewise.
+* include/private/gc_priv.h: Likewise.
+* include/private/gc_priv.h (GC_INNER): Update the comment.
+* doc/README.macros (GC_DLL): Update.
+
+* alloc.c (GC_collection_in_progress): Move the prototype to
+gc_priv.h.
+* gc_dlopen.c (GC_collection_in_progress): Likewise.
+* pthread_support.c (GC_collection_in_progress): Likewise.
+* misc.c (GC_init_parallel): Likewise.
+* pthread_support.c (GC_init_parallel): Likewise.
+* win32_threads.c (GC_init_parallel): Likewise.
+* darwin_stop_world.c (GC_thr_init): Likewise.
+* misc.c (GC_thr_init): Likewise.
+* pthread_stop_world.c (GC_thr_init): Likewise.
+* pthread_support.c (GC_thr_init): Likewise.
+* blacklst.c (GC_clear_bl, GC_copy_bl,
+GC_number_stack_black_listed): Make STATIC.
+* dbg_mlc.c (GC_print_obj, GC_make_closure,
+GC_debug_invoke_finalizer): Likewise.
+* malloc.c (GC_alloc_large_and_clear): Likewise.
+* mark.c (GC_push_selected, GC_push_marked1, GC_push_marked2,
+GC_push_marked4, GC_push_marked, GC_push_next_marked,
+GC_push_next_marked_dirty, GC_push_next_marked_uncollectable):
+Likewise.
+* misc.c (GC_clear_stack_inner): Likewise.
+* os_dep.c (GC_repeat_read, GC_default_push_other_roots): Likewise.
+* darwin_stop_world.c (FindTopOfStack): Make static; define only
+if not DARWIN_DONT_PARSE_STACK.
+* dbg_mlc.c (GC_debug_free_inner): Define only if DBG_HDRS_ALL.
+* dyn_load.c (GC_repeat_read): Remove unused prototype.
+* include/private/gc_pmark.h (GC_find_start): Likewise.
+* misc.c (GC_read, GC_register_finalizer_no_order): Likewise.
+* dyn_load.c (GC_segment_is_thread_stack): Add prototype (only if
+THREADS).
+* dyn_load.c (GC_register_main_static_data): Define only if
+DYNAMIC_LOADING.
+* finalize.c (GC_enqueue_all_finalizers): Remove unnecessary tail
+"return" statement.
+* gc_dlopen.c (GC_SOLARIS_THREADS): Don't recognize (since implies
+GC_PTHREADS).
+* include/gc.h: Fix a typo.
+* include/gc_inline.h (GC_ASSERT): Define (if not defined) since
+the header is public.
+* include/gc_inline.h (GC_generic_malloc_many): New public
+function declaration.
+* mallocx.c (GC_generic_malloc_many): Make public.
+* include/private/gc_priv.h (GC_INNER): Use visibility attribute
+(if available).
+* include/private/gc_priv.h (GC_EXTERN): Define using GC_INNER.
+* include/private/gc_priv.h: Include atomic_ops.h if THREADS and
+MPROTECT_VDB.
+* os_dep.c: Don't include atomic_ops.h
+* win32_threads.c: Likewise.
+* include/private/gc_priv.h (GC_push_selected, GC_push_regs,
+GC_push_marked, GC_number_stack_black_listed,
+GC_alloc_large_and_clear, GC_reclaim_or_delete_all,
+GC_generic_malloc_many, GC_make_closure,
+GC_debug_invoke_finalizer, GC_print_obj, GC_page_was_ever_dirty):
+Remove the prototype.
+* mark.c (GC_page_was_ever_dirty): Add prototype (only if
+PROC_VDB).
+* include/private/gc_priv.h (GC_push_next_marked_dirty,
+GC_push_next_marked, GC_push_next_marked_uncollectable): Move
+the prototype to mark.c.
+* include/private/gc_priv.h (GC_is_static_root): Declare only if
+not THREADS.
+* include/private/gc_priv.h (GC_free_inner): Declare only if
+THREADS.
+* include/private/gc_priv.h (GC_debug_free_inner): Declare only if
+THREADS and DBG_HDRS_ALL.
+* include/private/gc_priv.h (GC_markers): Declare GC_markers only
+if PARALLEL_MARK.
+* include/private/gc_priv.h (GC_register_main_static_data): Move
+the prototype to misc.c.
+* mach_dep.c (GC_push_regs): Make STATIC; define only along with
+HAVE_PUSH_REGS definition.
+* mach_dep.c (GC_clear_stack_inner): Replace K&R-style function
+definition with the ANSI C one.
+* mark.c (GC_started_thread_while_stopped): Declared only if not
+GNU C.
+* win32_threads.c (GC_started_thread_while_stopped): Don't define
+if GNU C.
+* mark.c (GC_mark_from): Avoid unbalanced brackets in
+#if-#else-#endif blocks.
+* mark_rts.c (GC_is_static_root): Define only if not THREADS.
+* os_dep.c (GC_get_stack_base): Make public (for OpenBSD).
+* os_dep.c (GC_page_was_ever_dirty): Comment out the function
+except for PROC_VDB.
+* tests/test.c (main): Don't reference GC_print_obj,
+GC_make_closure, GC_debug_invoke_finalizer,
+GC_page_was_ever_dirty, GC_is_fresh (in GC_noop).
+* thread_local_alloc.c: Don't include "gc_inline.h".
+* win32_threads.c (GC_write_fault_handler): Declare only if
+MPROTECT_VDB.
+
+* allchblk.c (DEBUG): Remove macro (since unused).
+* allchblk.c: Include private/gc_priv.h before other includes and
+definitions.
+* alloc.c: Likewise.
+* gc_dlopen.c: Likewise.
+* headers.c: Likewise.
+* mallocx.c: Likewise.
+* mark_rts.c: Likewise.
+* new_hblk.c: Likewise.
+* reclaim.c: Likewise.
+* mark.c: Include private/gc_pmark.h before other includes.
+* misc.c: Likewise.
+* dyn_load.c (_GNU_SOURCE): Move the definition to gc_priv.h.
+* pthread_support.c (_USING_POSIX4A_DRAFT10): Likewise.
+* pthread_support.c (_POSIX4A_DRAFT10_SOURCE): Remove (since
+already defined in gc_config_macros.h).
+* dyn_load.c (GC_init_dyld): Remove parameter cast for
+_dyld_register_func_for_add_image() and
+_dyld_register_func_for_remove_image(); add the comment about
+possible warnings; add FIXME for the deprecated
+_dyld_bind_fully_image_containing_address().
+* include/private/gc_priv.h: Include gc.h before the standard
+headers inclusion.
+* tests/test.c: Likewise.
+* include/private/gcconfig.h (DebugBreak): Update the comment.
+* typd_mlc.c (ED_INITIAL_SIZE): Remove ';'.
+
+* configure.ac (openbsd): Define GC_OPENBSD_THREADS.
+* configure.ac: Add AM_CONDITIONAL(OPENBSD_THREADS).
+* configure.ac: Add sparc-openbsd case.
+* doc/README.macros (GC_NETBSD_THREADS, GC_OPENBSD_THREADS):
+Document.
+* tests/test.c (main): Handle OpenBSD case.
+* include/private/pthread_stop_world.h: Likewise.
+* extra/threadlibs.c (main): Replace K&R-style function definition
+with the ANSI C one.
+* extra/threadlibs.c (main): Handle GC_OPENBSD_THREADS case.
+* dyn_load.c (OPENBSD): Recognize (similar to NETBSD).
+* include/gc_config_macros.h (GC_SOLARIS_THREADS): Recognize;
+define it for OpenBSD.
+* include/gc_pthread_redirects.h (GC_pthread_sigmask,
+pthread_sigmask): Don't declare and redefine for OpenBSD.
+* include/private/gcconfig.h: Handle OpenBSD (on arm, sh, i386,
+amd64, powerpc).
+* mach_dep.c (NO_GETCONTEXT): Likewise.
+* include/private/pthread_stop_world.h (thread_stop_info): Don't
+define last_stop_count field if OpenBSD.
+* misc.c (GC_init_dyld): Add declaration (if NetBSD).
+* misc.c (GC_init): Don't call GC_init_netbsd_elf() for OpenBSD.
+* os_dep.c (GC_init_netbsd_elf): Don't define for OpenBSD.
+* os_dep.c (old_segv_act, GC_jmp_buf_openbsd): New static variable
+(only if OpenBSD).
+* os_dep.c (GC_fault_handler_openbsd, GC_find_limit_openbsd,
+GC_skip_hole_openbsd): New static function (only if OpenBSD).
+* os_dep.c (GC_get_stack_base, GC_get_main_stack_base,
+GC_register_data_segments): Define specially for OpenBSD case.
+* os_dep.c (GC_fault_handler_lock): Initialize to
+AO_TS_INITIALIZER (instead of 0).
+* pthread_support.c (GC_allocate_lock): Likewise.
+* pthread_stop_world.c (NSIG, GC_print_sig_mask,
+GC_remove_allowed_signals, suspend_handler_mask, GC_stop_count,
+GC_world_is_stopped, GC_retry_signals, SIG_THR_RESTART,
+GC_suspend_ack_sem, GC_suspend_handler_inner, GC_suspend_handler,
+GC_restart_handler): Don't define and use if OpenBSD.
+* pthread_stop_world.c (GC_suspend_all, GC_stop_world,
+GC_start_world): Handle OpenBSD case.
+* pthread_stop_world.c (GC_stop_init): Define as empty if OpenBSD.
+* pthread_support.c (pthread_sigmask): Don't undefine the macro and
+don't define the wrapper function if OpenBSD.
+* pthread_support.c (GC_thr_init): Handle OpenBSD case.
+
+* dyn_load.c: Move the inclusion of private/gc_priv.h below
+definition of a feature macro (_GNU_SOURCE).
+
+* include/gc.h (REVEAL_POINTER): Remove redundant parentheses.
+* include/gc.h (GC_HIDE_POINTER, GC_REVEAL_POINTER): New macros
+(only if GC_I_HIDE_POINTERS).
+* backgraph.c (GET_OH_BG_PTR): Prefix REVEAL_POINTER() with "GC_".
+* dbg_mlc.c (GC_get_back_ptr_info): Likewise.
+* finalize.c (GC_grow_table, GC_dump_finalization, GC_finalize,
+GC_enqueue_all_finalizers): Likewise.
+* backgraph.c (SET_OH_BG_PTR): Prefix HIDE_POINTER() with "GC_".
+* finalize.c (GC_general_register_disappearing_link,
+GC_unregister_disappearing_link, GC_register_finalizer_inner,
+GC_finalize): Likewise.
+* include/private/dbg_mlc.h (HIDE_BACK_PTR): Likewise.
+* include/private/dbg_mlc.h (GC_I_HIDE_POINTERS): Define instead
+of I_HIDE_POINTERS.
+* include/private/gc_priv.h (GC_I_HIDE_POINTERS): Likewise.
+* include/gc.h (_GC_H): Strip leading underscore.
+* include/gc_backptr.h (_GC_H): Likewise.
+* include/gc_gcj.h (_GC_H): Likewise.
+* include/gc_mark.h (_GC_H): Likewise.
+* include/gc_typed.h (_GC_TYPED_H, _GC_H): Likewise.
+* include/javaxfc.h (_GC_H): Likewise.
+* include/new_gc_alloc.h (__GC_SPECIALIZE): Likewise.
+* include/private/dbg_mlc.h (_GC_H): Likewise.
+* include/private/gc_priv.h (_GC_H): Likewise.
+
+* gc_cpp.cc: Include "gc_cpp.h" instead of <gc_cpp.h>.
+
+* include/private/gc_priv.h (GC_INNER): New macro (for GC-scope
+variable definitions).
+* include/private/gc_priv.h (GC_EXTERN): Update the comment.
+* allchblk.c (GC_unmap_threshold): Define as GC_INNER.
+* alloc.c (GC_incremental, GC_world_stopped, GC_n_heap_sects,
+GC_n_memory, GC_fail_count): Likewise.
+* blacklst.c (GC_black_list_spacing, GC_print_heap_obj): Likewise.
+* gcj_mlc.c (GC_gcj_malloc_initialized, GC_gcjobjfreelist): Likewise.
+* mach_dep.c (GC_save_regs_ret_val): Likewise.
+* mark.c (GC_n_mark_procs, GC_obj_kinds, GC_n_kinds,
+GC_mark_stack, GC_mark_stack_limit, GC_mark_stack_size,
+GC_mark_stack_top, GC_mark_state, GC_mark_stack_too_small,
+GC_mark_no, GC_markers): Likewise.
+* mark_rts.c (GC_root_size, GC_push_typed_structures): Likewise.
+* misc.c (GC_allocate_ml, GC_debugging_started, GC_check_heap,
+GC_print_all_smashed, GC_print_back_height, GC_dump_regularly,
+GC_backtraces, GC_force_unmap_on_gcollect,
+GC_large_alloc_warn_interval, GC_is_initialized, GC_write_cs,
+GC_current_warn_proc, GC_blocked_sp, GC_activation_frame): Likewise.
+* os_dep.c (GC_page_size, GC_dont_query_stack_min,
+GC_no_win32_dlls, GC_wnt, GC_sysinfo, GC_push_other_roots,
+GC_dirty_maintained, GC_fault_handler_lock): Likewise.
+* pthread_support.c (GC_allocate_ml, GC_lock_holder,
+GC_need_to_lock, GC_thr_initialized, GC_threads,
+GC_in_thread_creation, GC_collecting, GC_allocate_lock,
+GC_mark_lock_holder): Likewise.
+* reclaim.c (GC_bytes_found, GC_fl_builder_count, GC_have_errors):
+Likewise.
+* win32_threads.c (GC_allocate_ml, GC_lock_holder,
+GC_need_to_lock, GC_mark_lock_holder, GC_collecting): Likewise.
+* extra/gc.c (GC_INNER, GC_EXTERN): Define as STATIC.
+* mach_dep.c (GC_with_callee_saves_pushed): Remove redundant {}.
+
+* include/private/gc_priv.h (GC_bytes_allocd, GC_objfreelist,
+GC_aobjfreelist): Replace GC_EXTERN to extern for SEPARATE_GLOBALS
+case (since they are not defined inside GC at present).
+* include/private/gc_priv.h (GC_objects_are_marked): Remove the
+declaration (since made static).
+* mark.c (GC_objects_are_marked): Define as STATIC.
+* win32_threads.c (GC_thr_initialized, GC_in_thread_creation):
+Likewise.
+* mark.c (GC_N_KINDS_INITIAL_VALUE): New macro (defined and used
+to initialize GC_n_kinds).
+* win32_threads.c (start_mark_threads): Adjust the comment.
+
+* alloc.c (GC_notify_full_gc): Use GC_INLINE for a tiny static
+function.
+* backgraph.c (pop_in_progress, GC_apply_to_each_object): Likewise.
+* mark_rts.c (add_roots_to_index): Likewise.
+
+* extra/gc.c: New file.
+* Makefile.am (EXTRA_DIST): Add "extra/gc.c".
+
+* misc.c (GC_log): Remove the declaration; move the definition (to
+the place where it is used); make STATIC.
+* misc.c (GC_init): Use GC_err_printf() instead of GC_log_printf()
+to print open log failure.
+* misc.c (GC_write): Don't abort on open log failure if the GC is
+compiled with GC_PRINT_VERBOSE_STATS (useful for WinCE).
+
+* include/private/gcconfig.h (USE_MMAP): Guard with ifndef.
+
+* allchblk.c (GC_fail_count, GC_large_alloc_warn_interval): Move
+the variable declaration to gc_priv.h.
+* alloc.c (GC_bytes_found, GC_unmap_threshold,
+GC_force_unmap_on_gcollect): Likewise.
+* dyn_load.c (GC_no_win32_dlls, GC_wnt): Likewise.
+* finalize.c (GC_fail_count): Likewise.
+* include/private/gc_locks.h (GC_allocate_ml, GC_lock_holder,
+GC_collecting, GC_mark_lock_holder, GC_need_to_lock): Likewise.
+* include/private/gc_pmark.h (GC_n_mark_procs, GC_mark_stack_size,
+GC_mark_stack_limit, GC_mark_stack_top, GC_mark_stack,
+GC_mark_stack_too_small, GC_mark_state): Likewise.
+* include/private/pthread_support.h (GC_threads,
+GC_thr_initialized, GC_in_thread_creation): Likewise.
+* mallocx.c (GC_bytes_found): Likewise.
+* mark_rts.c (GC_save_regs_ret_val, GC_world_stopped): Likewise.
+* misc.c (GC_unmap_threshold): Likewise.
+* os_dep.c (GC_unmap_threshold): Likewise.
+* pthread_support.c (GC_markers): Likewise.
+* thread_local_alloc.c (GC_gcjobjfreelist,
+GC_gcj_malloc_initialized, GC_gcj_kind): Likewise.
+* win32_threads.c (GC_fault_handler_lock, GC_write_cs,
+GC_dont_query_stack_min, GC_markers, GC_wnt): Likewise.
+* include/private/gc_priv.h (GC_EXTERN): New macro (used mostly as
+a tag for now); defined after "gcconfig.h" inclusion.
+* include/private/gc_priv.h: Use GC_EXTERN instead of "extern"
+keyword for most global variables.
+* alloc.c (GC_copyright): Add the comment about the symbol
+visibility.
+* finalize.c (GC_fo_entries): Likewise.
+* include/private/gc_priv.h (GC_print_stats): Likewise.
+* misc.c (GC_quiet): Likewise.
+* mallocx.c (GC_bytes_allocd_tmp): Make the volatile variable
+STATIC.
+* pthread_support.c (GC_threads): Add explicit zero initializer
+(to make the variable definition differ from the declaration).
+
+* backgraph.c (GC_quiet): Remove the declaration (not needed
+anymore since gc_priv.h is always included).
+* checksums.c (GC_quiet): Likewise.
+* gcj_mlc.c (GC_quiet): Likewise.
+* headers.c (GC_hdr_cache_hits, GC_hdr_cache_misses): Add the
+comment.
+* include/private/gc_hdrs.h (GC_hdr_cache_hits,
+GC_hdr_cache_misses): Likewise.
+* mark.c (GC_first_nonempty): Make the volatile variable STATIC.
+* pthread_stop_world.c (GC_stop_count, GC_world_is_stopped):
+Likewise.
+* win32_threads.c (GC_please_stop, GC_max_thread_index,
+GC_mark_mutex_waitcnt): Likewise.
+
+* pthread_support.c (GC_USE_LD_WRAP): Fix a typo (swapped 'L' and
+'D') in the name.
+
+* gc_dlopen.c (GC_MUST_RESTORE_REDEFINED_DLOPEN): Define if dlopen
+redirection is turned off; turn it on later when dlopen real
+symbol is no longer needed (according to the comment and the same
+as in dyn_load.c).
+* gc_dlopen.c (WRAP_FUNC, REAL_FUNC): Rename to WRAP_DLFUNC and
+REAL_DLFUNC, respectively (to have unique names since the
+definitions may differ from that of the similar ones in
+pthread_support.c).
+* mark.c (source): Undefine the macro when no longer needed.
+* os_dep.c (handler): Rename the type to GC_fault_handler_t (to
+have the unique name across the project).
+* os_dep.c (STAT_BUF_SIZE, STAT_READ); Guard with ifndef; add the
+comment.
+* pthread_support.c (STAT_BUF_SIZE, STAT_READ): Likewise.
+* os_dep.c (sbrk): Undo sbrk() redirection (for ECOS) when no
+longer needed.
+
+* pthread_stop_world.c (pthread_sigmask): Undefine before using
+in GC_print_sig_mask() (only if DEBUG_THREADS); add the comment.
+* win32_threads.c (dlopen, _beginthread): Don't undefine (since
+neither redirected nor used here).
+* win32_threads.c (GC_Thread_Rep): Rename "table_management" to
+"tm" for short; remove "tm_" prefix.
+* win32_threads.c (in_use, next): Don't define the macros; use
+tm.in_use and tm.next fields, respectively (to ease debugging).
+* win32_threads.c (HASH): Rename to PTHREAD_MAP_HASH (to have
+unique name across the project).
+
+* include/private/gc_priv.h (I_HIDE_POINTERS): Define before gc.h
+inclusion.
+* include/private/gc_pmark.h (I_HIDE_POINTERS): Define if gc.h is
+not included yet.
+* finalize.c (I_HIDE_POINTERS): Don't define.
+* include/private/dbg_mlc.h (I_HIDE_POINTERS): Likewise.
+* misc.c (I_HIDE_POINTERS): Likewise.
+* include/private/dbg_mlc.h (HIDE_POINTER, REVEAL_POINTER,
+GC_hidden_pointer): Don't define if HIDE_POINTER is undefined.
+* include/private/gc_pmark.h: Remove the comment about gc_priv.h
+inclusion order.
+
+* dyn_load.c: Include gc_priv.h before using configuration
+information (MACOS).
+* dyn_load.c (GC_must_restore_redefined_dlopen): Rename to
+GC_MUST_RESTORE_REDEFINED_DLOPEN.
+
+* backgraph.c (SET_OH_BG_PTR): Place outermost parenthesis
+properly.
+* darwin_stop_world.c: Replace "if DEBUG_THREADS" with
+"ifdef DEBUG_THREADS".
+* pthread_stop_world.c: Likewise.
+* pthread_support.c: Likewise.
+* include/gc_inline.h: Guard with GC_INLINE_H.
+
+* alloc.c (GC_copyright): Define as const.
+* alloc.c (GC_collect_at_heapsize): Replace "static" with "STATIC"
+(since the name starts with "GC_" prefix).
+* dbg_mlc.c (GC_describe_type_fns): Likewise.
+* dyn_load.c (GC_FirstDLOpenedLinkMap,
+GC_register_dynlib_callback, GC_dyld_sections,
+GC_dyld_name_for_hdr, GC_dyld_image_add, GC_dyld_image_remove):
+Likewise.
+* malloc.c (GC_libpthread_start, GC_libpthread_end,
+GC_libld_start, GC_libld_end): Likewise.
+* mark_rts.c (GC_remove_root_at_pos, GC_rebuild_root_index):
+Likewise.
+* os_dep.c (GC_gww_read_dirty, GC_gww_page_was_dirty,
+GC_gww_page_was_ever_dirty, GC_mprotect_thread_notify,
+GC_mprotect_thread_reply, GC_mprotect_thread, GC_darwin_sigbus,
+GC_forward_exception): Likewise.
+* pthread_support.c (GC_syms_initialized): Likewise.
+* typd_mlc.c (GC_push_typed_structures_proc): Likewise.
+* win32_threads.c (GC_win32_dll_threads,
+GC_register_my_thread_inner, GC_lookup_pthread, GC_get_stack_min,
+GC_waitForSingleObjectInfinite): Likewise.
+* darwin_stop_world.c (GC_use_mach_handler_thread,
+GC_use_mach_handler_thread, GC_mach_threads_count): Replace
+"static" with "STATIC" and add zero initializer.
+* os_dep.c (GC_task_self, GC_ports, GC_mprotect_state,
+GC_sigbus_count): Likewise.
+* headers.c (free_hdr): Replace "static" with GC_INLINE.
+* misc.c (GC_tmp): Rename static variable to fwrite_gc_res.
+* os_dep.c (memory): Rename static variable to ecos_gc_memory.
+* os_dep.c (async_set_pht_entry_from_index): Make static (for
+MPROTECT_VDB case).
+* pthread_support.c (GC_real_pthread_create,
+GC_real_pthread_sigmask, GC_real_pthread_join,
+GC_real_pthread_detach, GC_init_real_syms): Use REAL_FUNC() macro
+for static GC_real_XXX symbols.
+* win32_threads.c (GC_may_be_in_stack): Remove "GC_" prefix.
+
+* alloc.c (GC_finish_collection): Replace getenv() with GETENV().
+* dyn_load.c (GC_init_dyld): Likewise.
+* os_dep.c (GC_print_callers): Likewise.
+* dyn_load.c (GC_dyld_name_for_hdr): Cast _dyld_get_image_name()
+result (since it's always of "struct mach_header" type).
+* dyn_load.c (GC_init_dyld): Cast GC_dyld_image_add and
+GC_dyld_image_remove (to always have the first argument of
+"struct mach_header" pointer type).
+
+* configure.ac: Add threads support for OpenBSD case (threads may
+not work correctly for it).
+
+* acinclude.m4: Rename to m4/gc_set_version.m4.
+* m4/libtool.m4: Delete the file.
+* m4/lt~obsolete.m4: Likewise.
+* m4/ltoptions.m4: Likewise.
+* m4/ltsugar.m4: Likewise.
+* m4/ltversion.m4: Likewise.
+
+* include/private/gcconfig.h: Define DebugBreak() as _exit(-1) for
+x86mingw32ce toolchain to workaround the incorrect DebugBreak()
+declaration in winbase.h (the workaround would turn into a no-op
+when DebugBreak() will be defined as a macro in the toolchain).
+
+* include/private/gcconfig.h: Recognize __i386__ if WinCE (for
+x86mingw32ce toolchain).
+* include/private/gcconfig.h (NO_GETENV): Don't define for CeGCC
+toolchain (or if already defined).
+* include/private/gcconfig.h (NO_GETENV_WIN32): New macro (always
+defined for WinCE or if NO_GETENV is defined).
+* misc.c (GC_CreateLogFile): Use NO_GETENV_WIN32 macro instead of
+NO_GETENV one.
+
+* configure.ac: Add AC_CONFIG_MACRO_DIR([m4]).
+* Makefile.am: Add "ACLOCAL_AMFLAGS = -I m4".
+* libtool.m4: Remove.
+* m4/libtool.m4: New file (generated).
+* m4/lt~obsolete.m4: Likewise.
+* m4/ltoptions.m4: Likewise.
+* m4/ltsugar.m4: Likewise.
+* m4/ltversion.m4: Likewise.
+
+* include/gc.h (GC_UNDERSCORE_STDCALL): Recognize new macro;
+prefix GC_CreateThread and GC_ExitThread with '_' if defined.
+* doc/README.macros (GC_UNDERSCORE_STDCALL): Document.
+
+* alloc.c (GC_collect_or_expand): Add "retry" argument; add the
+comments; don't use "default" stop_func on a retry if
+GC_dont_expand.
+* alloc.c (GC_allocobj): Pass "retry" argument to
+GC_collect_or_expand().
+* malloc.c (GC_alloc_large): Likewise.
+* include/private/gc_priv.h (GC_collect_or_expand): Move the
+declaration to malloc.c; add "retry" argument.
+
+* alloc.c (GC_start_call_back): Move the variable definition from
+misc.c.
+* include/private/gc_priv.h (GC_start_call_back): Remove the
+declaration.
+* alloc.c (GC_notify_full_gc): Remove unnecessary cast of 0.
+* alloc.c (GC_try_to_collect_inner): Also call stop_func at the
+beginning of the function.
+* include/gc.h (GC_try_to_collect): Refine the comment about
+stop_func.
+
+* alloc.c (GC_default_stop_func, GC_try_to_collect_general,
+GC_gcollect): Add the comment.
+* alloc.c (GC_try_to_collect_general): Move the assertion on
+stop_func != 0 to GC_try_to_collect().
+* alloc.c (GC_try_to_collect_general): If stop_func == 0 then use
+GC_default_stop_func instead (holding the lock).
+* alloc.c (GC_gcollect): Pass 0 as stop_func instead of
+GC_default_stop_func (to prevent data races).
+
+* Makefile.direct: Move "define arguments" documentation to
+doc/README.macros; add reference to doc/README.macros.
+* Makefile.dj: Change the documentation reference to
+doc/README.macros.
+* README.QUICK: Likewise.
+* configure.ac: Likewise.
+* allchblk.c: Remove unnecessary "-D" from the comment.
+* doc/README.macros: Likewise.
+* README.environment: Likewise.
+* include/gc.h: Likewise.
+* include/gc_inline.h: Likewise.
+* include/private/gcconfig.h: Likewise.
+* README.QUICK: Fix a typo.
+
+* misc.c (GC_CreateLogFile): Use FILE_ATTRIBUTE_NORMAL for
+CreateFile(); don't immediately flush every write if very verbose.
+
+* doc/README.win32: Replace ".exe.log" to ".gc.log".
+* doc/README.win64: Likewise.
+* doc/README.win64: Fix a typo.
+* misc.c (GC_CreateLogFile): Strip executable file extension for
+the log file; use ".gc.log" extension (instead of ".log").
+
+* include/gc_config_macros.h: Avoid the redefinition of
+GC_xxx_THREADS macros.
+
+* alloc.c (GC_try_to_collect_general): Change the type of "result"
+local variable to GC_bool.
+
+* include/gc_config_macros.h: Use old behavior for FreeBSD and
+NetBSD platform detection code (check that other GC_xxx_THREADS
+are undefined); add FIXME.
+
+* include/gc_config_macros.h: Rearrange the platform detection
+code (GC_WIN32_PTHREADS implies GC_WIN32_THREADS; define
+GC_THREADS first if GC_XXX_THREADS already set; define proper
+GC_XXX_THREADS if GC_THREADS; define GC_PTHREADS in a single
+place; define _REENTRANT if posix threads except for Win32).
+
+* alloc.c (GC_try_to_collect_general): New function (move the code
+from GC_try_to_collect, pass force_unmap argument).
+* alloc.c (GC_try_to_collect, GC_gcollect): Call
+GC_try_to_collect_general().
+* alloc.c (GC_gcollect_and_unmap): New public function.
+* include/gc.h (GC_gcollect_and_unmap): New function declaration.
+* tests/test.c (window_proc): Call GC_gcollect_and_unmap() on
+WM_HIBERNATE event (instead of GC_set_force_unmap_on_gcollect()
+and GC_gcollect()).
+
+* include/gc.h (GC_allow_register_threads, GC_register_my_thread,
+GC_unregister_my_thread, GC_malloc_many): Refine the comment.
+* include/gc.h (GC_malloc_many, GC_NEXT): Declare unconditionally
+(that is, don't depend on GC_THREADS macro).
+* include/gc.h: Don't check for __CYGWIN32__ and __CYGWIN__ along
+with a check for GC_PTHREADS (since the former implies the
+latter).
+
+* include/gc.h (GC_SOLARIS_THREADS): Don't check for.
+* include/gc.h (GC_MIN, GC_MAX): Don't define.
+* mallocx.c (GC_malloc_many): Add comment to #endif.
+
+* configure.ac: Drop the subdir-objects Automake option, since
+it's incompatible with picking source files from libatomic_ops.
+
+* allchblk.c (GC_fail_count, GC_large_alloc_warn_interval): Add
+"extern" keyword to a global variable declaration (some compilers
+require it).
+* alloc.c (GC_bytes_found, GC_unmap_threshold,
+GC_force_unmap_on_gcollect): Likewise.
+* dyn_load.c (GC_no_win32_dlls, GC_wnt): Likewise.
+* finalize.c (GC_fail_count): Likewise.
+* include/private/gc_hdrs.h (GC_hdr_cache_hits,
+GC_hdr_cache_misses): Likewise.
+* mallocx.c (GC_bytes_found): Likewise.
+* mark_rts.c (GC_save_regs_ret_val, GC_world_stopped): Likewise.
+* misc.c (GC_unmap_threshold): Likewise.
+* os_dep.c (GC_unmap_threshold, GC_old_allocator): Likewise.
+* pthread_support.c (GC_markers): Likewise.
+* thread_local_alloc.c (GC_gcjobjfreelist,
+GC_gcj_malloc_initialized, GC_gcj_kind): Likewise.
+* win32_threads.c (GC_fault_handler_lock, GC_write_cs,
+GC_dont_query_stack_min, GC_markers, GC_wnt): Likewise.
+
+* tests/huge_test.c: Define GC_IGNORE_WARN (if not defined) to
+suppress misleading GC "Out of Memory!" warning printed on every
+GC_MALLOC(LONG_MAX) call.
+* tests/huge_test.c: Include "gc.h" instead of <gc.h>.
+* tests/huge_test.c (main): Replace K&R-style function definition
+with the ANSI C one.
+
+* dyn_load.c (GC_register_dynamic_libraries): Always use
+lpMaximumApplicationAddress value for WinCE (even for old
+versions).
+* os_dep.c (VER_PLATFORM_WIN32_CE): Define if not in winbase.h.
+* os_dep.c (GC_dont_query_stack_min): New global variable (only if
+WinCE and THREADS).
+* os_dep.c (GC_setpagesize): Adjust lpMaximumApplicationAddress
+for WinCE (prior to version 6) if not _WIN32_WCE_EMULATION; set
+GC_dont_query_stack_min for older WinCE (prior to version 5).
+* win32_threads.c (GC_dont_query_stack_min): Declare.
+* win32_threads.c (GC_get_stack_min): Rename the macro to
+GC_wince_evaluate_stack_min for WinCE; update the comment.
+* win32_threads.c (GC_push_stack_for, GC_get_next_stack): Use
+GC_wince_evaluate_stack_min() instead of GC_get_stack_min() for
+WinCE and don't update thread's last_stack_min value (only if
+GC_dont_query_stack_min).
+* win32_threads.c (GC_push_stack_for): Skip assertion for WinCE if
+GC_dont_query_stack_min (since the evaluated stack_min value may
+be incorrect if the stack is bigger than 64 KiB).
+
+* gc_dlopen.c (GC_dlopen): Add function redirector (only if
+GC_USE_LD_WRAP).
+* include/gc.h: Include "gc_pthread_redirects.h" even if
+GC_USE_LD_WRAP or GC_NO_THREAD_REDIRECTS.
+* include/gc_pthread_redirects.h (GC_PTHREAD_REDIRECTS_H): Don't
+define and check for (since included only from gc.h).
+* include/gc_pthread_redirects.h: Declare "GC_" symbols even if
+GC_USE_LD_WRAP or GC_NO_THREAD_REDIRECTS.
+* include/gc_pthread_redirects.h: Include signal.h only to get
+sigset_t definition.
+
+* Makefile.direct: Document GC_REGISTER_MEM_PRIVATE.
+* mark_rts.c (GC_is_tmp_root): Define also for WinCE unless
+NO_DEBUGGING (that is, replace _WIN32_WCE_EMULATION with MSWINCE).
+* os_dep.c (GC_sysinfo): Remove explicit global variable
+initialization to "{0}" (revert back the previous change) since it
+might produce a warning.
+
+* allchblk.c (GC_large_alloc_warn_interval): Move declaration from
+gc_priv.h.
+* allchblk.c (GC_large_alloc_warn_suppressed): Move definition
+from misc.c; define as STATIC.
+* include/private/gc_priv.h (GC_large_alloc_warn_interval,
+GC_large_alloc_warn_suppressed): Remove declaration.
+* alloc.c (GC_bytes_found): Add "defined in" comment.
+* mallocx.c (GC_bytes_found): Likewise.
+* misc.c (GC_unmap_threshold): Likewise.
+* os_dep.c (GC_old_allocator): Likewise.
+* pthread_support.c (GC_markers): Likewise.
+* thread_local_alloc.c (GC_gcjobjfreelist,
+GC_gcj_malloc_initialized, GC_gcj_kind): Likewise.
+* win32_threads.c (GC_markers): Likewise.
+* alloc.c (GC_start_time): Explicitly initialize to 0 or NULL (to
+be distinctive from a variable declaration).
+* backgraph.c (GC_max_height, GC_deepest_obj): Likewise.
+* blacklst.c (GC_old_normal_bl, GC_incomplete_normal_bl,
+GC_old_stack_bl, GC_incomplete_stack_bl): Likewise.
+* checksums.c (GC_faulted, GC_n_dirty_errors,
+GC_n_faulted_dirty_errors, GC_n_changed_errors, GC_n_clean,
+GC_n_dirty, GC_bytes_in_used_blocks): Likewise.
+* dbg_mlc.c (GC_smashed): Likewise.
+* finalize.c (GC_old_dl_entries): Likewise.
+* gcj_mlc.c (GC_gcj_kind, GC_gcj_debug_kind, GC_gcjobjfreelist,
+GC_gcjdebugobjfreelist): Likewise.
+* mach_dep.c (GC_save_regs_ret_val): Likewise.
+* mark.c (GC_n_rescuing_pages, GC_mark_stack, GC_mark_stack_limit,
+GC_mark_stack_top): Likewise.
+* misc.c (GC_min_sp, GC_high_water, GC_bytes_allocd_at_reset):
+Likewise.
+* os_dep.c (GC_data_start, GC_page_size, GC_sysinfo,
+GC_old_segv_handler, GC_old_bus_handler,
+GC_old_bus_handler_used_si, GC_old_segv_handler_used_si,
+GC_proc_buf, GC_proc_fd, GC_vd_base): Likewise.
+* pthread_stop_world.c (GC_stop_count, GC_stopping_pid): Likewise.
+* reclaim.c (GC_leaked): Likewise.
+* typd_mlc.c (GC_explicit_kind, GC_array_kind, GC_ext_descriptors,
+GC_typed_mark_proc_index, GC_array_mark_proc_index,
+GC_eobjfreelist, GC_arobjfreelist): Likewise.
+* win32_threads.c (GC_pthread_map_cache, GC_marker_cv,
+GC_marker_Id): Likewise.
+* dbg_mlc.c (GC_smashed, GC_n_smashed): Define as STATIC.
+* gcj_mlc.c (GC_gcjdebugobjfreelist): Likewise.
+* os_dep.c (GC_vd_base): Likewise.
+* pthread_support.c (GC_mark_threads): Likewise.
+* reclaim.c (GC_leaked): Likewise.
+* typd_mlc.c (GC_bm_table): Likewise.
+* mark_rts.c (GC_save_regs_ret_val): Change declaration type to
+that of definition; add "defined in" comment.
+* mark_rts.c (GC_push_current_stack): Remove unnecessary cast for
+GC_save_regs_ret_val.
+* misc.c (GC_check_heap, GC_print_all_smashed,
+GC_start_call_back): Remove unnecessary cast (of 0).
+* misc.c (GC_LARGE_ALLOC_WARN_INTERVAL): New tuning macro.
+* misc.c (GC_large_alloc_warn_interval): Initialize to
+GC_LARGE_ALLOC_WARN_INTERVAL value.
+* misc.c (GC_tmp): Change to "static".
+* os_dep.c (GC_mprotect_state): Define as static.
+* pthread_support.c (dummy_thread_local): Prefix with "GC_".
+* win32_threads.c (WinMain): Remove FIXME for WinCE.
+
+* os_dep.c (PROTECT, UNPROTECT): Use distinct ABORT messages.
+
+* configure.ac: Rewrite the tests for external or internal
+libatomic_ops.
+* configure.ac: In particular, drop the symbolic links. Add option
+--with-libatomic-ops for forced selection.
+* Makefile.am: Adjust the path of source files from libatomic_ops
+to not use the links.
+* Makefile.am (libgc_la_LIBADD): Add $(ATOMIC_OPS_LIBS). This will
+be empty if we use the bundled AO sources.
+
+* Makefile.am: Strip version suffix for libatomic_ops directory.
+* build_atomic_ops.sh: Likewise.
+* build_atomic_ops.sh.cygwin: Likewise.
+* configure_atomic_ops.sh: Likewise.
+* Makefile.direct: Remove AO_VERSION definition; strip version
+suffix for libatomic_ops directory.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* gc.mak: Likewise.
+
+* libatomic_ops: Rename from "libatomic_ops-1.2".
+
+* alloc.c (GC_version): Add "const" keyword.
+* alloc.c (GC_get_version): New public function.
+* include/gc.h (GC_get_version): New function declaration; update
+the comment for the GC version.
+
+* include/private/gc_locks.h (GC_allocate_ml, GC_lock_holder,
+GC_collecting, GC_mark_lock_holder, GC_need_to_lock): Use "extern"
+(for the global variable declaration) again.
+* include/private/gc_pmark.h (GC_n_mark_procs, GC_mark_stack_size,
+GC_mark_stack_limit, GC_mark_stack_top, GC_mark_stack,
+GC_mark_stack_too_small, GC_mark_state): Likewise.
+* include/private/gcconfig.h (GC_register_stackbottom): Likewise.
+* include/private/pthread_support.h (GC_threads,
+GC_thr_initialized, GC_in_thread_creation): Likewise.
+* include/private/gc_priv.h: Likewise.
+
+* real_malloc.c: Include private/config.h if HAVE_CONFIG_H.
+
+* allchblk.c (GC_hblkfreelist): Define as STATIC.
+* blacklst.c (GC_total_stack_black_listed): Likewise.
+* include/private/gc_priv.h (GC_hblkfreelist, GC_stopped_mark,
+GC_total_stack_black_listed, GC_push_stubborn_structures): Remove
+declaration.
+* mark_rts.c (GC_stopped_mark): Add declaration (only if
+THREAD_LOCAL_ALLOC).
+* allchblk.c (GC_fail_count): Move the declaration out of
+GC_allochblk_nth(); remove "extern".
+* alloc.c (IF_THREADS): Remove unused macro.
+* alloc.c (GC_world_stopped): Define only if THREAD_LOCAL_ALLOC.
+* alloc.c (GC_stopped_mark): Set GC_world_stopped value only if
+THREAD_LOCAL_ALLOC.
+* alloc.c (GC_bytes_found, GC_collection_in_progress,
+GC_check_tls, GC_unmap_threshold, GC_force_unmap_on_gcollect):
+Remove K&R-style "extern" for the declaration.
+* dbg_mlc.c (GC_free_inner): Likewise.
+* dyn_load.c (GC_repeat_read, GC_roots_present, GC_is_heap_base,
+GC_get_next_stack, GC_no_win32_dlls, GC_wnt): Likewise.
+* finalize.c (GC_fail_count): Likewise.
+* include/private/gc_hdrs.h (GC_hdr_cache_hits,
+GC_hdr_cache_misses): Likewise.
+* include/private/gc_locks.h (GC_allocate_ml, GC_lock_holder,
+GC_lock, GC_collecting, GC_mark_lock_holder, GC_need_to_lock):
+Likewise.
+* include/private/gc_pmark.h (GC_mark_procs, GC_n_mark_procs,
+GC_mark_stack_size, GC_mark_stack_limit, GC_mark_stack_top,
+GC_mark_stack, GC_mark_stack_too_small, GC_mark_state): Likewise.
+* include/private/gc_priv.h (GC_current_warn_proc, GC_obj_kinds,
+GC_n_kinds, GC_fo_entries, GC_n_heap_sects, GC_n_memory,
+GC_page_size, GC_sysinfo, GC_black_list_spacing,
+GC_objects_are_marked, GC_incremental, GC_dirty_maintained,
+GC_root_size, GC_debugging_started, GC_large_alloc_warn_interval,
+GC_large_alloc_warn_suppressed, GC_blocked_sp,
+GC_activation_frame, GC_push_other_roots,
+GC_push_finalizer_structures, GC_push_thread_structures,
+GC_push_typed_structures, GC_start_call_back, GC_is_initialized,
+GC_check_heap, GC_print_all_smashed, GC_print_all_errors,
+GC_print_heap_obj, GC_have_errors, GC_print_stats,
+GC_dump_regularly, GC_backtraces, GC_print_back_height,
+GC_debug_generic_malloc_inner,
+GC_debug_generic_malloc_inner_ignore_off_page,
+GC_fl_builder_count, GC_mark_no, GC_help_marker,
+GC_setup_temporary_fault_handler, GC_reset_fault_handler): Likewise.
+* include/private/gcconfig.h (GC_SysVGetDataStart,
+GC_FreeBSDGetDataStart, GC_register_stackbottom,
+GC_MacTemporaryNewPtr, GC_amiga_get_mem): Likewise.
+* include/private/pthread_support.h (GC_threads,
+GC_thr_initialized, GC_in_thread_creation): Likewise.
+* malloc.c (GC_text_mapping): Likewise.
+* mallocx.c (GC_bytes_found): Likewise.
+* mark.c (GC_check_dirty, GC_started_thread_while_stopped): Likewise.
+* mark_rts.c (GC_save_regs_ret_val): Likewise.
+* misc.c (GC_clear_stack_inner, GC_init_parallel, GC_init_win32,
+GC_setpagesize, GC_init_linux_data_start,
+GC_set_and_save_fault_handler, GC_unmap_threshold): Likewise.
+* os_dep.c (GC_unmap_threshold, GC_push_all_stacks,
+GC_darwin_register_mach_handler_thread): Likewise.
+* pthread_support.c (GC_markers, GC_collection_in_progress):
+Likewise.
+* tests/test.c (GC_amiga_free_all_mem): Likewise.
+* thread_local_alloc.c (GC_gcjobjfreelist,
+GC_gcj_malloc_initialized, GC_gcj_kind): Likewise.
+* win32_threads.c (GC_write_fault_handler, GC_gww_dirty_init,
+GC_fault_handler_lock, GC_write_cs, GC_markers): Likewise.
+* misc.c (GC_read, GC_register_finalizer_no_order, GC_init_dyld):
+Move the declaration out of GC_init(); remove "extern".
+* os_dep.c (GC_abort): Add the comment; add workaround to suppress
+compiler "unreachable code" warnings for ABORT callers (where
+ABORT is followed by a dummy return statement).
+* os_dep.c (GC_old_allocator): Move the declaration out of
+GC_default_push_other_roots(); remove "extern".
+* darwin_stop_world.c (GC_mprotect_stop, GC_mprotect_resume):
+Move the declaration out of GC_stop_world() and GC_start_world()
+(only if MPROTECT_VDB); remove "extern".
+
+* win32_threads.c (GC_get_stack_min, GC_push_stack_for,
+GC_get_next_stack): Recognize _WIN32_WCE_EMULATION macro (used for
+WinCE emulation and for custom WinCE 6 devices); add the comment.
+* win32_threads.c (GC_get_stack_min): Cast pointer to word instead
+of DWORD.
+* win32_threads.c (GC_get_next_stack): Don't use and maintain the
+latest known stack_min value for WinCE (if GC_get_stack_min is
+defined as a macro); update the comments.
+* win32_threads.c (GC_wnt): Don't declare for WinCE.
+
+* Makefile.direct: Document EMPTY_GETENV_RESULTS.
+* gcj_mlc.c (GC_clear_stack): Remove declaration.
+* malloc.c (GC_clear_stack): Likewise.
+* mallocx.c (GC_clear_stack): Likewise.
+* typd_mlc.c (GC_clear_stack): Likewise.
+* gcj_mlc.c (GENERAL_MALLOC, GENERAL_MALLOC_IOP): Rename to
+GENERAL_MALLOC_INNER and GENERAL_MALLOC_INNER_IOP, respectively;
+remove "lb" unnecessary cast to word.
+* include/private/gc_priv.h (GC_clear_stack): Add declaration.
+* include/private/gc_priv.h (GENERAL_MALLOC, GENERAL_MALLOC_IOP):
+Move common declaration from typd_mlc.c and malloc.c; remove
+unnecessary result and "lb" parameter casts.
+* include/private/thread_local_alloc.h: Guard against duplicate
+header file inclusion.
+* os_dep.c (USE_MUNMAP): Replace "-->" with an error directive for
+the case when USE_MMAP is not defined.
+* pthread_support.c (GC_is_thread_tsd_valid): New internal
+function (only if GC_ASSERTIONS and THREAD_LOCAL_ALLOC); move the
+code from thread-local GC_malloc(); add FIXME for the condition.
+* win32_threads.c (GC_is_thread_tsd_valid): Likewise.
+* thread_local_alloc.c (GC_gcjobjfreelist): Change the type (to
+match that of its definition).
+* thread_local_alloc.c (GC_destroy_thread_local): Add a cast for
+GC_gcjobjfreelist.
+* thread_local_alloc.c (GC_lookup_thread, GC_lookup_thread_inner):
+Remove unused declaration; don't include pthread.h.
+* thread_local_alloc.c (GC_is_thread_tsd_valid): New declaration
+(only if GC_ASSERTIONS).
+* thread_local_alloc.c (GC_malloc): Use GC_is_thread_tsd_valid()
+instead of GC_lookup_thread().
+* win32_threads.c (GC_lookup_thread_inner): Define as STATIC.
+* win32_threads.c (UNPROTECT): Rename to UNPROTECT_THREAD (to have
+id different from that in os_dep.c).
+
+* allchblk.c (GC_enough_large_bytes_left): Replace "inline static"
+with GC_INLINE.
+* include/private/gc_priv.h (fixed_getenv): Likewise.
+* alloc.c (GC_max, GC_min): Replace "static INLINE" with
+GC_INLINE.
+* mark_rts.c (rt_hash): Likewise.
+* win32_threads.c (GC_get_max_thread_index): Likewise.
+* include/private/gc_priv.h (INLINE): Prefix with "GC_"; include
+"static"; define for Sun CC; define for VC++ (and other
+compilers).
+* pthread_support.c: Don't define __inline__ for non-GNU compilers
+(not needed anymore).
+
+* NT_THREADS_MAKEFILE: Remove file (since it duplicates gc.mak).
+* Makefile.in: Remove reference to NT_THREADS_MAKEFILE.
+* Makefile.am: Likewise.
+* Makefile.dj: Likewise.
+* Makefile.direct: Likewise.
+* doc/README.win32: Add reference to gc.mak.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+
+* Makefile.direct: Remove references to acinclude.m4, libtool.m4.
+
+* autogen.sh: Update.
+
+* Makefile.am: Don't add libtool.m4 to EXTRA_DIST.
+* acinclude.m4: Fix underquoting of GC_SET_VERSION.
+* README.QUICK: Update information for Makefile.
+* Makefile.am: Do not distribute the substituted bdw-gc.pc.
+* configure.ac: Add AM conditional analog to KEEP_BACK_PTRS.
+* tests/tests.am: Use it here to conditionally enable tracetest
+when possible.
+
+* dyn_load.c (GC_wnt): Update the comment.
+* dyn_load.c (GC_register_dynamic_libraries): Add the comment for
+_WIN32_WCE_EMULATION; recognize GC_REGISTER_MEM_PRIVATE (new
+macro); call GC_is_heap_base() only if check for Type succeeded.
+
+* mark_rts.c (GC_is_tmp_root): Don't define unless NO_DEBUGGING;
+update the comment.
+* include/private/gc_priv.h (GC_is_tmp_root): Remove declaration.
+
+* include/private/gcconfig.h (CANCEL_SAFE, IF_CANCEL): new macros.
+* include/private/gc_priv.h (DISABLE_CANCEL, RESTORE_CANCEL,
+ASSERT_CANCEL_DISABLED): New macros.
+* alloc.c (GC_maybe_gc): Assert cancellation disabled.
+(GC_collect_a_little_inner,GC_try_to_collect, GC_collect_or_expand):
+Disable cancellation.
+(GC_add_to_our_memory): Check for overflow.
+* misc.c (GC_cancel_disable_count): declare.
+(GC_init, GC_write): Disable cancellation.
+(GC_init): Remove redundant GC_is_initialized test.
+* os_dep.c (GC_repeat_read): Assert cancellation disabled.
+(GC_get_stack_base): Disable cancellation.
+* pthread_stop_world.c (GC_suspend_handler_inner): Disable
+cancellation.
+* pthread_support.c (GC_mark_thread): Permanently disable
+cancellation.
+(GC_wait_for_gc_completion, GC_wait_builder, GC_wait_marker):
+Assert cancellation disabled.
+(fork handling): Disable cancellation, fix comment.
+(GC_pthread_create): Disable cancellation.
+(GC_unregister_my_thread): Disable cancellation.
+* Makefile.direct: Document NO_CANCEL_SAFE.
+
+* Makefile: Remove outdated file (Makefile.direct should be used
+instead).
+
+* include/gc.h (GC_use_DllMain): Refine the comment.
+
+* configure.ac: Add documentation to AC_DEFINE for GC_THREADS and
+EMPTY_GETENV_RESULTS.
+* configure.ac: Fix a typo.
+* Makefile.am: Likewise.
+
+* checksums.c (GC_checksum, GC_update_check_page): Remove
+"register" keyword in local variable declarations (for the code
+used only for debugging or which is not time-critical).
+* dbg_mlc.c (GC_has_other_debug_info, GC_store_debug_info,
+GC_store_debug_info_inner, GC_check_annotated_obj, GC_print_obj,
+GC_print_smashed_obj, GC_debug_end_stubborn_change,
+GC_debug_invoke_finalizer): Likewise.
+* dyn_load.c (GC_register_dynamic_libraries): Likewise.
+* mallocx.c (GC_realloc): Likewise.
+* mark_rts.c (GC_print_static_roots, GC_is_static_root,
+GC_clear_roots): Likewise.
+* misc.c (GC_write): Likewise.
+* os_dep.c (GC_print_callers): Likewise.
+* dyn_load.c (GC_register_dynamic_libraries): Rename "i" local
+variable to "j" for the nested loop (just not to hide the similar
+variable in the outer one).
+* mark_rts.c (GC_print_static_roots): Output an error message
+using GC_err_printf() (instead of GC_printf()).
+
+* configure.ac: Move include flag from ${INCLUDE} ...
+* Makefile.am: ... to AM_CPPFLAGS and also add the build directory.
+* configure.ac: Call AM_CONFIG_HEADER([include/private/config.h]).
+* configure.ac: Add documentation to all AC_DEFINE either directly
+or using AH_TEMPLATE.
+
+* win32_threads.c (GC_waitForSingleObjectInfinite): New static
+function (only if GC_WINMAIN_REDIRECT).
+* win32_threads.c (WinMain): Call GC_waitForSingleObjectInfinite()
+thru GC_do_blocking() instead of calling WaitForSingleObject()
+directly.
+
+* pthread_support.c (start_mark_threads): Refine printed message.
+* win32_threads.c (GC_thr_init): Likewise.
+
+* Makefile.direct (GC_WINMAIN_REDIRECT): Add the comment for.
+* Makefile.direct (NO_GETENV): Update the comment.
+* include/gc.h (GC_WINMAIN_WINCE_LPTSTR): Remove macro.
+* include/gc.h (GC_WinMain): Remove declaration.
+* include/gc.h (WinMain): Define (as GC_WinMain) if and only if
+GC_WINMAIN_REDIRECT.
+* tests/test.c (GC_COND_INIT): Define as GC_INIT() also in case of
+WinCE target unless GC_WINMAIN_REDIRECT is defined.
+* tests/test.c (WINMAIN_LPTSTR): New macro.
+* tests/test.c (WinMain): Use WINMAIN_LPTSTR instead of LP[W]STR
+and GC_WINMAIN_WINCE_LPTSTR.
+* win32_threads.c (start_mark_threads): Add the comment for
+MARK_THREAD_STACK_SIZE.
+* win32_threads.c: Recognize new GC_WINMAIN_REDIRECT macro.
+* win32_threads.c (WINMAIN_LPTSTR, WINMAIN_THREAD_STACK_SIZE): New
+macro (only if GC_WINMAIN_REDIRECT).
+* win32_threads.c: Undefine WinMain macro if GC_WINMAIN_REDIRECT.
+* win32_threads.c (GC_WinMain): Add prototype (only if
+GC_WINMAIN_REDIRECT).
+* win32_threads.c (main_thread_args, WinMain): Rename
+GC_WINMAIN_WINCE_LPTSTR to WINMAIN_LPTSTR.
+* win32_threads.c (WinMain): Call GC_INIT() instead of GC_init();
+use WINMAIN_THREAD_STACK_SIZE.
+* win32_threads.c (WinMain): Call GC_deinit() and
+DeleteCriticalSection() only if WinCE; add FIXME.
+
+* os_dep.c (GC_get_main_stack_base): add assertion for mem_base
+value returned by GC_get_stack_base().
+
+* Makefile.direct (MUNMAP_THRESHOLD, GC_FORCE_UNMAP_ON_GCOLLECT):
+Add the comment for.
+* alloc.c (GC_unmap_threshold, GC_force_unmap_on_gcollect):
+Declare external variable (only if USE_MUNMAP).
+* alloc.c (GC_try_to_collect): Temporarily set GC_unmap_threshold
+value to 1 if GC_force_unmap_on_gcollect and restore it before
+unlocking (only if USE_MUNMAP).
+* doc/README.environment (GC_FORCE_UNMAP_ON_GCOLLECT): Add
+information for.
+* include/gc.h (GC_set_force_unmap_on_gcollect,
+GC_get_force_unmap_on_gcollect): New public function prototype.
+* include/gc.h (GC_FORCE_UNMAP_ON_GCOLLECT): New macro is
+recognized.
+* misc.c (GC_FORCE_UNMAP_ON_GCOLLECT): Likewise.
+* include/gc.h (GC_INIT_CONF_FORCE_UNMAP_ON_GCOLLECT): New
+internal macro (used by GC_INIT only).
+* misc.c (GC_force_unmap_on_gcollect): New global variable.
+* misc.c (GC_init): Recognize new "GC_FORCE_UNMAP_ON_GCOLLECT"
+environment variable (and set GC_force_unmap_on_gcollect).
+* misc.c (GC_set_force_unmap_on_gcollect,
+GC_get_force_unmap_on_gcollect): New public function.
+* tests/test.c (window_proc): Call GC_set_force_unmap_on_gcollect
+to force the mode on if WM_HIBERNATE; restore the mode after
+GC_gcollect().
+
+* Makefile.direct (LARGE_CONFIG): Update information.
+* include/gc.h (GC_stop_func): Refine the comment.
+
+* configure.ac: Use EMPTY_GETENV_RESULTS instead of NO_GETENV for
+Win32 (workaround for Wine bug).
+
+* allchblk.c (GC_freehblk): Adjust local variables indentation.
+* mallocx.c (GC_generic_malloc_many): Likewise.
+* typd_mlc.c (GC_malloc_explicitly_typed_ignore_off_page,
+GC_calloc_explicitly_typed): Likewise.
+* typd_mlc.c (GC_make_array_descriptor): Remove unnecessary
+brackets.
+
+* configure.ac: Replace GC_WIN32_THREADS with GC_THREADS.
+* configure.ac: Process enable_parallel_mark option for Cygwin and
+Win32; define THREAD_LOCAL_ALLOC for Win32.
+
+* include/private/gc_priv.h: Define AO_ASSUME_WINDOWS98 if
+PARALLEL_MARK (required for VC++ x86).
+
+* dbg_mlc.c (GC_generate_random_backtrace): Call
+GC_try_to_collect(GC_never_stop_func) instead of GC_gcollect();
+if GC is disabled then print error message and return.
+* include/gc.h (GC_try_to_collect): Refine the comment.
+* include/private/gc_priv.h (GC_never_stop_func): Fix return type;
+refine the comment.
+
+* add_gc_prefix.c: Move the file to the new "extra" directory.
+* AmigaOS.c: Likewise.
+* gcname.c: Likewise.
+* if_mach.c: Likewise.
+* if_not_there.c: Likewise.
+* MacOS.c: Likewise.
+* msvc_dbg.c: Likewise.
+* setjmp_t.c: Likewise.
+* threadlibs.c: Likewise.
+* EMX_MAKEFILE: Prepend setjmp_t.c with "extra" directory.
+* Makefile: Prepend AmigaOS.c, MacOS.c, add_gc_prefix.c, gcname.c,
+if_mach.c, if_not_there.c, msvc_dbg.c, setjmp_t.c, threadlibs.c
+with "extra" directory.
+* Makefile.am: Likewise.
+* Makefile.direct: Likewise.
+* Makefile.dj: Likewise.
+* Makefile.in: Likewise.
+* NT_MAKEFILE: Prepend msvc_dbg.obj with "extra" directory.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* NT_THREADS_MAKEFILE: Prepend msvc_dbg.c with "extra" directory.
+* gc.mak: Likewise.
+* PCR-Makefile: Prepend if_mach.c, if_not_there.c with "extra"
+directory.
+* SMakefile.amiga: Prepend AmigaOS.c, setjmp_t.c with "extra"
+directory.
+* doc/simple_example.html: Update for threadlibs.c.
+* os_dep.c: Prepend included AmigaOS.c with "extra" directory.
+
+* include/gc.h (GC_do_blocking, GC_call_with_gc_active): New
+function prototype.
+* include/private/gc_priv.h (STOP_WORLD): Replace a no-op (for the
+single-threaded case) with an assertion check for the state to be
+not a "do-blocking" one.
+* include/private/gc_priv.h (blocking_data): Move the structure
+definition from pthread_support.c; change "fn" return type to void
+pointer.
+* include/private/gc_priv.h (GC_activation_frame_s): New structure
+type.
+* include/private/gc_priv.h (GC_push_all_stack_frames): New
+function declaration (only if THREADS).
+* include/private/gc_priv.h (GC_world_stopped): Don't declare
+unless THREADS.
+* include/private/gc_priv.h (GC_blocked_sp,
+GC_activation_frame_s): New declaration (only if not THREADS).
+* include/private/gc_priv.h (GC_push_all_register_frames): New
+function declaration (only for IA-64).
+* include/private/gc_priv.h (NURSERY, GC_push_proc): Remove
+obsolete (unused) symbols.
+* include/private/gc_priv.h (GC_push_all_stack_partially_eager):
+Remove declaration (since it is static now).
+* mark_rts.c (GC_push_all_stack_partially_eager): Move from mark.c
+(for code locality) and make STATIC.
+* mark_rts.c (GC_push_all_register_frames): New function (only for
+IA-64).
+* mark_rts.c (GC_push_all_stack_frames): New function (only if
+THREADS).
+* mark_rts.c (GC_add_trace_entry): New function prototype (used by
+GC_push_all_stack_partially_eager(), only if TRACE_BUF).
+* mark_rts.c (GC_push_all_stack_part_eager_frames): New function.
+* mar_rts.c (GC_save_regs_ret_val): Move the declaration out of a
+function body (only for IA-64).
+* mark_rts.c (GC_push_current_stack): Call
+GC_push_all_stack_part_eager_frames() instead of
+GC_push_all_stack_partially_eager().
+* mark_rts.c (GC_push_current_stack): Call
+GC_push_all_register_frames() instead of GC_push_all_eager() for
+IA-64 backing store.
+* misc.c (GC_do_blocking_inner): Declare function (if THREADS
+only).
+* misc.c (GC_blocked_sp, GC_blocked_register_sp,
+GC_activation_frame): New global variables (only if not THREADS).
+* misc.c (GC_call_with_gc_active, GC_do_blocking_inner): New API
+function (only if not THREADS).
+* misc.c (GC_do_blocking): Move the function from
+pthread_support.c.
+* include/private/pthread_support.h (GC_Thread_Rep): Add
+"activation_frame" field.
+* pthread_stop_world.c (GC_push_all_stacks): Call
+GC_push_all_stack_frames() and GC_push_all_register_frames instead
+of GC_push_all_stack() and/or GC_push_all_eager(); don't check for
+STACK_GROWS_UP here.
+* pthread_support.c (GC_do_blocking_inner): Remove "static"; store
+"fn" result back to "client_data" field.
+* pthread_support.c (GC_call_with_gc_active): New API function.
+* win32_threads.c (GC_call_with_gc_active): Likewise.
+* win32_threads.c (GC_Thread_Rep): Add "thread_blocked_sp" and
+"activation_frame" fields.
+* win32_threads.c (GC_new_thread): Add assertion checking for
+thread_blocked_sp is NULL.
+* win32_threads.c (GC_do_blocking_inner): New function.
+* win32_threads.c (GC_stop_world): Don't suspend a thread if its
+thread_blocked_sp is non-NULL.
+* win32_threads.c (GC_push_stack_for): Use thread
+"activation_frame" (if non-NULL); use "thread_blocked_sp" if
+non-NULL (instead of calling GetThreadContext()); "UNPROTECT" the
+thread before modifying its last_stack_min; call
+GC_push_all_stack_frames() instead of GC_push_all_stack(); update
+the comments.
+
+* alloc.c (GC_default_stop_func): New static variable (initialized
+to GC_never_stop_func).
+* alloc.c (GC_set_stop_func, GC_get_stop_func): New function.
+* alloc.c (GC_timeout_stop_func): Define as GC_default_stop_func
+(instead of GC_never_stop_func) if SMALL_CONFIG (or NO_CLOCK),
+else call GC_default_stop_func() before getting "current_time".
+* alloc.c (GC_maybe_gc): Expand GC_gcollect_inner() macro (for
+FIXME comment).
+* alloc.c (GC_maybe_gc, GC_collect_a_little_inner): add FIXME for
+replacing GC_never_stop_func with GC_default_stop_func (if
+possible).
+* alloc.c (GC_gcollect): Use GC_default_stop_func.
+* alloc.c (GC_collect_or_expand): Use GC_default_stop_func
+(instead of GC_never_stop_func) unless it is trigged due to out of
+memory; don't increment GC_fail_count and don't output warning
+(before trying to collect again) in case the collection has been
+interrupted (by GC_default_stop_func) and the heap expansion has
+failed too.
+* include/gc.h (GC_set_stop_func, GC_get_stop_func): New function
+prototypes.
+
+* os_dep.c (GC_get_stack_base): Add FIXME; add assertion for
+GC_get_writable_length() result.
+
+* configure.ac: Don't use -lpthread -ldl for Cygwin.
+
+* NT_THREADS_MAKEFILE: Make it back equal to gc.mak.
+
+* include/private/gcconfig.h (GWW_VDB): Undefine if
+USE_GLOBAL_ALLOC (since incompatible).
+* os_dep.c (GetWriteWatch_alloc_flag): Define as 0 unless GWW_VDB
+is defined.
+* os_dep.c (GC_unmap_threshold): Declare (for use in
+GC_init_win32) if USE_MUNMAP.
+* os_dep.c (GC_init_win32): Turn off memory unmapping if
+GlobalAlloc() is used.
+* os_dep.c (GC_win32_get_mem): Define and use new
+VIRTUAL_ALLOC_PAD macro; don't waste a extra memory page unless
+MPROTECT_VDB is in use.
+
+* Makefile: Replace "version.h" with "include/gc_version.h".
+* include/gc_version.h: Likewise.
+
+* alloc.c (GC_collect_or_expand): Output heap size in WARN()
+(before returning FALSE) for convenience.
+
+* allchblk.c (GC_allochblk_nth): Use GC_PRIdPTR in WARN() format
+string.
+* pthread_support.c (start_mark_threads, GC_thr_init): Likewise.
+* win32_threads.c (GC_delete_thread): Likewise.
+* include/private/gc_priv.h (GC_PRIdPTR): New macro.
+* pthread_stop_world.c (GC_suspend_handler_inner): Remove
+unnecessary cast for WARN argument.
+* pthread_support.c (start_mark_threads): if pthread_create()
+failed then don't try to create other marker threads and (after
+printing a warning) adjust GC_markers and GC_parallel values; log
+GC_markers value (possibly adjusted) after that.
+
+* win32_threads.c (start_mark_threads): if pthread_create() is
+failed then don't try to create other marker threads and (after
+printing a warning) adjust GC_markers and GC_parallel values.
+* win32_threads.c (mark_mutex_event, builder_cv, mark_cv): Move
+the definition upper (to be visible in start_mark_threads()).
+* win32_threads.c (start_mark_threads): if CreateThread() or
+_beginthreadex() is failed then don't try to create other marker
+threads and (after printing a warning) adjust GC_markers,
+GC_parallel values, and destroy the event objects (either only
+some for the uncreated threads if DONT_USE_SIGNALANDWAIT or all if
+not a single thread is created).
+* win32_threads.c (GC_thr_init): Log GC_markers value (possibly
+adjusted) after start_mark_threads() call.
+
+* Makefile.am: Back remove "GC_" prefix for PTHREADS,
+DARWIN_THREADS, WIN32_THREADS (for configure.ac).
+
+* include/private/gc_priv.h: Change include of config.h to
+private/config.h.
+* include/private/gc_pmark.h: Likewise.
+* gc_cpp.cc: Likewise.
+* tests/test.c: Likewise.
+* tests/test_cpp.cc: Include private/config.h (if HAVE_CONFIG_H);
+undefine GC_BUILD.
+
+* finalize.c (GC_general_register_disappearing_link): Return
+GC_SUCCESS, GC_DUPLICATE, GC_NO_MEMORY (instead of 0, 1 and 2,
+respectively).
+* include/gc.h (GC_NO_MEMORY): New macro (defined as 2).
+* include/gc.h (GC_register_disappearing_link,
+GC_general_register_disappearing_link): Update the comment.
+* typd_mlc.c (GC_calloc_explicitly_typed): Use GC_NO_MEMORY macro.
+* finalize.c (GC_general_register_disappearing_link,
+GC_register_finalizer_inner): Recalculate the hash table index
+after GC_oom_fn succeeded (since the table may grow while not
+holding the lock) and check again that the entry is still not in
+the table (free the unused entry otherwise unless DBG_HDRS_ALL).
+* finalize.c (GC_register_finalizer_inner): Initialize "hhdr"
+local variable (to prevent a compiler warning).
+* finalize.c (GC_register_finalizer_inner): Don't modify the data
+pointed by "ocd" and "ofn" in GC_register_finalizer_inner() failed
+(due to out of memory).
+
+* alloc.c (GC_set_fl_marks, GC_clear_fl_marks): Transform loop to
+suppress compiler "variable might be uninitialized" warnings.
+
+* Makefile.direct (DONT_USE_SIGNALANDWAIT): Add the comment for.
+* win32_threads.c (DONT_USE_SIGNALANDWAIT): Always define for
+WinCE.
+* win32_threads.c (THREAD_HANDLE): Cast Id (of DWORD type) to
+HANDLE thru word type (to avoid a compiler warning) for WinCE.
+* win32_threads.c (GC_marker_cv, GC_marker_Id): New static array
+(only if DONT_USE_SIGNALANDWAIT).
+* win32_threads.c (start_mark_threads): Initialize GC_marker_Id
+and GC_marker_cv for each helper thread (only if
+DONT_USE_SIGNALANDWAIT).
+* win32_threads.c (GC_mark_mutex_state): New static variable (only
+if DONT_USE_SIGNALANDWAIT).
+* win32_threads.c (GC_mark_mutex_waitcnt,
+signalObjectAndWait_func): Don't define if DONT_USE_SIGNALANDWAIT.
+* win32_threads.c (GC_acquire_mark_lock, GC_release_mark_lock):
+Use InterlockedExchange() over GC_mark_mutex_state (instead of
+AO_fetch_and_add()) if DONT_USE_SIGNALANDWAIT.
+* win32_threads.c (GC_wait_marker, GC_notify_all_marker):
+Implement wait/broadcast primitives using Win32 multiple events
+(one for each marker thread) if DONT_USE_SIGNALANDWAIT (instead of
+using Win32 SignalObjectAndWait).
+* win32_threads.c (GC_thr_init): Don't declare hK32 local
+variable, don't check for GC_wnt, and don't initialize
+signalObjectAndWait_func if DONT_USE_SIGNALANDWAIT.
+
+* alloc.c (GC_finish_collection): Call GC_print_finalization_stats
+if GC_print_stats (after getting "done_time").
+* finalize.c (GC_old_dl_entries): New static variable (only if not
+SMALL_CONFIG).
+* finalize.c (GC_finalize): Save current GC_dl_entries value (only
+if not SMALL_CONFIG).
+* finalize.c (GC_print_finalization_stats): Define if and only if
+not SMALL_CONFIG; use GC_old_dl_entries value; use GC_log_printf()
+instead of GC_printf(); use "%lu" (instead of "%u") print format
+specifier; use unsigned long type for "ready" counter (for LP64
+targets).
+* misc.c (GC_dump): No longer call GC_print_finalization_stats()
+here (since it is called from GC_finish_collection()).
+* misc.c (STACKBASE): Remove unused macro undef (for NOSYS and
+ECOS).
+
+* alloc.c (GC_expand_hp): Replace GC_init_inner() call with
+GC_init() one.
+* malloc.c (GC_alloc_large, GC_generic_malloc_inner): Likewise.
+* mallocx.c (GC_generic_malloc_many): Likewise.
+* misc.c (GC_enable_incremental): Likewise.
+* alloc.c (GC_expand_hp): Update the comment.
+* mark.c (GC_obj_kinds): Likewise.
+* win32_threads.c (GC_allow_register_threads): Likewise.
+* private/gc_priv.h (GC_init_inner): Remove function declaration.
+* misc.c (GC_init_inner): Replace with public GC_init().
+
+* gcj_mlc.c (GC_gcj_fake_mark_proc): New static function.
+* gcj_mlc.c (GC_init_gcj_malloc): If mp is 0 then supply
+GC_gcj_fake_mark_proc (aborting with the appropriate message)
+instead.
+
+* os_dep.c (GC_wince_get_mem): If VirtualAlloc() returns NULL (due
+to out of memory) then don't increment GC_n_heap_bases and don't
+call VirtualAlloc() again (with MEM_COMMIT).
+* os_dep.c (GC_remap): Abort with a more informatory message if
+VirtualAlloc() fails due to out of memory; update FIXME.
+
+* Makefile: Fix typo for msvc_dbg.c.
+* Makefile.direct: Likewise.
+* Makefile.am: Prefix PTHREADS, DARWIN_THREADS, WIN32_THREADS with
+"GC_".
+* Makefile.dj: Don't reference remove files (nursery.c,
+gc_nursery.h, gc_copy_descr.h).
+* NT_MAKEFILE: Don't define __STDC__ macro (no longer used).
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* gc.mak: Likewise.
+* NT_MAKEFILE: Remove unnecessary -DGC_BUILD (since it is always
+defined in the source files).
+* NT_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* gc.mak: Likewise.
+* NT_X64_THREADS_MAKEFILE: Fix typo for -DGC_NOT_DLL.
+* NT_STATIC_THREADS_MAKEFILE: Replace GC_WIN32_THREADS with
+GC_THREADS.
+* NT_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_THREADS_MAKEFILE: Likewise.
+* gc.mak: Likewise.
+* NT_MAKEFILE: Define _CRT_SECURE_NO_DEPRECATE to suppress the
+compiler warnings.
+* NT_STATIC_THREADS_MAKEFILE: Likewise.
+* NT_X64_STATIC_THREADS_MAKEFILE: Place -D_CRT_SECURE_NO_DEPRECATE
+before "$*.C" (and "$*.CPP").
+* NT_X64_THREADS_MAKEFILE: Likewise.
+
+* doc/README.solaris2: Replace GC_SOLARIS_THREADS with GC_THREADS.
+* doc/README.win32: Replace GC_WIN32_THREADS with GC_THREADS.
+* doc/README.win64: Add info about mingw-w64; add note for VC++
+warnings suppression.
+
+* os_dep.c (GC_forward_exception): Fix logic in several places.
+(OSX-specific)
+
+* include/private/gc_priv.h (MAX_HEAP_SECTS): Guard with ifndef.
+
+* Makefile.direct: Copy missing information for -DSHORT_DBG_HDRS
+from Makefile.
+* Makefile: Remove the information about "define arguments" (which
+is incomplete and outdated compared to that in Makefile.direct);
+add help reference to Makefile.direct.
+* Makefile.dj: Likewise.
+
+* alloc.c (world_stopped_total_time, world_stopped_total_divisor):
+Replace "STATIC" with "static" in the definition (since the
+symbols aren't prefixed with "GC_").
+* win32_threads.c (marker_sp, marker_bsp, marker_last_stack_min,
+start_mark_threads, mark_mutex, builder_cv, mark_cv,
+mark_mutex_event, signalObjectAndWait_func, main_thread_start):
+Likewise.
+* pthread_support.c (GC_wait_builder): Define as STATIC.
+* win32_threads.c (GC_wait_builder): Likewise.
+
+* misc.c (GC_get_heap_size_inner, GC_get_free_bytes_inner): New
+API function.
+* include/gc_pmark.h (GC_get_heap_size_inner,
+GC_get_free_bytes_inner): New function declaration.
+
+* include/gc.h: Recognize __CEGCC__ (as a synonym for _WIN32_WCE).
+* include/gc_config_macros.h: Likewise.
+* include/gc.h (GC_MAXIMUM_HEAP_SIZE): Recognize new macro.
+* include/gc.h (GC_INIT_CONF_MAXIMUM_HEAP_SIZE): New macro (for
+internal use).
+* include/gc_config_macros.h: Always include stddef.h if GCC.
+* include/gc_config_macros.h (GC_API): Define for CeGCC in the
+same way as for MinGW.
+* include/gc_config_macros.h (GC_API): Group the definition for
+all cases together (check for GC_DLL only once).
+* include/gc_pthread_redirects.h: Group non-Darwin code together.
+* tests/test.c: Recognize GC_PRINT_VERBOSE_STATS (only if GC_DLL).
+
+* Makefile.direct (GC_PTHREADS_PARAMARK, GC_IGNORE_GCJ_INFO,
+GC_PRINT_VERBOSE_STATS, GC_DONT_EXPAND, GC_INITIAL_HEAP_SIZE,
+GC_FREE_SPACE_DIVISOR, GC_TIME_LIMIT, GC_FULL_FREQ): Add the
+comment for.
+* misc.c (GC_init_inner): Recognize GC_PRINT_VERBOSE_STATS (new
+macro).
+* dyn_load.c (GC_wnt): Change definition to TRUE for WinCE; add
+FIXME and the comment for WinCE.
+* gcj_mlc.c (GC_init_gcj_malloc): Recognize GC_IGNORE_GCJ_INFO
+(new macro).
+* include/gc.h (GC_HAVE_BUILTIN_BACKTRACE): Don't define for VC++
+WinCE (since backtrace() is unimplemented).
+* include/private/gc_priv.h (GC_n_heap_bases): Remove declaration
+(since static).
+* os_dep.c (GC_n_heap_bases): Define as STATIC; move the
+definition to be above GC_is_heap_base().
+* include/private/gcconfig.h: Don't define NOSYS for WinCE on ARM
+(both for MinGW and CeGCC toolchains).
+* include/private/gcconfig.h: Recognize __CEGCC__ and
+__MINGW32CE__ (as synonyms for __WIN32_WCE).
+* include/private/gcconfig.h: If SH4 then don't set config
+parameters for SH.
+* include/private/thread_local_alloc.h (GC_key_create): Don't
+abort on failures, just return -1 in these cases (this also
+prevents compilation error for targets where ABORT is defined
+indirectly as an inline assembler sequence).
+* mark.c (WRAP_MARK_SOME): Also define for WinCE; add FIXME for
+the GCC-based cross-compiler.
+* mark.c (ext_ex_regn, mark_ex_handler): Don't define unless
+WRAP_MARK_SOME is defined; define also for WinCE case; don't
+check for _WIN64 (since WRAP_MARK_SOME is undefined for it).
+* mark.c (GC_mark_some): Use __try/__except also for WinCE; update
+the comment.
+* misc.c: Include signal.h after gc_pmark.h included; check for
+MSWINCE instead of _WIN32_WCE.
+* misc.c (GC_init_inner): Remove duplicate GC_setpagesize() call.
+* misc.c: Don't include <crtdbg.h> for WinCE targets.
+* misc.c (GC_write): Define _MAX_PATH if undefined (workaround for
+CeGCC toolchain).
+* misc.c (GC_write): Use OutputDebugStringW() instead of
+_CrtDbgReport() for WinCE targets.
+* os_dep.c (GC_least_described_address): Define as STATIC.
+* os_dep.c (GC_register_data_segments): Fix code indentation.
+* os_dep.c (GC_wince_get_mem): Initialize "result" local variable
+(to prevent a compiler warning).
+* os_dep.c (GC_dirty_init): Add comment for WinCE target.
+* tests/test.c: Don't include winbase.h directly if GCC for WinCE,
+include assert.h instead.
+* tests/test.c (tiny_reverse_test): Define and use
+TINY_REVERSE_UPPER_VALUE macro (4 if VERY_SMALL_CONFIG else 10);
+useful for WinCE.
+* win32_threads.c (GC_Thread_Rep): Don't declare "handle" field
+for WinCE (since thread Id is used as a "real" thread handle).
+* win32_threads.c (THREAD_HANDLE): New macro.
+* win32_threads.c (GC_register_my_thread_inner): Don't recognize
+DONT_IMPORT_GETCURTHREAD anymore; don't record thread handle on
+WinCE.
+* Makefile.direct (DONT_IMPORT_GETCURTHREAD): Remove comment for.
+* win32_threads.c (UNPROTECT, GC_fault_handler_lock): Don't check
+for MSWINCE.
+* win32_threads.c (GC_delete_gc_thread, GC_delete_thread): Don't
+close thread handle on WinCE (since it's a thread Id).
+* win32_threads.c (GC_suspend): Don't check for MSWINCE in the
+MPROTECT-related code (for the case if MPROTECT_VDB would be
+implemented for WinCE).
+* win32_threads.c (GC_suspend, GC_start_world, GC_push_stack_for):
+Use THREAD_HANDLE(t) to obtain thread handle.
+* win32_threads.c (GC_PTHREADS_PARAMARK): New macro recognized;
+implicitly define GC_PTHREADS_PARAMARK if GC_PTHREADS; include
+pthread.h; define NUMERIC_THREAD_ID(id) if undefined yet; replace
+GC_PTHREADS with GC_PTHREADS_PARAMARK where appropriate (for the
+parallel mark support).
+* win32_threads.c (start_mark_threads): Use int type for "i" local
+variable (instead of "unsigned") to prevent a compiler warning.
+* win32_threads.c (start_mark_threads): Don't check CreateThread()
+result for -1; call CloseHandle() for the handle created by
+CreateThread() (on WinCE); don't use errno (since errno.h is
+missing on some targets like WinCE) when printing warning on a
+marker thread creation failure.
+* win32_threads.c (signalObjectAndWait_func): Define for WinCE.
+* win32_threads.c (GC_wait_marker): Remove unnecessary assertion
+for non-zero signalObjectAndWait_func (to make the code compilable
+for WinCE).
+* win32_threads.c (GC_thr_init): Allow PARALLEL_MARK for WinCE;
+use GC_sysinfo to get processors count if WinCE; don't check for
+SignalObjectAndWait() if WinCE; replace GC_PTHREADS with
+GC_PTHREADS_PARAMARK.
+* win32_threads.c (GC_thr_init): Recognize GC_MIN_MARKERS new
+macro (useful for testing parallel marking on WinCE).
+* win32_threads.c (GC_win32_start, main_thread_start): Define as
+STATIC.
+* win32_threads.c: Don't define main_thread_args,
+main_thread_start(), WinMain() for WinCE if GC_DLL.
+* win32_threads.c (WINCE_MAIN_STACK_SIZE): Remove useless macro
+(since the stack size parameter is ignored on WinCE).
+* win32_threads.c (main_thread_start): Remove forward declaration;
+place its definition before WinMain() one.
+* win32_threads.c (WinMain): Abort if GC_CreateThread() or
+WaitForSingleObject() failed (for the main thread).
+
+* allchblk.c (MUNMAP_THRESHOLD): Move macro definition out of
+a function.
+* allchblk.c (GC_unmap_threshold): New global variable definition
+(initialized to MUNMAP_THRESHOLD).
+* allchblk.c (GC_unmap_old): Use GC_unmap_threshold instead of
+MUNMAP_THRESHOLD; skip unmapping if GC_unmap_threshold is 0.
+* doc/README.environment (GC_UNMAP_THRESHOLD): Add information.
+* misc.c (GC_unmap_threshold): New variable declaration.
+* misc.c (GC_init_inner): Recognize "GC_UNMAP_THRESHOLD"
+environment variable to set GC_unmap_threshold value (only if
+USE_MUNMAP).
+
+* dbg_mlc.c (OFN_UNSET): New macro (to detect
+GC_register_finalizer() failures).
+* dbg_mlc.c (store_old): Add a check for register_finalizer()
+failure caused by an out-of-memory event (leave *ofn and *ocd
+unmodified in that case).
+* dbg_mlc.c (GC_debug_register_finalizer,
+GC_debug_register_finalizer_no_order,
+GC_debug_register_finalizer_unreachable,
+GC_debug_register_finalizer_ignore_self): Initialize my_old_fn
+to OFN_UNSET; clear *ocd and *ofn for non-heap objects (the same
+as in GC_register_finalizer_inner()).
+
+* Makefile.direct (GC_DLL): Add the comment for.
+* doc/README.macros: Fix a typo.
+* doc/README.macros (_DLL, GC_DLL, GC_NOT_DLL): Update info.
+* doc/README.macros (__STDC__): Remove info.
+* dbg_mlc.c (GC_get_back_ptr_info, GC_generate_random_heap_address,
+GC_generate_random_valid_address, GC_print_backtrace,
+GC_generate_random_backtrace, GC_register_describe_type_fn): Add
+GC_API and GC_CALL to function definition.
+* malloc.c (GC_generic_malloc): Likewise.
+* mallocx.c (GC_incr_bytes_allocd, GC_incr_bytes_freed): Likewise.
+* mark.c (GC_mark_and_push): Likewise.
+* misc.c (GC_new_free_list_inner, GC_new_free_list,
+GC_new_kind_inner, GC_new_kind, GC_new_proc_inner, GC_new_proc):
+Likewise.
+* include/gc_backptr.h (GC_get_back_ptr_info,
+GC_generate_random_heap_address, GC_generate_random_valid_address,
+GC_generate_random_backtrace, GC_print_backtrace): Add GC_API and
+GC_CALL to function prototype.
+* include/gc_mark.h (GC_mark_and_push, GC_new_free_list,
+GC_new_free_list_inner, GC_new_kind, GC_new_kind_inner,
+GC_new_proc, GC_new_proc_inner, GC_generic_malloc,
+GC_register_describe_type_fn): Likewise.
+* include/new_gc_alloc.h (GC_incr_bytes_allocd, GC_incr_mem_freed,
+GC_generic_malloc_words_small): Likewise.
+* gc_cpp.cc: Include "config.h" (if HAVE_CONFIG_H defined).
+* include/private/gc_pmark.h: Likewise.
+* include/private/gc_priv.h: Likewise.
+* tests/test.c: Likewise.
+* gc_cpp.cc: Define GC_BUILD.
+* include/private/gc_pmark.h: Likewise.
+* include/private/gc_priv.h: Likewise.
+* gc_dlopen.c (WRAP_FUNC, REAL_FUNC): New macro.
+* gc_dlopen.c (dlopen): Add GC_API to the wrapper function
+definition.
+* pthread_support.c (GC_pthread_create, GC_pthread_sigmask,
+GC_pthread_join, GC_pthread_detach, pthread_sigmask, pthread_join,
+pthread_detach, pthread_create): Likewise.
+* win32_threads.c (GC_pthread_join, GC_pthread_create,
+GC_pthread_sigmask, GC_pthread_detach): Likewise.
+* gc_dlopen.c (dlopen): Use WRAP_FUNC and REAL_FUNC macros.
+* include/gc_backptr.h: Include "gc.h".
+* include/gc_backptr.h: Use extern "C" for the exported functions.
+* include/gc_mark.h: Likewise.
+* include/gc_config_macros.h (GC_THREADS): Define the macro if any
+GC_XXX_THREADS is defined.
+* include/gc_config_macros.h (_PTHREADS, _POSIX4A_DRAFT10_SOURCE):
+Move the definitions below the place where GC_NETBSD_THREADS and
+GC_DGUX386_THREADS are defined.
+* include/gc_config_macros.h (GC_DLL): Don't define (even if _DLL
+is defined) for GCC.
+* include/gc_config_macros.h (GC_API): Define for Cygwin (in the
+same way as for VC++); define for GCC v4+ (other than already
+recognized MinGW/Cygwin) as a "default" visibility attribute if
+GC_DLL is defined.
+* include/gc_config_macros.h (GC_ATTR_MALLOC, GC_ATTR_ALLOC_SIZE):
+New macro.
+* include/gc.h (GC_malloc, GC_malloc_atomic, GC_strdup,
+GC_malloc_uncollectable, GC_malloc_stubborn, GC_memalign,
+GC_malloc_atomic_uncollectable, GC_malloc_ignore_off_page,
+GC_malloc_atomic_ignore_off_page, GC_debug_malloc,
+GC_debug_malloc_atomic, GC_debug_strdup,
+GC_debug_malloc_uncollectable, GC_debug_malloc_stubborn,
+GC_debug_malloc_ignore_off_page,
+GC_debug_malloc_atomic_ignore_off_page,
+GC_debug_malloc_replacement): Add GC_ATTR_MALLOC attribute.
+* include/gc_gcj.h (GC_gcj_malloc, GC_debug_gcj_malloc,
+GC_gcj_malloc_ignore_off_page): Likewise.
+* include/gc.h (GC_malloc, GC_malloc_atomic,
+GC_malloc_uncollectable, GC_malloc_stubborn,
+GC_malloc_atomic_uncollectable, GC_malloc_ignore_off_page,
+GC_malloc_atomic_ignore_off_page, GC_debug_malloc,
+GC_debug_malloc_atomic, GC_debug_malloc_uncollectable,
+GC_debug_malloc_stubborn, GC_debug_malloc_ignore_off_page,
+GC_debug_malloc_atomic_ignore_off_page,
+GC_debug_malloc_replacement: Add GC_ATTR_ALLOC_SIZE attribute
+(for the first argument).
+* include/gc_gcj.h (GC_gcj_malloc, GC_debug_gcj_malloc,
+GC_gcj_malloc_ignore_off_page): Likewise.
+* include/gc.h (GC_memalign, GC_realloc, GC_debug_realloc,
+GC_debug_realloc_replacement): Add GC_ATTR_ALLOC_SIZE attribute
+(for the second argument).
+* include/gc.h (GC_malloc, GC_malloc_atomic, GC_strdup,
+GC_malloc_uncollectable, GC_malloc_stubborn, GC_memalign,
+GC_malloc_atomic_uncollectable, GC_free, GC_base, GC_size,
+GC_realloc, GC_expand_hp, GC_set_max_heap_size,
+GC_exclude_static_roots, GC_add_roots, GC_remove_roots,
+GC_register_displacement, GC_debug_register_displacement,
+GC_try_to_collect, GC_malloc_ignore_off_page,
+GC_malloc_atomic_ignore_off_page, GC_debug_malloc,
+GC_debug_malloc_atomic, GC_debug_strdup,
+GC_debug_malloc_uncollectable, GC_debug_malloc_stubborn,
+GC_debug_malloc_ignore_off_page,
+GC_debug_malloc_atomic_ignore_off_page, GC_debug_free,
+GC_debug_realloc, GC_debug_malloc_replacement,
+GC_debug_realloc_replacement, GC_finalization_proc,
+GC_register_finalizer, GC_debug_register_finalizer,
+GC_register_finalizer_ignore_self,
+GC_debug_register_finalizer_ignore_self,
+GC_register_finalizer_no_order,
+GC_debug_register_finalizer_no_order,
+GC_register_finalizer_unreachable,
+GC_debug_register_finalizer_unreachable,
+GC_register_disappearing_link,
+GC_general_register_disappearing_link,
+GC_unregister_disappearing_link, GC_noop1, GC_warn_proc,
+GC_set_warn_proc, GC_ignore_warn_proc, GC_fn_type,
+GC_call_with_alloc_lock, GC_stack_base_func,
+GC_call_with_stack_base, GC_same_obj, GC_pre_incr, GC_post_incr,
+GC_is_visible, GC_is_valid_displacement, GC_same_obj_print_proc,
+GC_is_valid_displacement_print_proc, GC_is_visible_print_proc,
+GC_malloc_many, GC_CreateThread, GC_beginthreadex,
+GC_endthreadex): Comment out (or remove if single and meaningless)
+function argument names (to avoid identifiers out of the name
+space).
+* include/gc_gcj.h (GC_init_gcj_malloc, GC_gcj_malloc,
+GC_debug_gcj_malloc, GC_gcj_malloc_ignore_off_page): Likewise.
+* include/gc.h (GC_try_to_collect): Update the comment.
+* include/gc.h (GC_size, GC_register_my_thread): Add const
+qualifier for the argument referent.
+* misc.c (GC_size): Likewise.
+* pthread_support.c (GC_register_my_thread_inner,
+GC_register_my_thread): Likewise.
+* win32_threads.c (GC_register_my_thread_inner,
+GC_register_my_thread): Likewise.
+* include/gc.h (GC_INIT_CONF_ROOTS): New macro for internal use
+(define instead of GC_INIT() for Cygwin and AIX).
+* include/gc.h (GC_DONT_EXPAND, GC_MAX_RETRIES,
+GC_FREE_SPACE_DIVISOR, GC_FULL_FREQ, GC_TIME_LIMIT, GC_IGNORE_WARN,
+GC_INITIAL_HEAP_SIZE): Recognize new macro.
+* include/gc.h (GC_INIT_CONF_DONT_EXPAND, GC_INIT_CONF_MAX_RETRIES,
+GC_INIT_CONF_FREE_SPACE_DIVISOR, GC_INIT_CONF_FULL_FREQ,
+GC_INIT_CONF_TIME_LIMIT, GC_INIT_CONF_IGNORE_WARN,
+GC_INIT_CONF_INITIAL_HEAP_SIZE): New macro for internal use.
+* include/gc.h (GC_INIT): Use GC_INIT_CONF_XXX macros.
+* include/gc_mark.h: Prefix GC_H with '_'.
+* include/gc_mark.h (GC_least_plausible_heap_addr,
+GC_greatest_plausible_heap_addr, GC_debug_header_size): Use GC_API
+for the public variable declaration.
+* include/new_gc_alloc.h (GC_objfreelist_ptr, GC_aobjfreelist_ptr,
+GC_uobjfreelist_ptr, GC_auobjfreelist_ptr): Likewise.
+* include/gc_pthread_redirects.h (GC_pthread_create,
+GC_pthread_sigmask, GC_dlopen, GC_pthread_join, GC_pthread_detach):
+Use GC_API for the wrapper prototype.
+* include/gc_pthread_redirects.h (pthread_create, pthread_join,
+pthread_detach, pthread_sigmask, dlopen): Undefine unconditionally
+before redirecting.
+* include/new_gc_alloc.h: Replace GC_incr_mem_freed() with
+GC_incr_bytes_freed(); remove FIXME.
+* include/private/gc_priv.h (GC_make_closure,
+GC_debug_invoke_finalizer, GC_noop): Remove GC_API for the private
+function.
+* tests/test.c (GC_print_stats): Handle GC_DLL case regardless of
+the target.
+
+* finalize.c (GC_general_register_disappearing_link,
+GC_register_finalizer_inner): Remove unnecessary "ifdef THREADS"
+guard for LOCK/UNLOCK().
+* finalize.c (GC_general_register_disappearing_link,
+GC_register_finalizer_inner): Get GC_oom_fn value before releasing
+the lock (to prevent data races).
+* gcj_mlc.c (GC_gcj_malloc, GC_debug_gcj_malloc,
+GC_gcj_malloc_ignore_off_page): Likewise.
+* mallocx.c (GC_generic_malloc_ignore_off_page): Likewise.
+* include/gc_inline.h (GC_FAST_MALLOC_GRANS): Use GC_get_oom_fn()
+instead of GC_oom_fn (to prevent data races).
+* malloc.c (GC_generic_malloc): Likewise.
+* mallocx.c (GC_memalign): Likewise.
+* pthread_support.c (pthread_create): Likewise.
+* gcj_mlc.c (maybe_finalize): Acquire the lock before setting
+last_finalized_no value to prevent data races.
+* include/gc.h (GC_gc_no, GC_get_gc_no, GC_oom_fn, GC_set_oom_fn,
+GC_set_find_leak, GC_set_finalize_on_demand,
+GC_set_java_finalization, GC_set_finalizer_notifier,
+GC_set_dont_expand, GC_set_full_freq, GC_set_non_gc_bytes,
+GC_set_no_dls, GC_set_free_space_divisor, GC_set_max_retries,
+GC_set_dont_precollect, GC_set_time_limit, GC_warn_proc): Refine
+the comment.
+* misc.c (GC_set_oom_fn): Likewise.
+* include/gc.h (GC_general_register_disappearing_link): Refine the
+comment (replace "soft" word with "weak").
+* misc.c (GC_oom_fn, GC_get_gc_no, GC_get_parallel,
+GC_set_finalizer_notifier, GC_set_find_leak): Add the comment.
+* misc.c (GC_set_oom_fn, GC_get_oom_fn, GC_set_finalizer_notifier,
+GC_get_finalizer_notifier): Use LOCK/UNLOCK to prevent data races.
+
+* dbg_mlc.c: Guard include <errno.h> with ifndef MSWINCE; include
+"private/dbg_mlc.h" before it.
+* malloc.c: Likewise.
+* dbg_mlc.c (GC_debug_strdup): Use memcpy() instead of strcpy()
+for WinCE (since deprecated); evaluate strlen() only once; don't
+set errno for WinCE.
+* malloc.c (GC_strdup): Likewise.
+* dyn_load.c (GC_wnt): Define as macro (FALSE) for WinCE.
+* include/gc.h (GC_unregister_my_thread): Refine the comment.
+* include/gc.h (GC_uintptr_t, GC_beginthreadex, GC_endthreadex):
+Don't declare for WinCE.
+* include/gc.h (GC_WINMAIN_WINCE_LPTSTR): New macro (WinCE only).
+* include/gc.h (GC_WinMain): Remove GC_API.
+* include/gc.h (GC_WinMain): Use GC_WINMAIN_WINCE_LPTSTR for
+lpCmdLine.
+* tests/test.c (GC_WinMain): Likewise.
+* win32_threads.c (main_thread_args, GC_WinMain): Likewise.
+* include/gc_config_macros.h (ptrdiff_t): Guard with
+ifndef _PTRDIFF_T_DEFINED; define _PTRDIFF_T_DEFINED macro.
+* include/private/gc_locks.h: Guard include "atomic_ops.h" with
+ifdef GC_PTHREADS (and not GC_WIN32_THREADS).
+* mark.c: Include "atomic_ops.h" if PARALLEL_MARK.
+* thread_local_alloc.c: Include "atomic_ops.h" if GC_GCJ_SUPPORT.
+* win32_threads.c: Include "atomic_ops.h" if MPROTECT_VDB.
+* include/private/gc_locks.h: Use include "atomic_ops.h" instead
+of include <atomic_ops.h>.
+* include/private/gc_priv.h: Likewise.
+* include/private/gc_locks.h (GC_allocate_ml, GC_need_to_lock):
+Don't export (replace GC_API to "extern").
+* win32_threads.c (GC_allocate_ml): Don't export.
+* include/private/gc_priv.h (DebugBreak): Define as macro for
+WinCE (if not UNDER_CE and DebugBreak is not defined yet).
+* include/private/gc_priv.h (UNALIGNED): Rename to UNALIGNED_PTRS
+(since "UNALIGNED" is defined in winnt.h of WinCE).
+* mark.c (UNALIGNED): Likewise.
+* include/private/gcconfig.h (ARM32): Recognize _M_ARM and _ARM_.
+* include/private/gcconfig.h (ALIGNMENT): Check always defined.
+* include/private/gcconfig.h: Allow GC_WIN32_THREADS for WinCE.
+* include/private/thread_local_alloc.h: Define USE_WIN32_SPECIFIC
+for WinCE (since __declspec(thread) is unsupported).
+* include/private/thread_local_alloc.h (TLS_OUT_OF_INDEXES):
+Define for WinCE (if undefined).
+* malloc.c (GC_malloc): Remove outdated comment about disabling
+signals.
+* misc.c: Don't include <tchar.h> (since not used anymore and may
+break TEXT() macro defined in winnt.h).
+* misc.c (GC_init_inner): Don't use GetModuleHandle() and
+InitializeCriticalSectionAndSpinCount() for WinCE.
+* misc.c (GC_init_inner): Replace GetModuleHandleA() with
+GetModuleHandle() (and use TEXT() macro controlled by UNICODE).
+* misc.c (LOG_FILE): Remove unused macro; don't use _T() macro.
+* misc.c (GC_CreateLogFile): New static function (Win32/WinCE
+only); move the code from GC_write(); replace GETENV() with
+GetEnvironmentVariable(); replace CreateFileA() with
+CreateFile(); use TEXT() macro (for Unicode support); replace
+strcat() with memcpy() (since deprecated in WinCE).
+* misc.c (GC_write): Define as STATIC.
+* win32_threads.c (GC_attached_thread): Likewise.
+* misc.c (GC_write): Use GC_CreateLogFile().
+* misc.c: Define vsnprintf macro as StringCchVPrintfA for WinCE.
+* misc.c (GC_abort): Try to invoke MessageBoxA() dynamically
+(Win32 only) if DONT_USE_USER32_DLL is defined.
+* misc.c (GC_abort): Duplicate msg to GC log file (for Win32 and
+WinCE).
+* misc.c (GC_abort): Use a more user-friendly abort if
+NO_DEBUGGING (Win32 only).
+* os_dep.c: Include "atomic_ops.h" only if MPROTECT_VDB (and
+THREADS).
+* os_dep.c (detect_GetWriteWatch): Use TEXT() for GetModuleHandle
+(for Unicode support); check GetModuleHandle() result.
+* tests/test.c: Don't define assert for WinCE (since may be
+redefined by "assert.h" included from libatomic_ops).
+* tests/test.c (FAIL): Define as ABORT for all targets (except
+for PCR).
+* tests/test.c (n_tests): Don't use AO_t.
+* tests/test.c (check_heap_stats): Don't cast n_tests.
+* tests/test.c (inc_int_counter): New function (for n_tests atomic
+incrementation).
+* tests/test.c (run_one_test): Test GC_memalign() for all targets.
+* tests/test.c (run_one_test): Avoid unbalanced brackets in
+#if-#else-#endif blocks.
+* tests/test.c (run_one_test): Replace AO_fetch_and_add1() and
+private LOCK/UNLOCK with GC_call_with_alloc_lock(inc_int_counter).
+* tests/test.c (check_heap_stats): Replace
+"if (sizeof(char *) > 4)" with "#if CPP_WORDSZ == 64" to suppress
+"unreachable code" compiler warning.
+* tests/test.c (WinMain): Set cmd type to LPWSTR (for WinCE
+"UNDER_CE" mode); else use LPSTR type (for Win32 and WinCE).
+* tests/test.c (thr_window): Replace "L" string prefix with
+TEXT().
+* thread_local_alloc.c: Check THREADS is defined (to prevent other
+compiler errors and warnings otherwise).
+* tests/test.c (WinMain): Recognize GC_NO_DLLMAIN macro (for
+GC_use_DllMain()).
+* Makefile.direct (GC_NO_DLLMAIN, DONT_IMPORT_GETCURTHREAD): Add
+the comments for.
+* win32_threads.c (GC_register_my_thread_inner): Recognize
+DONT_IMPORT_GETCURTHREAD macro.
+* win32_threads.c: Recognize GC_NO_DLLMAIN macro (to exclude
+DllMain support if needed).
+* win32_threads.c (GC_NO_DLLMAIN): Define implicitly if DllMain
+thread registration is unsupported for a given configuration.
+* win32_threads.c (GC_use_DllMain): Update the comment; refine
+ABORT message.
+* win32_threads.c (GC_use_DllMain,
+GC_started_thread_while_stopped, GC_register_my_thread_inner,
+GC_lookup_thread_inner, GC_delete_gc_thread,
+GC_allow_register_threads, GC_lookup_pthread,
+GC_push_thread_structures, GC_stop_world, GC_push_all_stacks):
+Check for GC_NO_DLLMAIN.
+* win32_threads.c (GC_Thread_Rep.tm_in_use, GC_attached_thread,
+DllMain): Don't define if GC_NO_DLLMAIN.
+* win32_threads.c (GC_stop_world): Declare "i" and "max" local
+variables only if not GC_NO_DLLMAIN (to suppress compiler
+warning).
+* win32_threads.c (GC_mark_thread, start_mark_threads): Use
+CreateThread() instead of _beginthreadex() for WinCE.
+* win32_threads.c (MARK_THREAD_STACK_SIZE, WINCE_MAIN_STACK_SIZE):
+New macros defined (used by start_mark_threads(), WinMain()).
+* win32_threads.c (GC_thr_init): Exclude parallel-specific code on
+WinCE for now (since getenv(), GetProcessAffinityMask() and
+SignalObjectAndWait() are missing on WinCE).
+* win32_threads.c (GC_thr_init): replace GetModuleHandleA() with
+GetModuleHandle(); replace CreateEventA() with CreateEvent(); use
+TEXT() macro (for Unicode support).
+
+* include/gc.h (GC_has_static_roots_func): New typedef (user filter
+callback).
+* include/gc.h (GC_register_has_static_roots_callback): Use
+GC_has_static_roots_func type.
+* dyn_load.c (GC_has_static_roots,
+GC_register_has_static_roots_callback): Likewise.
+* dyn_load.c (GC_has_static_roots,
+GC_register_has_static_roots_callback): Define on all platforms.
+* dyn_load.c (GC_register_dynlib_callback,
+GC_register_dynamic_libraries, GC_init_dyld): Replace K&R-style
+functions definition with the ANSI C one.
+* dyn_load.c (GC_register_dynlib_callback): Use new local variable
+"callback" (initialized from GC_has_static_roots) to minimize data
+races.
+* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr,
+GC_cond_add_roots): Define as STATIC.
+* mark_rts.c (GC_remove_roots_inner): Likewise.
+* dyn_load.c (GC_dyld_image_add): Don't call GC_add_roots() for
+sections smaller than pointer size (just to avoid acquiring the
+lock unnecessarily).
+* dyn_load.c (GC_dyld_name_for_hdr): Define unconditionally (not
+only for DARWIN_DEBUG).
+* dyn_load.c (GC_dyld_image_add): Replace GC_add_roots() call with
+LOCK + GC_add_roots_inner() + UNLOCK.
+* dyn_load.c (GC_dyld_image_add): Call GC_has_static_roots() user
+callback (if set) holding the lock; if it returns 0 then don't call
+GC_add_roots_inner() for that region.
+* dyn_load.c (GC_register_has_static_roots_callback): Put
+"callback" value to GC_has_static_roots on all platforms.
+* dyn_load.c (GC_has_static_roots): Update the comments.
+* include/gc.h (GC_exclude_static_roots, GC_add_roots,
+GC_remove_roots, GC_register_has_static_roots_callback): Likewise.
+* include/private/gc_priv.h (struct roots): Likewise.
+* include/private/gc_priv.h (GC_remove_roots_inner): Move prototype
+to mark_rts.c and declare it as STATIC.
+* include/private/gc_priv.h (GC_exclude_static_roots_inner): New
+prototype.
+* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr): Use
+GC_exclude_static_roots_inner() instead of GC_exclude_static_roots.
+* misc.c (GC_init_inner): Likewise.
+* mark_rts.c (GC_exclude_static_roots_inner): New function (move
+all the code from GC_exclude_static_roots(); add the comment.
+* mark_rts.c (GC_add_roots_inner, GC_exclude_static_roots_inner):
+add alignment assertion for the lower bound; add assertion for the
+lower bound to be less than the upper one.
+* mark_rts.c (GC_add_roots_inner, GC_exclude_static_roots): Adjust
+the upper bound (round down to be of a pointer-aligned value);
+return in case of an empty range.
+* mark_rts.c (GC_exclude_static_roots): Acquire the lock and call
+GC_exclude_static_roots_inner().
+* mark_rts.c (GC_remove_roots): Quickly check the bounds and return
+in case of a do-nothing case (before acquiring the lock).
+
+* finalize.c (GC_fail_count): New external variable declaration.
+* finalize.c (GC_reset_finalizer_nested,
+GC_check_finalizer_nested): New function declarations (if THREADS
+only).
+* finalize.c (GC_finalizer_nested, GC_finalizer_skipped): New
+static global variables (used internally by GC_finalize() and
+GC_check_finalizer_nested()).
+* finalize.c (GC_check_finalizer_nested): New static function
+definition (only if not THREADS, used internally by
+GC_notify_or_invoke_finalizers() to minimize the probability of
+a deep recursion when a client finalizer tries to allocate GC
+memory).
+* finalize.c (GC_finalize): Reset GC_finalizer_nested value (or
+call GC_reset_finalizer_nested()) if last heap expansion failed.
+* finalize.c (GC_notify_or_invoke_finalizers): Access GC_gc_no,
+GC_finalizer_now, GC_finalize_on_demand, GC_finalizer_notifier,
+last_finalizer_notification variables holding the lock (to avoid
+data races).
+* finalize.c (GC_finalizer_notifier): Add comment.
+* finalize.c (GC_notify_or_invoke_finalizers): Add "quick" check
+for an empty finalization queue (only if THREADS and not
+KEEP_BACK_PTRS/MAKE_BACK_GRAPH).
+* finalize.c (GC_notify_or_invoke_finalizers): Call
+GC_check_finalizer_nested() and skip GC_invoke_finalizers() call
+if appropriate.
+* include/private/pthread_support.h (GC_Thread_Rep): Add unsigned
+finalizer_nested and finalizer_skipped fields (for internal use
+by the multi-threaded GC_check_finalizer_nested()).
+* win32_threads.c (GC_Thread_Rep): Likewise.
+* pthread_support.c (GC_reset_finalizer_nested,
+GC_check_finalizer_nested): New function definitions (the
+multi-threaded variants of that in finalize.c).
+* win32_threads.c (GC_reset_finalizer_nested,
+GC_check_finalizer_nested): Likewise.
+
+* alloc.c (GC_stopped_mark): Remove GC_log_printf("") (not needed
+anymore and GCC produces a warning for it).
+* alloc.c (GC_stopped_mark): Adjust printf argument type
+specifier.
+* backgraph.c: Include dbg_mlc.h before ifdef MAKE_BACK_GRAPH (for
+the case when the configuration information comes from aconfig
+file).
+* checksums.c: Likewise.
+* include/gc_allocator.h (GC_ATTR_UNUSED): Use "__unused__"
+keyword instead of "unused".
+* include/gc_allocator.h: Fix typos in comments.
+* thread_local_alloc.c: Likewise.
+* include/javaxfc.h (GC_finalize_all): Update comment.
+* include/private/gc_priv.h (GC_API_PRIV): New macro (defined as
+GC_API and serves only as a marker for the private but exported
+symbols used by test.c only).
+* include/private/gc_priv.h (GC_abort, GC_arrays, GC_is_marked,
+GC_printf, GC_err_printf, GC_log_printf): Replace GC_API decl with
+GC_API_PRIV one.
+* include/private/gc_priv.h (GC_fo_entries): Don't export it
+outside a DLL.
+* include/private/gc_priv.h (GC_ATTR_FORMAT_PRINTF): New macro
+designated to check the arguments correctness of printf-like
+functions (currently works only for GCC v3+).
+* include/private/gc_priv.h (GC_printf, GC_err_printf,
+GC_log_printf): Use GC_ATTR_FORMAT_PRINTF attribute.
+
+* dyn_load.c (HAVE_DL_ITERATE_PHDR): Break definition from use.
+Define for FreeBSD 7.0+.
+
+* mach_dep.c: Don't include ucontext.h with NO_GETCONTEXT.
+
+* include/gc_gcj.h (GC_init_gcj_malloc): Improve descriptive
+comment.
+
+* allchblk.c (GC_merge_unmapped): Don't assume that adjacent
+free blocks have different mapping status.  Correctly handle gap
+between blocks.
+(GC_split_block): Remove dead code setting hb_flags.  Add comment.
+(GC_allochblk): Split blocks also in generational-only mode.
+* os_dep.c (GC_unmap_gap): Don't really use munmap.
+
+* include/private/gc_priv.h (GC_unmapped_bytes): Define as 0 for
+not USE_MUNMAP case.
+
+* Makefile.direct (MARK_BIT_PER_OBJ, PRINT_BLACK_LIST,
+USE_PROC_FOR_LIBRARIES): Fix typo in the comments.
+* Makefile.direct (USE_MMAP, USE_MUNMAP, THREAD_LOCAL_ALLOC,
+PARALLEL_MARK, STATIC): Update the comments.
+* include/private/gcconfig.h (GC_PREFER_MPROTECT_VDB): New macro
+recognized (only if MPROTECT_VDB).
+* Makefile.direct (DONT_USE_USER32_DLL, GC_PREFER_MPROTECT_VDB):
+Add the comments for.
+* os_dep.c (detect_GetWriteWatch): Recognize "GC_USE_GETWRITEWATCH"
+environment variable (only if MPROTECT_VDB, if the variable is
+unset when GC_PREFER_MPROTECT_VDB macro controls the strategy).
+* doc/README.environment (GC_USE_GETWRITEWATCH): New variable.
+* include/private/gcconfig.h (MPROTECT_VDB): Add FIXME for
+USE_MUNMAP and PARALLEL_MARK cases (to relax the conditions in
+the future).
+* misc.c (GC_get_heap_size, GC_get_free_bytes): Ignore the memory
+space returned to OS (GC_unmapped_bytes).
+* include/gc.h (GC_get_heap_size, GC_get_free_bytes): Update the
+comments.
+* misc.c (GC_get_unmapped_bytes): New API function.
+* include/gc.h (GC_get_unmapped_bytes): New API prototype.
+* os_dep.c (GC_dirty_init): Move "ifdef GWW_VDB" block out of
+"ifdef MSWIN32" one (for Cygwin).
+
+* pthread_support.c (GC_allow_register_threads): New API function.
+* win32_threads.c (GC_allow_register_threads): Likewise.
+* include/gc.h (GC_allow_register_threads): New API prototype.
+* include/gc.h (GC_register_my_thread, GC_unregister_my_thread):
+Update the comments.
+* pthread_support.c (GC_register_my_thread): Check the collector
+is in the multi-threaded mode.
+* win32_threads.c (GC_register_my_thread): Likewise.
+
+* finalize.c (GC_finalize_all): Always call GC_invoke_finalizers
+instead, following Ivan's original patch.
+
+* allchblk.c (GC_allochblk_nth): Add assertion.
+* checksums.c: Add GC_record_fault, GC_was_faulted,
+CC_n_faulted_dirty_errors.
+(GC_check_dirty): Remove register declarations, print
+dirty bit errors on faulted pages.
+* os_dep.c (GC_write_fault_handler): Call GC_record_fault().
+* os_dep.c (GC_remove_protection): Compute index correctly.
+
+
+[7.2alpha2] 2009-06-12
+======================
+
+* dbg_mlc.c (GC_print_smashed_obj): Convert a group of printf()
+calls into a single one (for output atomicity).
+* typd_mlc.c (GC_calloc_explicitly_typed): Don't declare and use
+GC_finalization_failures variable; check the result of
+GC_general_register_disappearing_link() (for lack of memory)
+instead.
+* finalize.c (GC_finalization_failures): Remove unused global
+variable.
+* finalize.c (GC_general_register_disappearing_link,
+GC_general_register_disappearing_link): Don't update the value of
+GC_finalization_failures (since unused).
+* include/private/gc_pmark.h (PUSH_ONE_CHECKED_STACK,
+GC_PUSH_ONE_STACK, GC_PUSH_ONE_HEAP): The first parameter is of
+word type now (as FIXUP_POINTER requires numeric argument).
+* finalize.c (GC_ignore_self_finalize_mark_proc): GC_PUSH_ONE_HEAP
+requires the first parameter of word type.
+* mark.c (PUSH_GRANULE): Likewise.
+* mark.c (GC_push_one, GC_push_all_eager): Likewise.
+* finalize.c (GC_finalize_all): Call GC_invoke_finalizers() or
+GC_finalizer_notifier directly, instead
+of GC_INVOKE_FINALIZERS() to prevent infinite looping.
+* include/javaxfc.h: Clarify GC_finalize_all comment.
+* gcj_mlc.c: Include gc_pmark.h before "ifdef GC_GCJ_SUPPORT" (not
+after) for configuration information.
+* gcj_mlc.c (GC_gcj_malloc_ignore_off_page): Add comment.
+* gcj_mlc.c (GC_gcj_malloc_ignore_off_page): Check "op" local
+variable for NULL before dereferencing it, return GC_oom_fn() in
+this case.
+* typd_mlc.c (GC_malloc_explicitly_typed,
+GC_malloc_explicitly_typed_ignore_off_page): Transform the code to
+suppress compiler warning (for uninitialized "lg" variable).
+
+* win32_threads.c (GC_unregister_my_thread): add false assertion
+in unreachable code.
+
+* pthread_support.c (GC_inner_start_routine): Don't release the
+GC lock between GC_register_my_thread_inner() and
+GC_init_thread_local() calls (post the "registered" even after
+calling GC_init_thread_local()).
+* win32_threads.c (GC_register_my_thread, GC_unregister_my_thread):
+Use GC_lookup_thread_inner() instead of GC_lookup_thread() and
+acquire the GC lock only once.
+* win32_threads.c (GC_thr_init): Call GC_register_my_thread_inner()
+directly instead of GC_register_my_thread() since I_HOLD_LOCK
+and our (main) thread is not registered yet (add assertion for it).
+* win32_threads.c (GC_init_parallel): Call GC_lookup_thread_inner()
+directly instead of GC_lookup_thread() (since I_HOLD_LOCK).
+* win32_threads.c (GC_lookup_thread): Remove unused function.
+* win32_threads.c: Remove "#error GC_DLL untested with Cygwin".
+* win32_threads.c (GC_win32_dll_threads): Define as FALSE macro
+also if THREAD_LOCAL_ALLOC or GC_PTHREADS.
+* win32_threads.c (GC_use_DllMain): Call ABORT also if GC_PTHREADS
+(for Cygwin).
+* win32_threads.c (GC_push_stack_for): Add parentheses around "&&"
+(inside GC_ASSERT) to prevent compiler warning.
+* win32_threads.c (GC_push_all_stacks): Remove FIXME for
+PARALLEL_MARK.
+* win32_threads.c (MAX_MARKERS, GC_markers): Move the definitions
+to a place before GC_get_next_stack().
+* win32_threads.c (marker_sp, marker_bsp): New static arrays (same
+as in pthread_support.c).
+* win32_threads.c (marker_last_stack_min): New static arrays (the
+same semantics as for last_stack_min of GC_Thread_Rep).
+* win32_threads.c (GC_get_next_stack): Handle marker threads.
+* win32_threads.c (GC_mark_thread): Save the current stack pointer
+to marker_[b]sp.
+* win32_threads.c (start_mark_threads): Initialize
+marker_last_stack_min elements (to "unset" value).
+
+* misc.c (GC_set_oom_fn, GC_set_all_interior_pointers,
+GC_set_finalize_on_demand, GC_set_java_finalization,
+GC_set_finalizer_notifier, GC_set_dont_expand, GC_set_full_freq,
+GC_set_no_dls, GC_set_free_space_divisor, GC_set_max_retries,
+GC_set_dont_precollect, GC_set_time_limit, GC_set_warn_proc):
+Change return type to void (these API functions no longer return
+the old value).
+* include/gc.h: Likewise.
+* tests/test.c (main, WinMain, test): Remove explicit cast to void
+for GC_set_warn_proc().
+* misc.c (GC_get_oom_fn, GC_get_all_interior_pointers,
+GC_get_finalize_on_demand, GC_get_java_finalization,
+GC_get_finalizer_notifier, GC_get_dont_expand, GC_get_full_freq,
+GC_get_no_dls, GC_get_free_space_divisor, GC_get_max_retries,
+GC_get_dont_precollect, GC_get_time_limit, GC_get_warn_proc): New
+API functions (to get the current value of the corresponding R/W
+public variables).
+* include/gc.h: Likewise.
+* include/gc.h (GC_set_warn_proc, GC_set_free_space_divisor):
+Update the comment.
+* misc.c (GC_ignore_warn_proc): New API call-back function.
+* include/gc.h (GC_ignore_warn_proc): Likewise.
+* misc.c (GC_set_find_leak, GC_get_find_leak, GC_set_non_gc_bytes,
+GC_get_non_gc_bytes): New API setter and getter functions (for the
+public GC_find_leak and GC_non_gc_bytes variables, respectively).
+* include/gc.h: Likewise.
+* include/gc.h (GC_memalign): Add proto to GC API.
+* mallocx.c (GC_memalign): Use GC_API, GC_CALL for the definition.
+* tests/test.c (run_one_test): Test GC_memalign() on Win32 too,
+remove GC_memalign() proto.
+* misc.c (GC_write): Use multi-byte (A) variants of Win32
+GetModuleFileName() and CreateFile().
+* tests/test.c (main): Replace K&R-style function definition with the
+ANSI C one.
+
+* include/private/gcconfig.h (PLATFORM_ANDROID): New macro
+recognized (for Linux on ARM32 without glibc).
+* include/private/gcconfig.h (STRTOULL): Define for all targets
+(define as "strtoul" for most targets except for LLP64/Win64).
+* misc.c (GC_init_inner): Use STRTOULL instead of atoi/atol()
+(cast the result to word type) to decode values of "GC_TRACE",
+"GC_INITIAL_HEAP_SIZE", "GC_MAXIMUM_HEAP_SIZE" environment
+variables.
+
+* include/gc_allocator.h: Add gc_allocator_ignore_off_page.
+* tests/test_cpp.cc: Add call to gc_allocator_ignore_off_page.
+
+* win32_threads.c (GC_release_mark_lock): Correct misspelling of
+AO_load in assertion.
+
+* win32_threads.c (MAX_THREADS): Define as 1 if GC_win32_dll_threads
+is defined as FALSE (otherwise the size of dll_thread_table is near
+200 KiB for 32-bit).
+* win32_threads.c (GC_use_DllMain): Optimize for THREAD_LOCAL_ALLOC.
+* win32_threads.c (GC_Thread_Rep): Add backing_store_end and
+backing_store_ptr fields for IA64 support.
+* win32_threads.c (GC_register_my_thread_inner): Set
+backing_store_end field to reg_base value for IA64 (same as in
+pthread_support.c).
+* win32_threads.c (SET_PTHREAD_MAP_CACHE): Put parentheses in the
+"right" places, remove ';'.
+* win32_threads.c (GC_fault_handler_lock): Declare only
+if MPROTECT_VDB (and not WinCE).
+* win32_threads.c (GC_suspend): Acquire and release
+GC_fault_handler_lock only if MPROTECT_VDB (and not WinCE).
+* win32_threads.c (GC_suspend): Define as STATIC.
+* win32_threads.c (GC_push_stack_for): Fix WARN() format specifier
+(should be word-compliant, "%p" is used w/o "0x"), don't cast sp.
+* win32_threads.c (GC_push_all_stacks): Convert a group of printf()
+calls into a single one (for output atomicity).
+* win32_threads.c (GC_get_next_stack): Unprotect thread descriptor
+before altering its last_stack_min ("thread" variable is added).
+* win32_threads.c (GC_get_next_stack): Remove unnecessary checks for
+"s" is non-NULL.
+* win32_threads.c (GC_get_next_stack): Don't call GC_may_be_in_stack
+if WinCE.
+* win32_threads.c (GC_get_next_stack): Pass current_min value to
+GC_get_stack_min as-is (without -1).
+* win32_threads.c (GC_wait_marker): Remove FIXME and use "release"
+version of AO_fetch_and_sub1().
+* win32_threads.c (GC_win32_start_inner, GC_win32_start): convert int
+to pointer (and vice versa) thru word type to suppress warnings.
+* win32_threads.c (GC_mark_mutex_waitcnt): Fix comment, always
+access atomically.
+* misc.c: Change GC_THREADS tests back to THREADS.
+
+* allchblk.c (GC_print_hblkfreelist, GC_dump_regions): Convert
+a group of printf() calls into a single one (for output atomicity).
+* include/gc.h (GC_set_all_interior_pointers, GC_set_full_freq,
+GC_set_time_limit): New prototypes.
+* misc.c (GC_set_all_interior_pointers, GC_set_full_freq,
+GC_set_time_limit): New public setter/getter functions.
+* include/gc.h: Fix (and remove outdated) comments for thread-local
+allocation.
+* include/gc.h: Fix typos in comments.
+* misc.c (GC_init_inner, GC_printf): Likewise.
+* include/gc.h (GC_unregister_disappearing_link): Refine comment.
+* include/gc.h (GC_stack_base): Recognize _M_IA64 macro.
+* misc.c (GC_stack_last_cleared, GC_min_sp, GC_high_water,
+GC_bytes_allocd_at_reset, DEGRADE_RATE): Define only if THREADS.
+* misc.c (GC_stack_last_cleared, GC_min_sp, GC_high_water,
+GC_bytes_allocd_at_reset): Define as STATIC.
+* misc.c (GC_get_heap_size, GC_get_free_bytes,
+GC_get_bytes_since_gc, GC_get_total_bytes): Acquire the GC lock to
+avoid data races.
+* misc.c (GC_write_cs): Define only if THREADS (Win32/WinCE only).
+* misc.c (GC_init_inner): Initialize GC_write_cs only if THREADS.
+* misc.c (GC_init_inner): Use GC_INITIAL_HEAP_SIZE (if available) to
+set the default initial value of initial_heap_sz.
+* misc.c (GC_deinit): Destroy GC_write_cs only if THREADS.
+* misc.c (GC_init_inner): Fix WARN() format specifier (should be
+word-compliant, "%p" is used w/o "0x").
+* misc.c (GC_init_inner): Don't recognize "GC_PAUSE_TIME_TARGET"
+environment variable if SMALL_CONFIG.
+* misc.c (GC_init_inner): Recognize "GC_FULL_FREQUENCY" environment
+variable to set initial GC_full_freq value (if not SMALL_CONFIG).
+* doc/README.environment (GC_FULL_FREQUENCY): Add information.
+* doc/README.environment (GC_MARKERS): Refine information.
+* misc.c (GC_init_inner): Change GC_ASSERT to GC_STATIC_ASSERT where
+possible.
+* misc.c (IF_NEED_TO_LOCK): New macro (instead of GC_need_to_lock).
+* misc.c (GC_write): Use IF_NEED_TO_LOCK for handling GC_write_cs.
+* misc.c (GC_abort): Don't define if SMALL_CONFIG.
+* misc.c (GC_abort): Directly use WRITE() instead of GC_err_printf()
+(to prevent possible infinite recursion).
+
+* finalize.c (finalization_mark_proc): Replace K&R-style declaration
+with ANSI C one.
+* finalize.c (GC_grow_table, GC_register_finalizer_inner,
+GC_enqueue_all_finalizers): Remove outdated comments about disabling
+signals.
+* finalize.c (GC_general_register_disappearing_link): Fix assertion
+to catch NULL "obj" value.
+* finalize.c (GC_unregister_disappearing_link): Check "link"
+alignment before gaining the lock.
+* finalize.c (GC_finalize): Refine comment.
+* finalize.c (GC_finalize): Fix WARN() format specifier (should be
+word-compliant, "%p" is used w/o "0x").
+* finalize.c (GC_invoke_finalizers): Initialize "bytes_freed_before"
+variable (to 0) to suppress compiler warning.
+* include/gc_gcj.h (MARK_DESCR_OFFSET): Move to private/gc_pmark.h.
+* include/gc_gcj.h: add "extern C" header and tail.
+* include/private/gc_pmark.h: Remove GC_do_parallel_mark(),
+GC_help_wanted, GC_helper_count, GC_active_count declarations (move
+the comments to the place where these symbols are defined in mark.c).
+* mark.c: Add STATIC GC_do_parallel_mark() declaration (for use by
+GC_mark_some_inner, if PARALLEL_MARK only).
+* mark.c (GC_mark_some_inner, GC_help_wanted, GC_helper_count,
+GC_active_count, GC_do_parallel_mark): Define as STATIC.
+* pthread_support.c (GC_mark_thread): Likewise.
+* typd_mlc.c (GC_explicit_typing_initialized, GC_explicit_kind,
+GC_array_kind, GC_ext_descriptors, GC_ed_size, GC_avail_descr,
+GC_typed_mark_proc_index, GC_array_mark_proc_index, GC_eobjfreelist,
+GC_arobjfreelist): Likewise.
+* include/private/gc_pmark.h (PUSH_CONTENTS_HDR): Change GC_ASSERT
+for HBLKSIZE to GC_STATIC_ASSERT.
+* mark.c (GC_noop): Define for Borland C the same as for Watcom.
+* mark.c (GC_noop, GC_mark_and_push): Add ARGSUSED tag.
+* pthread_support.c (GC_do_blocking_inner): Likewise.
+* mark.c (GC_mark_from): Initialize "limit" (to 0) in the default
+switch branch to suppress compiler warning.
+* mark.c (GC_return_mark_stack): Append new-line to printf message.
+* mark.c: Remove unused GC_true_func(), GC_PUSH_ALL().
+* pthread_support.c (GC_mark_thread): Add dummy "return 0" to
+suppress compiler warning.
+* pthread_support.c (start_mark_threads): Move the code limiting
+"GC_markers" value (and printing a warning) to GC_thr_init().
+* pthread_support.c (GC_thr_init): Silently limit "GC_markers" value
+if based on the number of CPUs.
+* pthread_support.c (GC_thr_init): Treat incorrect "GC_markers"
+values as one.
+* pthread_support.c (GC_register_my_thread_inner): Add a check for
+"stack_end" is non-NULL (the same as in win32_threads.c).
+* pthread_support.c (pthread_create): Call GC_oom_fn before giving up
+with ENOMEM.
+* thread_local_alloc.c (return_single_freelist): Convert "for" loop
+to "while" one to suppress "possible extraneous ';'" warning.
+
+* darwin_stop_world.c (GC_push_all_stacks): Recognize ARM32.
+* include/private/gc_priv.h (GC_THREAD_STATE_T): Define for ARM32
+(Darwin only).
+* include/private/gcconfig.h: Add machine-specific part for DARWIN.
+* include/private/gcconfig.h (ARM32): Define config parameters for
+DARWIN (iPhone).
+
+* alloc.c (GC_FULL_FREQ, GC_DONT_EXPAND, GC_FREE_SPACE_DIVISOR,
+GC_TIME_LIMIT): New macros (used to control the default initial
+values of GC_full_freq variable, GC_dont_expand,
+GC_free_space_divisor, GC_time_limit respectively).
+* include/private/gc_priv.h (TIME_LIMIT): Remove macro (replaced
+with GC_TIME_LIMIT in alloc.c).
+* alloc.c (GC_need_full_gc, GC_stopped_mark, GC_finish_collection):
+Define as STATIC.
+* mark_rts.c (GC_push_current_stack, GC_push_gc_structures): Likewise.
+* include/private/gc_priv.h (GC_stopped_mark, GC_finish_collection):
+Move the prototypes to alloc.c, make STATIC.
+* include/private/gc_priv.h (GC_push_current_stack,
+GC_push_gc_structures, GC_push_regs_and_stack): Remove prototypes
+(move the comments to the places where these functions are defined).
+* mach_dep.c (GC_push_regs_and_stack): Move to mark_rts.c and define
+as STATIC.
+* alloc.c (GC_timeout_stop_func, GC_stopped_mark,
+GC_print_heap_sects): Convert a group of printf() calls into
+a single one (for output atomicity).
+* mark_rts.c (GC_print_static_roots): Likewise.
+* alloc.c (GC_stopped_mark): Output blank line (when logging) for
+convenience to delimit collections.
+* alloc.c (GC_clear_a_few_frames): Rename NWORDS to CLEAR_NWORDS;
+make "frames" local variable volatile (to prevent optimization).
+* alloc.c (GC_try_to_collect_inner, GC_stopped_mark,
+GC_finish_collection, GC_allocobj): Remove outdated comments about
+disabling signals.
+* include/private/gc_priv.h (GC_register_displacement_inner,
+GC_gcollect_inner): Likewise.
+* alloc.c (GC_try_to_collect_inner, GC_stopped_mark,
+GC_finish_collection): Initialize "start_time" local variable (to 0)
+to suppress compiler warning.
+* mark_rts.c (GC_add_roots_inner): Likewise.
+* alloc.c (GC_RATE, MAX_PRIOR_ATTEMPTS): Guard with "ifndef".
+* include/private/gc_priv.h (clock, GC_stop_world, GC_start_world,
+GC_acquire_mark_lock, GC_release_mark_lock, GC_notify_all_builder,
+GC_wait_for_reclaim, GC_notify_all_marker, GC_wait_marker): Replace
+K&R-style function prototypes with ANSI C one.
+* include/private/gc_priv.h (ABORT): Define as DebugBreak() for
+Win32/WinCE if SMALL_CONFIG (the same as in GC_abort()).
+* include/private/gc_priv.h (ROUNDED_UP_WORDS, abs): Remove unused
+macros.
+* include/private/gc_priv.h (GC_noop): Declare for Borland C the
+same as for Watcom.
+* mark_rts.c (GC_push_conditional_with_exclusions): Add ARGSUSED tag.
+
+* dbg_mlc.c (GC_store_debug_info, GC_store_debug_info_inner): Remove
+outdated comment about disabling signals.
+* mallocx.c (GC_malloc_uncollectable,
+GC_malloc_atomic_uncollectable): Likewise.
+* os_dep.c: Likewise.
+* dbg_mlc.c (GC_debug_change_stubborn, GC_debug_end_stubborn_change):
+Add ARGSUSED tag.
+* pthread_stop_world.c (GC_suspend_handler,
+GC_suspend_handler_inner): Likewise.
+* dbg_mlc.c (GC_debug_free, GC_debug_realloc): Fix printf message.
+* dbg_mlc.c (GC_debug_realloc): Set "result" to NULL in the default
+switch branch to suppress compiler warning.
+* dyn_load.c (GC_init_dyld): Use ABORT() instead of GC_abort().
+* include/private/darwin_semaphore.h (sem_init): Likewise.
+* include/javaxfc.h: Replace "GC_H" with "_GC_H".
+* include/private/dbg_mlc.h (GC_has_other_debug_info,
+GC_store_debug_info): Replace K&R-style function prototypes with ANSI
+C one.
+* include/private/gcconfig.h (GC_FreeBSDGetDataStart, real_malloc,
+GC_win32_get_mem, GC_wince_get_mem, GC_unix_get_mem): Likewise.
+* include/private/pthread_support.h (GC_stop_init): Likewise.
+* include/private/gcconfig.h: Refine comment about setting
+GC_stackbottom.
+* include/private/gcconfig.h (FIXUP_POINTER): Put parentheses in the
+"right" places.
+* include/private/pthread_support.h (GC_Thread_Rep): Refine comment
+for "stack_end" field.
+* mallocx.c (GC_malloc_uncollectable,
+GC_malloc_atomic_uncollectable): Remove cast to undefined "hbklk".
+* os_dep.c (GC_USE_MEM_TOP_DOWN): New macro (for setting
+GC_mem_top_down to MEM_TOP_DOWN for debug purposes).
+* os_dep.c (GC_gww_read_dirty, catch_exception_raise): Fix WARN()
+format specifier (should be word-compliant, "%p" is used w/o "0x").
+* pthread_stop_world.c (GC_suspend_handler_inner): Likewise.
+* os_dep.c (GC_dirty_init): Append new-line to printf messages.
+* os_dep.c (GC_mprotect_thread): Fix GC_err_printf message.
+* os_dep.c (GC_save_callers): Change GC_ASSERT to GC_STATIC_ASSERT.
+* pthread_stop_world.c (GC_retry_signals, GC_suspend_ack_sem): Define
+as STATIC.
+* pthread_stop_world.c (GC_push_all_stacks): Add assertion for that
+"thread_blocked" is not set for the current thread.
+* real_malloc.c: Add "extern GC_quiet" to suppress compiler warning.
+* reclaim.c (GC_reclaim_all): Initialize "start_time" (to 0) to
+suppress compiler warning.
+
+* tests/test.c (check_heap_stats): Avoid unbalanced brackets in ifdef.
+
+* win32_threads.c: restructure parallel marking mutex initialization.
+* win32_threads.c, alloc.c, darwin_stop_world.c, mallocx.c, mark.c,
+pthread_stop_world.c, pthread_support.c: Add runtime conditions
+on GC_parallel were appropriate.
+* pthread_support.c: Condition marker_bsp on ia64.
+(GC_segment_is_thread_stack): Fix loop upper bound.
+* reclaim.c: Limit some assertions to PARALLEL_MARK.
+* pthread_support.c: Don't acquire mark lock for thread-local
+allocation.
+* include/private/gc_priv.h: Don't define parallel mark sync
+support just for THREAD_LOCAL_ALLOC.
+
+* include/private/gcconfig.h: refine MINGW32 test.
+* mark.c: Add win64/gcc tests.
+
+* test.c (fork_a_thread, reverse_test, alloc8bytes, tree_test,
+typed_test, run_one_test, check_heap_stats, main, test): Replace
+all K&R-style function definitions with ANSI C ones.
+* trace_test.c (main): Likewise.
+* test.c (GC_COND_INIT): Define as GC_INIT() also in case of
+THREAD_LOCAL_ALLOC.
+* test.c (reverse_test): Call fork_a_thread() only if GC_PTHREADS
+or GC_WIN32_THREADS; remove fork_a_thread() macros definition.
+* test.c (reverse_test): Use "volatile" when clearing "b" and "c"
+local variables (to suppress "assigned value is never used"
+compiler warning).
+* test.c (tree_test): Use public GC_noop1() instead of private
+GC_noop().
+* test.c (typed_test): Likewise.
+* test.c (check_heap_stats): Define and assign value to
+"late_finalize_count" local variable only if its value is used
+(if FINALIZE_ON_DEMAND defined).
+* test.c (main): Remove DJGPP-specific initialization of
+GC_stackbottom (not needed anymore, handled in gcconfig.h).
+* trace_test.c: Guard #define GC_DEBUG with #ifndef.
+* trace_test.c: Include "gc_backptr.h".
+* trace_test.c (main): Call GC_INIT().
+* trace_test.c (main): Add "return 0" statement.
+
+* dyn_load.c (GC_register_dynlib_callback): Use new index j
+instead of i in the inner loop.
+
+* tests/test.c: Increment n_tests with fetch_and_add when possible,
+avoiding need to export lock.
+
+* include/gc_pthread_redirects.h:
+- dlfcn.h is included for dlopen() proto before undefining
+"dlopen" (so, it's possible now to include dlfcn.h after
+gc.h from user code);
+- GC_dlopen() proto is added (except for Darwin as
+it's missing there);
+- "dlopen" is explicitly undefined (before its redefinition).
+* include/gc.h:
+- "process.h" is included besides "windows.h"
+(for _beginthreadex/_endthreadex); win32 only.
+- GC_NO_THREAD_DECLS is moved to the right place
+(before closing "extern C").
+* pthread_support.c: Fix out of memory handling for Thread_Reps.
+* win32_threads.c: Don't include process.h on winCE,
+improve out of memory handling for thread structures, don't
+define GC_beginthreadex and GC_endthreadex for winCE.
+
+* tests/test.c: Change gcj vtable decriptor type from size_t to
+GC_word.
+
+* gcj_mlc.c: Add comment.
+* tests/test.c: Change NTEST to NTHREADS.  Fork 5 threads by default.
+Run reverse_test a second time in each thread.Add comments.
+Don't rely on AO_fetch_and_add.
+
+* dyn_load.c (GC_register_dynlib_callback,
+GC_register_dynamic_libraries_dl_iterate_phdr): Add support
+for GNU_PT_RELRO relocations.
+
+* Makefile, Makefile.direct: GC_SOLARIS_PTHREADS was replaced
+by GC_SOLARIS_THREADS.
+* include/gc.h: Improve finalizer documentation.
+* mips_sgi_mach_dep.s: Replace _MIPS_SIM_ABI32 with _ABIO32.
+* pthread_stop_world.c, Makefile.dj: Fix typos.
+
+* win32_threads.c (GC_new_thread): Make first_thread
+visible to the whole file.
+(UNPROTECT): New macro.
+(GC_push_stack_for, GC_suspend, GC_start_world): unprotect
+thread structures before writing.
+(GC_suspend): Acquire GC_fault_handler_lock before suspending
+thread.
+* os_dep.c: export GC_fault_handler_lock.
+(GC_remove_protection): Check if already unprotected.
+
+* doc/README.win32: Add OpenWatcom warning.
+* include/private/gcconfig.h: Really check it in.
+
+* os_dep.c (GC_get_stack_base, windows): Replace with Dave Korn's
+code from gcc version.
+* os_dep.c: make gc compilable (optionally) for Cygwin with
+GetWriteWatch-based virtual dirty bit implementation ("os_dep.c" file).
+* os_dep.c: Make non-win32 GC_write_fault_handler STATIC.
+* mark.c (GC_noop): fix declaration definition mismatch for DMC.
+* include/private/gcconfig.h: Enable MPROTECT_VDB and GWW_VDB for
+Watcom (Win32 only).  It works.
+
+* mach_dep.c: Don't use __builtin_unwind_init for register
+state on PowerPC/Darwin.
+
+* doc/gcdescr.html: Improve description of object freelist
+structure.
+* include/private/gc_priv.h: Fix comment for _size_map.
+
+* os_dep.c (GC_linux_stack_base): Relax sanity test.
+
+* include/private/gc_pmark.h (PUSH_CONTENTS_HDR for
+MARK_BIT_PER_OBJ): Add missing backslash before eoln.
+
+* misc.c (GC_set_warn_proc): Implicitly intialize GC on
+non-Cygwin win32.
+
+* configure.ac: Enable thread-local allocation for sparc-linux.
+
+* alloc.c (GC_try_to_collect): Remove duplicate initialization
+check.
+* malloc.c (GC_generic_malloc): Remove lw to eliminate single-
+threaded warnings.
+* mallocx.c (GC_generic_malloc_ignore_off_page): Likewise.
+
+* allchblk.c, backgraph.c, dbg_mlc.c, dyn_load.c,
+finalize.c, include/private/gc_pmark.h, malloc.c, mark.c,
+os_dep.c, pthread_stop_world.c, pthread_support.c, reclaim.c,
+thread_local_alloc.c.
+* misc.c: Refine comment.
+
+* os_dep.c: Define GC_GWW_BUF_LEN more intelligently.  Add FIXME
+comment.
+
+* win32_threads.c (GC_push_stack_for): Yet another attempt
+at the stack_min finding logic.  Try to clean up the existing code
+while minimizing VirtualQuery calls.
+(GC_win32_start_inner): Register thread before GC_printf.
+Produce more output with DEBUG_THREADS.
+*include/gc.h: Update obsolete comments.
+
+* tests/test.c:
+(gcj_class_struct2): Use cast instead of l suffix.
+Cast GetLastError to int in various places.
+Avoid unused result warning from incr/decr macros.
+Add cast for fake_gcj_mark_proc.
+Cast GC_gc_no to unsigned in printf.
+
+* include/gc.h: Fix two typos in comments.
+
+* finalize.c: Fix typo in comment.
+
+* blacklst.c (GC_print_source_pointer): Don't call GC_print_heap_obj
+with lock.
+
+* reclaim.c: (GC_reclaim_block): Scan even nearly full blocks
+if we are checking for leaks.
+
+* win32_threads.c: Remove mark lock spinning.
+* win32_threads.c, pthread_support.c: Update GC_unlocked_count,
+GC_spin_count, and GC_block_count using atomic operations.
+* tests/test.c: Declare n_tests as AO_t only if we have threads.
+
+* win32_threads.c: Support PARALLEL_MARK.  Make printf arg
+types agree with format specifiers.
+Add STATIC for GC_threads.
+* include/private/gcconfig.h: Add FIXME comment.
+* tests/test.c (run_ine_test): Replace LOCK/UNLOCK use with
+AO_fetch_and_add1_full.  Declare n_tests as AO_t.
+(WinMain): Don't call GC_use_DllMain.
+with PARALLEL_MARK or THREAD_LOCAL_ALLOC.
+
+* alloc.c (GC_try_to_collect_inner): Don't print redundant
+GC_bytes_allocd and GC_gc_no.
+(GC_stopped_mark): Print average world stop time.
+* include/private/gc_priv.h (MS_TIME_DIFF): Add cast.
+
+* misc.c, doc/README.environment: Add support  for
+GC_FREE_SPACE_DIVISOR and GC-disable-incremental.
+* include/gc.h: Make GC_set_free_space_divisor correspond to
+(somewhat unfortunate) reality.
+
+(Mostly improves LLP64 support.)
+* backgraph.c, checksums.c, dbg_mlc.c, finalize.c, mark.c,
+misc.c, reclaim.c: Changed some int and long type to word or size_t
+(and vice versa where appropriate)
+* gcj_mlc.c, include/private/dbg_mlc.h, include/private/gcconfig.h,
+include/private/thread_local_alloc.h, mark.c,
+misc.c, thread_local_alloc.c, win32_threads.c: Added intermediate
+casts to word type when casting from int to pointer (or pointer
+to int, or data pointer to code pointer) - just to remove the
+corresponding compiler warning.
+* ptr_chck.c (GC_is_visible): cast int const to word type to
+prevent left shift overflow.
+* os_dep.c: change the type of GC_mem_top_down global variable
+(containing a flag) to DWORD.
+* include/gc_config_macros.h: define GC_SOLARIS_THREADS if GC_THREADS
+is defined on SunOS x86_64.
+* misc.c (GC_init_size_map): Ifdef out GC_ASSERT as a workaround
+for VC++ 2008 amd64 (v15.00.21022.08 for x64) compiler bug
+(the compiler gets hung if invoked with -Ox -D
+ALL_INTERIOR_POINTERS -D GC_ASSERTIONS)
+* backgraph.c: cast GC_gc_no value to unsigned short when
+assigned/compared to height_gc_no field of back_edges.
+* os_dep.c (GC_remove_protection): Add ARGSUSED.
+* win32_threads.c (GC_thread_exit_proc): Remove unused local
+variable.
+* mark.c (GC_check_dirty): Move declaration out of func body.
+
+* doc/gcinterface.html: Improve REDIRECT_MALLOC documentation.
+* include/gc.h (GC_register_my_thread): Improve comment.
+
+* Makefile.direct: Add comment for -DCHECKSUMS.
+
+* thread_local_alloc.c, include/private/thread_local_alloc.h:
+Fix typos in comments.
+* finalize.c: Declare mark_procs and GC_register_finalizer_inner
+STATIC.
+* malloc.c (GC_free): Move size calculation below assertion.
+
+* win32_threads.c (GC_get_stack_min, GC_may_be_in_stack):
+Add one entry VirtualQuery cache, I_HOLD_LOCK assertions.
+(GC_push_stack_for, GC_get_next_stack) : Hopefully fix WINCE support.
+
+* finalize.c (GC_general_register_disappearing_link): Add
+assertion.
+* malloc.c (GC_generic_malloc): Round lb to granules, not words.
+* mallocx.c (GC_generic_malloc_ignore_off_page): Round lb to
+granules, not words.
+
+* mach_dep.c (NO_GETCONTEXT): Define for sparc linux.
+* configure.ac: Define mach_dep for sparc-linux.
+
+* mark_rts.c (GC_approx_sp): Use volatile to avoid common
+warning.
+
+* dyn_load.c (GC_cond_add_roots): Fix GC_get_next_stack argument
+order.
+
+* alloc.c, dbg_mlc.c, dyn_load.c, finalize.c, gcj_mlc.c,
+include/gc.h, include/gc_config_macros.h, include/gc_cpp.h,
+include/gc_gcj.h, include/gc_mark.h, include/gc_typed.h,
+include/javaxfc.h, include/private/gc_locks.h,
+include/private/gc_priv.h, malloc.c, mallocx.c, mark.c, mark_rts.c,
+misc.c, obj_map.c, os_dep.c, pthread_support.c, ptr_chck.c,
+stubborn.c, tests/test.c, thread_local_alloc.c, typd_mlc.c
+win32_threads.c: Add GC_CALL and GC_CALLBACK macro invocations.
+* test.c: Remove some old K&R code.
+
+* win32_threads.c (GC_may_be_in_stack): New.  (GC_Thread_Rep):
+Add last_stack_min.  (GC_push_stack_for): Use last_stack_min.
+(GC_get_next_stack): Add limit argument, use_last_stack_min.
+(GC_suspend): make stack_base assignment conditional.
+* dyn_load.c (win32 GC_cod_add_roots): Pass limit to
+GC_get_next_stack.
+* configure_atomic_ops.sh: Remove.
+* build_atomic_ops.sh, build_atomic_ops.sh.cygwin, doc/README.win32,
+Makefile.direct: Partially support build directories whose path
+name contains blanks.
+* Makefile.am: Support new files (build_atomic_ops.sh,
+build_atomic_ops.sh.cygwin)
+
+* include/private/gc_locks.h, include/private/gc_pmark.h,
+include/private/gc_priv.h, include/private/gcconfig.h,
+mach_dep.c, mark_rts.c, misc.c, os_dep.c, pthread_stop_world.c,
+pthread_support.c, thread_local_alloc.c, typd_mlc.c, win32_threads.c:
+Fix comments.
+
+* pthread_support.c: Comment out LOCK_STATS.
+* include/gc.h: Fix comments.
+
+* misc.c (GC_init_inner): Enable GC_LOG_FILE on Cygwin.
+* include/private/gcconfig.h: Consider USE_MMAP for Cygwin.
+* os_dep.c (GC_get_main_stack_base): Use alternate definition
+with USE_MMAP.
+* include/private/gc_priv.h: Sometimes define SETJMP on Cygwin.
+
+* doc/README: Make it clearer when Makefile.direct is assumed.
+* cord/cord.am: install include/cord.h.
+
+* win32_threads.c (GC_pthread_join, GC_pthread_start_inner):
+Remove unused variables.
+* darwin_stop_world.c: Always declare GC_thr_init().
+* dbg_mlc.c (GC_debug_free_inner): Don't touch oh_sz if
+SHORT_DBG_HDRS is defined.
+* include/private/gc_pmark.h (OR_WORD_EXIT_IF_SET, parallel
+mark, USE_MARK_BITS version): Refer to correct parameter name.
+
+* finalize.c (GC_general_register_disappearing_link): Remove
+redundant code.
+* gcj_mlc.c (GC_init_gcj_malloc): Add cast to signed.
+* os_dep.c: (GC_write_fault_handler): Remove remaining
+references to deleted variable "code".  Remove redundant
+FREEBSD definitions.
+* include/private/gcconfig.h (GWW_VDB): Define for X86_64 when
+defined for X86. (STATIC): Define as "static" with NO_DEBUGGING.
+
+* include/private/gc_priv.h: Update MAX_HEAP_SECTS.
+
+* dbg_mlc.c (GC_print_smashed_obj): Increase robustness with
+smashed string, (GC_debug_free_inner): Mark as free.
+* mallocx.c (GC_malloc_many): Always clear new block if
+GC_debugging_started.
+* reclaim.c: Move GC_debugging_started from
+GC_reclaim_small_nonempty_block() to GC_reclaim_generic(),
+which is also called directly.
+* doc/README: Fix spelling error.  Update license summary.
+* include/gc.h (GC_PRE_INCR3, GC_POST_INCR3): add (void **) casts.
+* tests/test.c: Don't define GC_DEBUG if already defined.
+
+* doc/simple_example.html: update --enable-full-debug reference,
+Make HTML formatting standards compliant.
+* doc/debugging.html, doc/leak.html: Fix HTML formatting bugs.
+* doc/gcinterface.html: specify encoding.
+
+* doc/simple_example.html: Update thread-local allocation
+description.
+
+* configure.ac: Check for gc-debug earlier; replace remaining
+full-debug tests.
+* include/gc.h, ptr_chck.c (GC_pre_incr, GC_post_incr):
+Use signed offset type.  Use ptr_t internally.
+* doc/gcinterface.html: Update LOCAL_MALLOC description.
+* doc/README.autoconf, doc/leak.html, doc/README.DGUX386:
+Fix full-debug reference.
+* include/gc.h: Rewrite GC_..._INCR and friends.
+* tests/test.c: Minimally test GC_..._INCR and friends.
+
+* mark.c: (GC_push_next_marked, GC_push_next_marked_dirty,
+GC_push_next_marked_uncollectable): Never invoke GC_push_marked
+on free hblk.
+* headers.c: Test COUNT_HDR_CACHE_HITS not USE_HDR_CACHE.
+(GC_header_cache_miss): Always blacklist pointers for free
+hblks.  Add assertion and comment.
+* pthread_support.c (GC_register_my_thread): Fix #if indentation.
+* include/private/gc_hdrs.h: USE_HDR_CACHE is no longer tested.
+Delete it.
+* include/private/gc_pmark.h: (PUSH_OBJ): Add assertion.
+
+* alloc.c, include/gc_mark.h, Makefile.direct: Improve comments.
+
+* configure.ac: Set win32_threads on MinGW.
+
+Ivan's description of the patch follows. Note that a few pieces like
+the GC_malloc(0) patch, were not applied since an alternate had been
+previously applied.  A few differed stylistically from the rest of
+the code (mostly casts to void * instead of target type),
+or were classified as too minor to bother.  Note that
+all of Ivan's static declarations which did not correct outright
+naming bugs (as a few did), where replaced by STATIC, which is
+ignored by default.
+
+- minor bug fixing (for FreeBSD, for THREAD_LOCAL_ALLOC and for
+GC_malloc(0));
+- addition of missing getter/setter functions for public variables
+(may be useful if compiled as Win32 DLL);
+- addition of missing GC_API for some exported functions;
+- addition of missing "static" declarator for internal functions
+and variables (where possible);
+- replacement of all remaining K&R-style definitions with ANSI
+C ones (__STDC__ macro is not used anymore);
+- addition of some Win32 macro definitions (that may be missing in
+the standard headers supplied with a compiler) for GWW_VDB mode;
+- elimination of most compiler warnings (except for
+"uninitialized data" warning);
+- several typos correction;
+- missing parenthesis addition in macros in some header files of
+"libatomic_ops" module.
+
+My highlights based on reading the patch:
+
+* allchblk.c: Remove GC_freehblk_ptr decl.
+Make free_list_index_of() static.
+* include/gc.h: Use __int64 on win64, define GC_oom_func,
+GC_finalizer_notifier_proc, GC_finalizer_notifier_proc,
+add getter and setters: GC_get_gc_no, GC_get_parallel,
+GC_set_oom_fn, GC_set_finalize_on_demand,
+GC_set_java_finalization, GC_set_dont_expand,
+GC_set_no_dls, GC_set_max_retries, GC_set_dont_precollect,
+GC_set_finalizer_notifier.  Always define GC_win32_free_heap.
+gc_config_macros.h: Define _REENTRANT after processing
+GC_THREADS.
+* include/gc_cpp.h: Improve GC_PLACEMENT_DELETE test,
+handling of operator new[] for old Windows compilers.
+* include/gc_inline.h (GC_MALLOC_FAST_GRANS): Add parentheses
+around arguments.
+* dbg_mlc.c, malloc.c, misc.c: Add many GC_API specs.
+* mark.c (GC_mark_and_push_stack): Fix source argument for
+blacklist printing.
+* misc.c: Fix log file naming based on environment variable
+for Windows.  Make GC_set_warn_proc and GC_set_free_space_divisor
+just return current value with 0 argument.  Add DONT_USE_USER32_DLL.
+Add various getters and setters as in gc.h.
+* os_dep.c: Remove no longer used GC_disable/enable_signals
+implementations.  (GC_get_stack_base): Add pthread_attr_destroy
+call.  No longer set GC_old_bus_handler in DARWIN workaround.
+* pthread_support.c: GC_register_my_thread must also
+call GC_init_thread_local.
+
+* Makefile.direct, mach_dep.c: Add support for NO_GETCONTEXT.
+* mach_dep.c: Include signal.h.
+* gc_priv.h: Factor out INLINE declaration.
+
+* include/private/gcconfig.h: Update MIPS/LINUX config.
+* doc/gcdescr.html: Fix typo.
+* mach_dep.c (GC_with_callee_saves_pushed): Don't rely on getcontext
+for MIPS/LINUX.
+
+* configure.ac: SPARC fixes.
+* thread_local_alloc.c(GC_mark_thread_local_fls_for): Include
+size 0, except for gcj.
+* doc/gc.man: Expand C++ cautions.
+* include/gc_inline.h: Fix comments.
+
+
+[7.1] 2008-05-03
+================
+
+* doc/gcinterface.html: Improve C++ interface documentation.
+
+* allchblk.c (GC_allochblk): Check for overflow during size
+rounding.
+* tests/huge_test.c: New.
+* Makefile.direct, tests/tests.am: Add huge_test.c
+
+* pthread_support.c: Fix typo in comment.
+* os_dep.c (GC_win32_get_mem): Add heap section only if
+allocation succeeded.
+
+* malloc.c: (free replacement) Fix caller address space check.
+
+* finalize.c (GC_grow_table): Dereference table in null-check.
+
+* win32_threads.c (GC_delete_gc_thread, GC_delete_thread):
+Consistently call CloseHandle. (GC_suspend): Call
+GC_delete_gc_thread.
+* tests/test.c: Don't reference GC_print_stats if not exported.
+
+* tests/test.c (run_one_test): Don't mention pthread_self().
+* misc.c: Declare GC_thr_init().
+
+* allchblk.c (add_to_fl): disable assertions with USE_MUNMAP,
+and refine assertions to handle huge unmergable blocks.
+(GC_allochblk_nth): Add comment.
+
+* include/private/gcconfig.h: Add missing FREEBSD macro
+consistency test.
+
+* allchblk.c (GC_enough_large_bytes_left): No longer take
+parameters; return free list index bound.
+(GC_merge_unmapped): Don't access nexthdr until after null test.
+(Fixes bug in 1/29/08 check-in.)  (GC_allochblk): Calculate
+when splitting is allowable only once here, not when considering each
+block. (GC_allchblk_nth): Accept new may_split parameter.
+Avoid some redundant tests for exact size matches.
+* alloc.c (GC_should_collect): Cache min_bytes_allocd.
+(GC_maybe_gc): Make locking assertion testable.
+* mark_rts.c: Fix indentation.
+* pthread_stop_world.c: Replace old GC_err_printf1 reference.
+* tests/test.c: Remove (void) casts.  Optionally print some
+timing information.
+
+* windows-untested/gc.def: Remove CreateThread line.
+* windows-untested/README: New file.
+* win32_threads.c (GC_use_DllMain): Force collector initialization.
+* include/gc.h (GC_use_DllMain): Clarify usage rules in comment.
+* mark.c (GC_mark_from): Slightly simplify GC_DS_PER_OBJECT code.
+* include/gc_cpp.h: Add matching placement delete overloads
+everywhere.
+* include/private/gc_locks.h (NO_THREAD): Add cast.
+* include/private/gcconfig.h: Add test for __HP_aCC.
+* configure.ac, tests/tests.am:  Avoid libgccpp on HP/UX.
+
+* doc/README.win32: Fix typo.
+* configure.ac: Fix printing of enable-shared result.
+
+* misc.c (GC_init_inner): Assert !GC_need_to_lock only when
+defined.  (GC_call_with_stack_base): Add GC_API.
+* os_dep.c (GC_get_stack_base): Add GC_API.
+* win32_threads.c: (GC_register_my_thread, GC_unregister_my_thread):
+Add GC_API.
+* include/gc.h: Add GC_API annotations.
+* include/private/gc_locks.h: Define UNCOND_LOCK etc. also for
+PCR.
+* include/private/gc_pmark.h: Fix comments.
+
+* include/private/gc_priv.h, mark_rts.c, typd_mlc.c:
+Add GC_push_typed_structures() to push GC_ext_descriptors.
+
+* tests/test.c: Call GC_INIT for DARWIN; test system type using
+gcconfig.h-defined macros.
+
+* allchblk.c (GC_merge_unmapped, GC_freehblk): Refuse to create
+blocks large enough that their size, when interpreted as a signed
+value, would be negative.
+* include/private/gc_priv.h: Comment hb_sz range limit.
 
-       * dyn_load.c (WIN32_LEAN_AND_MEAN): Guard with ifndef.
-       * misc.c (WIN32_LEAN_AND_MEAN): Ditto.
-       * os_dep.c (WIN32_LEAN_AND_MEAN): Ditto.
-       * allchblk.c (GC_allochblk_nth): Fix a minor typo (don't/doesn't)
-       in a comment.
-       * backgraph.c: Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries): Ditto.
-       * extra/threadlibs.c (main): Ditto.
-       * pthread_support.c (pthread_join): Ditto.
-       * tests/test.c (main): Ditto.
-
-2009-11-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * mach_dep.c (GC_push_regs): Remove STATIC (just to catch
-       a duplicate symbol definition linker error).
-       * misc.c (GC_clear_stack_inner): Ditto.
-       * sparc_mach_dep.S (GC_push_regs): Comment out the reference.
-       * sparc_mach_dep.S: Remove trailing spaces at EOLn; remove
-       multiple trailing blank lines.
+* mark.c (GC_push_next_marked): correct comment.
+* Makefile.direct: document NO_PROC_STAT.
+* include/private/gcconfig.h: Accomodate NO_PROC_STAT.
 
-2009-11-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (GC_write_disabled): New variable
-       declaration (only if GC_ASSERTIONS and Win32 threads).
-       * misc.c (GC_write): Add assertion for GC_write_disabled value is
-       not on (only if THREADS).
-       * win32_threads.c (GC_write_disabled): New variable (only if
-       GC_ASSERTIONS and not Cygwin).
-       * win32_threads.c (GC_stop_world): Set and clear GC_write_disabled
-       (while holding GC_write_cs).
-
-2009-11-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (GC_please_stop): If DllMain-based thread
-       registration is not compiled in then define GC_please_stop as
-       a non-volatile variable for assertion only.
-       * win32_threads.c (GC_stop_world): Set and clear only if defined.
-       * win32_threads.c (GC_stop_world): Add the comment for GC_printf()
-       usage (while holding GC_write_cs).
-       * win32_threads.c (GC_delete_gc_thread): Ditto.
-       * os_dep.c (GC_remove_protection): Ditto.
-
-2009-11-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * pthread_support.c (GC_inner_start_routine): Join 3 sequential
-       GC_printf() calls into a single one (for DEBUG_THREADS).
-
-2009-11-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (GC_total_stacksize): New variable
-       declaration (only if THREADS).
-       * alloc.c (GC_total_stacksize): New variable (only if THREADS).
-       * alloc.c (min_bytes_allocd): Calculate stack_size using
-       GC_stackbottom only in the single-threaded case; otherwise use
-       GC_total_stacksize; print GC_total_stacksize value if
-       DEBUG_THREADS.
-       * darwin_stop_world.c (GC_push_all_stacks): Use "%p" printf type
-       specifier for lo/hi values (instead of "%lx").
-       * darwin_stop_world.c (GC_push_all_stacks): Use
-       GC_push_all_stack_frames() instead of GC_push_all_stack().
-       * darwin_stop_world.c (GC_push_all_stacks): Recalculate
-       GC_total_stacksize value.
-       * pthread_stop_world.c (GC_push_all_stacks): Ditto.
-       * win32_threads.c (GC_push_all_stacks): Ditto.
-       * win32_threads.c (GC_push_stack_for): Pass "me" argument; return
-       stack size; don't check for non-zero value of thread->stack_base.
-       * win32_threads.c (GC_push_all_stacks): Don't call
-       GC_push_stack_for() and don't check for "t->id == me" if
-       thread->stack_base is zero.
-
-2009-11-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (GC_dump_meminfo): Prefix "%lx" printf type specifier
-       with "0x".
-       * os_dep.c (PROTECT): Ditto.
-       * win32_threads.c (GC_mark_thread_local_free_lists): Cast p->id to
-       int (to match printf type specifier).
-
-2009-11-05  Ivan Maidanski <ivmai@mail.ru>
-
-       * tests/test.c (check_heap_stats): Take into account the unmapped
-       memory size when checking for "Unexpected heap growth"; remove
-       FIXME.
-
-2009-11-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c: Revert last change.
-
-2009-11-02  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gcconfig.h (STACKBOTTOM): Add a presence check
-       for eCos/NOSYS.
-       * misc.c (GC_write): Comment out _Jv_diag_write() call (since no
-       longer defined in GCJ).
-
-2009-11-02  Ivan Maidanski <ivmai@mail.ru>
-
-       * os_dep.c (brk): Rename to ecos_gc_brk.
-
-2009-11-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (min_bytes_allocd): Use GC_stackbottom value to compute
-       stack_size even if THREADS.
-       * doc/README.macros (DEBUG_THREADS): Document.
-       * pthread_support.c (DEBUG_THREADS): Remove the commented out
-       definition.
-       * win32_threads.c (DEBUG_WIN32_THREADS): Remove duplicate
-       definition.
-       * win32_threads.c: Include errno.h (except for WinCE).
-       * win32_threads.c (GC_win32_start_inner): Copy "start" and "param"
-       to local variables, and free "arg" parameter before "start"
-       invocation.
-       * win32_threads.c (GC_beginthreadex): Set errno to EAGAIN on error
-       (instead of calling SetLastError(ERROR_NOT_ENOUGH_MEMORY)).
-       * win32_threads.c (GC_beginthreadex): Return 0 on error (instead
-       of -1).
-
-2009-10-23  Ivan Maidanski <ivmai@mail.ru>
-
-       * darwin_stop_world.c (GC_darwin_register_mach_handler_thread):
-       Use GC_INNER for the function definition.
-       * include/private/darwin_stop_world.h
-       (GC_darwin_register_mach_handler_thread): Remove the prototype.
-       * include/private/darwin_stop_world.h: Add copyright header.
-       * os_dep.c (GC_darwin_register_mach_handler_thread): Use GC_INNER
-       for the function prototype.
-       * include/private/gc_priv.h (NDEBUG): Explicitly define if
-       NO_DEBUGGING and not GC_ASSERTIONS (before the standard headers
-       inclusion).
-
-2009-10-22  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gcconfig.h: Move DebugBreak() workaround (for
-       x86mingw32ce toolchain) to gc_priv.h (after windows.h inclusion).
-
-2009-10-22  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_unmap_old, GC_merge_unmapped, GC_allochblk,
-       GC_freehblk): Use GC_INNER for the function definition.
-       * alloc.c (GC_never_stop_func, GC_should_collect,
-       GC_try_to_collect_inner, GC_collect_a_little_inner,
-       GC_set_fl_marks, GC_add_to_our_memory, GC_add_to_heap,
-       GC_expand_hp_inner, GC_collect_or_expand, GC_allocobj): Ditto.
-       * backgraph.c (GC_build_back_graph, GC_traverse_back_graph):
-       Ditto.
-       * blacklst.c (GC_default_print_heap_obj_proc, GC_bl_init,
-       GC_promote_black_lists, GC_unpromote_black_lists,
-       GC_add_to_black_list_normal, GC_add_to_black_list_stack,
-       GC_is_black_listed): Ditto.
-       * darwin_stop_world.c (GC_push_all_stacks, GC_push_all_stacks,
-       GC_stop_init, GC_stop_world, GC_start_world): Ditto.
-       * dbg_mlc.c (GC_has_other_debug_info, GC_store_back_pointer,
-       GC_marked_for_finalization, GC_generate_random_backtrace_no_gc,
-       GC_store_debug_info, GC_start_debugging,
-       GC_debug_generic_malloc_inner,
-       GC_debug_generic_malloc_inner_ignore_off_page,
-       GC_debug_malloc_uncollectable, GC_debug_free_inner): Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries,
-       GC_register_main_static_data, GC_init_dyld): Ditto.
-       * finalize.c (GC_push_finalizer_structures, GC_finalize,
-       GC_notify_or_invoke_finalizers, GC_print_finalization_stats):
-       Ditto.
-       * gcj_mlc.c (GC_core_gcj_malloc): Ditto.
-       * headers.c (GC_find_header, GC_header_cache_miss,
-       GC_scratch_alloc, GC_init_headers, GC_install_header,
-       GC_install_counts, GC_remove_header, GC_remove_counts,
-       GC_next_used_block, GC_prev_block): Ditto.
-       * mach_dep.c (GC_with_callee_saves_pushed): Ditto.
-       * malloc.c (GC_collect_or_expand, GC_alloc_large,
-       GC_generic_malloc_inner, GC_generic_malloc_inner_ignore_off_page,
-       GC_core_malloc_atomic, GC_core_malloc, GC_free_inner): Ditto.
-       * mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
-       * mark.c (GC_collection_in_progress, GC_clear_hdr_marks,
-       GC_set_hdr_marks, GC_set_mark_bit, GC_clear_mark_bit,
-       GC_clear_marks, GC_initiate_gc, GC_mark_some,
-       GC_mark_stack_empty, GC_invalidate_mark_state,
-       GC_signal_mark_stack_overflow, GC_mark_from, GC_help_marker,
-       GC_mark_init, GC_push_all, GC_push_conditional,
-       GC_mark_and_push_stack, GC_push_all_eager, GC_push_all_stack):
-       Ditto.
-       * mark_rts.c (GC_is_static_root, GC_roots_present, GC_approx_sp,
-       GC_exclude_static_roots_inner, GC_push_all_register_frames,
-       GC_push_all_stack_frames, GC_cond_register_dynamic_libraries,
-       GC_push_roots): Ditto.
-       * misc.c (GC_extend_size_map, GC_clear_stack, GC_err_write):
-       Ditto.
-       * new_hblk.c (GC_build_fl, GC_new_hblk): Ditto.
-       * obj_map.c (GC_register_displacement_inner, GC_add_map_entry,
-       GC_initialize_offsets): Ditto.
-       * os_dep.c (GC_get_maps, GC_parse_map_entry, GC_text_mapping,
-       GC_init_linux_data_start, GC_init_netbsd_elf, GC_setpagesize,
-       GC_set_and_save_fault_handler, GC_setup_temporary_fault_handler,
-       GC_reset_fault_handler, GC_get_register_stack_base, GC_init_win32,
-       GC_add_current_malloc_heap, GC_is_heap_base, GC_unmap, GC_remap,
-       GC_unmap_gap, GC_push_all_stacks, GC_gww_dirty_init,
-       GC_dirty_init, GC_read_dirty, GC_page_was_dirty,
-       GC_page_was_ever_dirty, GC_remove_protection,
-       GC_write_fault_handler, GC_mprotect_stop, GC_mprotect_resume,
-       GC_save_callers, GC_print_callers): Ditto.
-       * pthread_stop_world.c (GC_push_all_stacks, GC_stop_world,
-       GC_start_world, GC_stop_init): Ditto.
-       * pthread_support.c (GC_mark_thread_local_free_lists,
-       GC_lookup_thread, GC_reset_finalizer_nested,
-       GC_check_finalizer_nested, GC_segment_is_thread_stack,
-       GC_greatest_stack_base_below, GC_thr_init, GC_init_parallel,
-       GC_do_blocking_inner, GC_lock, GC_acquire_mark_lock,
-       GC_release_mark_lock, GC_wait_for_reclaim, GC_notify_all_builder,
-       GC_wait_marker, GC_notify_all_marker): Ditto.
-       * reclaim.c (GC_print_all_errors, GC_block_empty,
-       GC_reclaim_generic, GC_start_reclaim, GC_continue_reclaim,
-       GC_reclaim_all): Ditto.
-       * thread_local_alloc.c (GC_init_thread_local,
-       GC_destroy_thread_local, GC_mark_thread_local_fls_for): Ditto.
-       * win32_threads.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested, GC_do_blocking_inner, GC_stop_world,
-       GC_start_world, GC_push_all_stacks, GC_get_next_stack,
-       GC_acquire_mark_lock, GC_release_mark_lock, GC_wait_for_reclaim,
-       GC_notify_all_builder, GC_wait_marker, GC_notify_all_marker,
-       GC_thr_init, GC_init_parallel, GC_lock,
-       GC_mark_thread_local_free_lists): Ditto.
-       * alloc.c (GC_add_current_malloc_heap, GC_build_back_graph,
-       GC_traverse_back_graph): Use GC_INNER for the function prototype.
-       * darwin_stop_world.c (GC_mprotect_stop, GC_mprotect_resume):
-       Ditto.
-       * dbg_mlc.c (GC_default_print_heap_obj_proc): Ditto.
-       * dyn_load.c (GC_parse_map_entry, GC_get_maps,
-       GC_segment_is_thread_stack, GC_roots_present, GC_is_heap_base,
-       GC_get_next_stack): Ditto.
-       * finalize.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested): Ditto.
-       * gcj_mlc.c (GC_start_debugging): Ditto.
-       * include/private/dbg_mlc.h (GC_save_callers, GC_print_callers,
-       GC_has_other_debug_info, GC_store_debug_info): Ditto.
-       * include/private/gc_hdrs.h (GC_header_cache_miss): Ditto.
-       * include/private/gc_locks.h (GC_lock): Ditto.
-       * include/private/gc_pmark.h (GC_signal_mark_stack_overflow,
-       GC_mark_from): Ditto.
-       * include/private/pthread_support.h (GC_lookup_thread,
-       GC_stop_init): Ditto.
-       * include/private/thread_local_alloc.h (GC_init_thread_local,
-       GC_destroy_thread_local, GC_mark_thread_local_fls_for): Ditto.
-       * malloc.c (GC_extend_size_map, GC_text_mapping): Ditto.
-       * mark.c (GC_page_was_ever_dirty): Ditto.
-       * mark_rts.c (GC_mark_thread_local_free_lists): Ditto.
-       * misc.c (GC_register_main_static_data, GC_init_win32,
-       GC_setpagesize, GC_init_linux_data_start,
-       GC_set_and_save_fault_handler, GC_init_dyld, GC_init_netbsd_elf,
-       GC_do_blocking_inner): Ditto.
-       * os_dep.c (GC_greatest_stack_base_below): Ditto.
-       * win32_threads.c (GC_write_fault_handler, GC_gww_dirty_init):
-       Ditto.
-       * include/private/gc_priv.h: Ditto (for most prototypes).
-       * include/private/gc_priv.h (GC_INNER): Update the comment.
-       * doc/README.macros (GC_DLL): Update.
-
-2009-10-22  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_collection_in_progress): Move the prototype to
-       gc_priv.h.
-       * gc_dlopen.c (GC_collection_in_progress): Ditto.
-       * pthread_support.c (GC_collection_in_progress): Ditto.
-       * misc.c (GC_init_parallel): Ditto.
-       * pthread_support.c (GC_init_parallel): Ditto.
-       * win32_threads.c (GC_init_parallel): Ditto.
-       * darwin_stop_world.c (GC_thr_init): Ditto.
-       * misc.c (GC_thr_init): Ditto.
-       * pthread_stop_world.c (GC_thr_init): Ditto.
-       * pthread_support.c (GC_thr_init): Ditto.
-       * blacklst.c (GC_clear_bl, GC_copy_bl,
-       GC_number_stack_black_listed): Make STATIC.
-       * dbg_mlc.c (GC_print_obj, GC_make_closure,
-       GC_debug_invoke_finalizer): Ditto.
-       * malloc.c (GC_alloc_large_and_clear): Ditto.
-       * mark.c (GC_push_selected, GC_push_marked1, GC_push_marked2,
-       GC_push_marked4, GC_push_marked, GC_push_next_marked,
-       GC_push_next_marked_dirty, GC_push_next_marked_uncollectable):
-       Ditto.
-       * misc.c (GC_clear_stack_inner): Ditto.
-       * os_dep.c (GC_repeat_read, GC_default_push_other_roots): Ditto.
-       * darwin_stop_world.c (FindTopOfStack): Make static; define only
-       if not DARWIN_DONT_PARSE_STACK.
-       * dbg_mlc.c (GC_debug_free_inner): Define only if DBG_HDRS_ALL.
-       * dyn_load.c (GC_repeat_read): Remove unused prototype.
-       * include/private/gc_pmark.h (GC_find_start): Ditto.
-       * misc.c (GC_read, GC_register_finalizer_no_order): Ditto.
-       * dyn_load.c (GC_segment_is_thread_stack): Add prototype (only if
-       THREADS).
-       * dyn_load.c (GC_register_main_static_data): Define only if
-       DYNAMIC_LOADING.
-       * finalize.c (GC_enqueue_all_finalizers): Remove unnecessary tail
-       "return" statement.
-       * gc_dlopen.c (GC_SOLARIS_THREADS): Don't recognize (since implies
-       GC_PTHREADS).
-       * include/gc.h: Fix a typo.
-       * include/gc_inline.h (GC_ASSERT): Define (if not defined) since
-       the header is public.
-       * include/gc_inline.h (GC_generic_malloc_many): New public
-       function declaration.
-       * mallocx.c (GC_generic_malloc_many): Make public.
-       * include/private/gc_priv.h (GC_INNER): Use visibility attribute
-       (if available).
-       * include/private/gc_priv.h (GC_EXTERN): Define using GC_INNER.
-       * include/private/gc_priv.h: Include atomic_ops.h if THREADS and
-       MPROTECT_VDB.
-       * os_dep.c: Don't include atomic_ops.h
-       * win32_threads.c: Ditto.
-       * include/private/gc_priv.h (GC_push_selected, GC_push_regs,
-       GC_push_marked, GC_number_stack_black_listed,
-       GC_alloc_large_and_clear, GC_reclaim_or_delete_all,
-       GC_generic_malloc_many, GC_make_closure,
-       GC_debug_invoke_finalizer, GC_print_obj, GC_page_was_ever_dirty):
-       Remove the prototype.
-       * mark.c (GC_page_was_ever_dirty): Add prototype (only if
-       PROC_VDB).
-       * include/private/gc_priv.h (GC_push_next_marked_dirty,
-       GC_push_next_marked, GC_push_next_marked_uncollectable): Move
-       the prototype to mark.c.
-       * include/private/gc_priv.h (GC_is_static_root): Declare only if
-       not THREADS.
-       * include/private/gc_priv.h (GC_free_inner): Declare only if
-       THREADS.
-       * include/private/gc_priv.h (GC_debug_free_inner): Declare only if
-       THREADS and DBG_HDRS_ALL.
-       * include/private/gc_priv.h (GC_markers): Declare GC_markers only
-       if PARALLEL_MARK.
-       * include/private/gc_priv.h (GC_register_main_static_data): Move
-       the prototype to misc.c.
-       * mach_dep.c (GC_push_regs): Make STATIC; define only along with
-       HAVE_PUSH_REGS definition.
-       * mach_dep.c (GC_clear_stack_inner): Replace K&R-style function
-       definition with the ANSI C one.
-       * mark.c (GC_started_thread_while_stopped): Declared only if not
-       GNU C.
-       * win32_threads.c (GC_started_thread_while_stopped): Don't define
-       if GNU C.
-       * mark.c (GC_mark_from): Avoid unbalanced brackets in
-       #if-#else-#endif blocks.
-       * mark_rts.c (GC_is_static_root): Define only if not THREADS.
-       * os_dep.c (GC_get_stack_base): Make public (for OpenBSD).
-       * os_dep.c (GC_page_was_ever_dirty): Comment out the function
-       except for PROC_VDB.
-       * tests/test.c (main): Don't reference GC_print_obj,
-       GC_make_closure, GC_debug_invoke_finalizer,
-       GC_page_was_ever_dirty, GC_is_fresh (in GC_noop).
-       * thread_local_alloc.c: Don't include "gc_inline.h".
-       * win32_threads.c (GC_write_fault_handler): Declare only if
-       MPROTECT_VDB.
-
-2009-10-21  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (DEBUG): Remove macro (since unused).
-       * allchblk.c: Include private/gc_priv.h before other includes and
-       definitions.
-       * alloc.c: Ditto.
-       * gc_dlopen.c: Ditto.
-       * headers.c: Ditto.
-       * mallocx.c: Ditto.
-       * mark_rts.c: Ditto.
-       * new_hblk.c: Ditto.
-       * reclaim.c: Ditto.
-       * mark.c: Include private/gc_pmark.h before other includes.
-       * misc.c: Ditto.
-       * dyn_load.c (_GNU_SOURCE): Move the definition to gc_priv.h.
-       * pthread_support.c (_USING_POSIX4A_DRAFT10): Ditto.
-       * pthread_support.c (_POSIX4A_DRAFT10_SOURCE): Remove (since
-       already defined in gc_config_macros.h).
-       * dyn_load.c (GC_init_dyld): Remove parameter cast for
-       _dyld_register_func_for_add_image() and
-       _dyld_register_func_for_remove_image(); add the comment about
-       possible warnings; add FIXME for the deprecated
-       _dyld_bind_fully_image_containing_address().
-       * include/private/gc_priv.h: Include gc.h before the standard
-       headers inclusion.
-       * tests/test.c: Ditto.
-       * include/private/gcconfig.h (DebugBreak): Update the comment.
-       * typd_mlc.c (ED_INITIAL_SIZE): Remove ';'.
-       * alloc.c: Reformat the code (partly adjust indentation).
-       * backgraph.c: Ditto.
-       * blacklst.c: Ditto.
-       * checksums.c: Ditto.
-       * finalize.c: Ditto.
-       * gcj_mlc.c: Ditto.
-       * mach_dep.c: Ditto.
-       * mark_rts.c: Ditto.
-       * obj_map.c: Ditto.
-       * os_dep.c: Ditto.
-       * ptr_chck.c: Ditto.
-       * stubborn.c: Ditto.
-       * thread_local_alloc.c: Ditto.
-       * typd_mlc.c: Ditto.
-
-2009-10-20  Ivan Maidanski <ivmai@mail.ru> (really mostly OpenBSD contributors)
-
-       * configure.ac (openbsd): Define GC_OPENBSD_THREADS.
-       * configure.ac: Add AM_CONDITIONAL(OPENBSD_THREADS).
-       * configure.ac: Add sparc-openbsd case.
-       * doc/README.macros (GC_NETBSD_THREADS, GC_OPENBSD_THREADS):
-       Document.
-       * tests/test.c (main): Handle OpenBSD case.
-       * extra/threadlibs.c: Add the copyright header; expand all tabs to
-       spaces; remove trailing spaces at EOLn.
-       * include/private/pthread_stop_world.h: Ditto.
-       * extra/threadlibs.c (main): Replace K&R-style function definition
-       with the ANSI C one.
-       * extra/threadlibs.c (main): Handle GC_OPENBSD_THREADS case.
-       * dyn_load.c (OPENBSD): Recognize (similar to NETBSD).
-       * include/gc_config_macros.h (GC_SOLARIS_THREADS): Recognize;
-       define it for OpenBSD.
-       * include/gc_pthread_redirects.h (GC_pthread_sigmask,
-       pthread_sigmask): Don't declare and redefine for OpenBSD.
-       * include/private/gcconfig.h: Handle OpenBSD (on arm, sh, i386,
-       amd64, powerpc).
-       * mach_dep.c (NO_GETCONTEXT): Ditto.
-       * include/private/pthread_stop_world.h (thread_stop_info): Don't
-       define last_stop_count field if OpenBSD.
-       * misc.c (GC_init_dyld): Add declaration (if NetBSD).
-       * misc.c (GC_init): Don't call GC_init_netbsd_elf() for OpenBSD.
-       * os_dep.c (GC_init_netbsd_elf): Don't define for OpenBSD.
-       * os_dep.c (old_segv_act, GC_jmp_buf_openbsd): New static variable
-       (only if OpenBSD).
-       * os_dep.c (GC_fault_handler_openbsd, GC_find_limit_openbsd,
-       GC_skip_hole_openbsd): New static function (only if OpenBSD).
-       * os_dep.c (GC_get_stack_base, GC_get_main_stack_base,
-       GC_register_data_segments): Define specially for OpenBSD case.
-       * os_dep.c (GC_fault_handler_lock): Initialize to
-       AO_TS_INITIALIZER (instead of 0).
-       * pthread_support.c (GC_allocate_lock): Ditto.
-       * pthread_stop_world.c (NSIG, GC_print_sig_mask,
-       GC_remove_allowed_signals, suspend_handler_mask, GC_stop_count,
-       GC_world_is_stopped, GC_retry_signals, SIG_THR_RESTART,
-       GC_suspend_ack_sem, GC_suspend_handler_inner, GC_suspend_handler,
-       GC_restart_handler): Don't define and use if OpenBSD.
-       * pthread_stop_world.c (GC_suspend_all, GC_stop_world,
-       GC_start_world): Handle OpenBSD case.
-       * pthread_stop_world.c (GC_stop_init): Define as empty if OpenBSD.
-       * pthread_support.c (pthread_sigmask): Don't undefine the macro and
-       don't define the wrapper function if OpenBSD.
-       * pthread_support.c (GC_thr_init): Handle OpenBSD case.
-       * configure: Regenerate.
-       * include/private/config.h.in: Ditto.
-
-2009-10-20  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * dyn_load.c: Move the inclusion of private/gc_priv.h below
-       definition of a feature macro (_GNU_SOURCE).
-
-2009-10-20  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h (REVEAL_POINTER): Remove redundant parentheses.
-       * include/gc.h (GC_HIDE_POINTER, GC_REVEAL_POINTER): New macros
-       (only if GC_I_HIDE_POINTERS).
-       * backgraph.c (GET_OH_BG_PTR): Prefix REVEAL_POINTER() with "GC_".
-       * dbg_mlc.c (GC_get_back_ptr_info): Ditto.
-       * finalize.c (GC_grow_table, GC_dump_finalization, GC_finalize,
-       GC_enqueue_all_finalizers): Ditto.
-       * backgraph.c (SET_OH_BG_PTR): Prefix HIDE_POINTER() with "GC_".
-       * finalize.c (GC_general_register_disappearing_link,
-       GC_unregister_disappearing_link, GC_register_finalizer_inner,
-       GC_finalize): Ditto.
-       * include/private/dbg_mlc.h (HIDE_BACK_PTR): Ditto.
-       * include/private/dbg_mlc.h (GC_I_HIDE_POINTERS): Define instead
-       of I_HIDE_POINTERS.
-       * include/private/gc_priv.h (GC_I_HIDE_POINTERS): Ditto.
-       * include/gc.h (_GC_H): Strip leading underscore.
-       * include/gc_backptr.h (_GC_H): Ditto.
-       * include/gc_gcj.h (_GC_H): Ditto.
-       * include/gc_mark.h (_GC_H): Ditto.
-       * include/gc_typed.h (_GC_TYPED_H, _GC_H): Ditto.
-       * include/javaxfc.h (_GC_H): Ditto.
-       * include/new_gc_alloc.h (__GC_SPECIALIZE): Ditto.
-       * include/private/dbg_mlc.h (_GC_H): Ditto.
-       * include/private/gc_priv.h (_GC_H): Ditto.
-       * include/gc_backptr.h: Reformat the code (adjust indentation,
-       comment out function parameter names).
-       * include/gc_gcj.h: Ditto.
-       * include/gc_mark.h: Ditto.
-       * include/gc_typed.h: Ditto.
-       * include/javaxfc.h: Ditto.
-       * include/private/dbg_mlc.h: Ditto.
-       * include/private/gc_priv.h: Ditto.
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * gc_cpp.cc: Include "gc_cpp.h" instead of <gc_cpp.h>.
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (GC_INNER): New macro (for GC-scope
-       variable definitions).
-       * include/private/gc_priv.h (GC_EXTERN): Update the comment.
-       * allchblk.c (GC_unmap_threshold): Define as GC_INNER.
-       * alloc.c (GC_incremental, GC_world_stopped, GC_n_heap_sects,
-       GC_n_memory, GC_fail_count): Ditto.
-       * blacklst.c (GC_black_list_spacing, GC_print_heap_obj): Ditto.
-       * gcj_mlc.c (GC_gcj_malloc_initialized, GC_gcjobjfreelist): Ditto.
-       * mach_dep.c (GC_save_regs_ret_val): Ditto.
-       * mark.c (GC_n_mark_procs, GC_obj_kinds, GC_n_kinds,
-       GC_mark_stack, GC_mark_stack_limit, GC_mark_stack_size,
-       GC_mark_stack_top, GC_mark_state, GC_mark_stack_too_small,
-       GC_mark_no, GC_markers): Ditto.
-       * mark_rts.c (GC_root_size, GC_push_typed_structures): Ditto.
-       * misc.c (GC_allocate_ml, GC_debugging_started, GC_check_heap,
-       GC_print_all_smashed, GC_print_back_height, GC_dump_regularly,
-       GC_backtraces, GC_force_unmap_on_gcollect,
-       GC_large_alloc_warn_interval, GC_is_initialized, GC_write_cs,
-       GC_current_warn_proc, GC_blocked_sp, GC_activation_frame): Ditto.
-       * os_dep.c (GC_page_size, GC_dont_query_stack_min,
-       GC_no_win32_dlls, GC_wnt, GC_sysinfo, GC_push_other_roots,
-       GC_dirty_maintained, GC_fault_handler_lock): Ditto.
-       * pthread_support.c (GC_allocate_ml, GC_lock_holder,
-       GC_need_to_lock, GC_thr_initialized, GC_threads,
-       GC_in_thread_creation, GC_collecting, GC_allocate_lock,
-       GC_mark_lock_holder): Ditto.
-       * reclaim.c (GC_bytes_found, GC_fl_builder_count, GC_have_errors):
-       Ditto.
-       * win32_threads.c (GC_allocate_ml, GC_lock_holder,
-       GC_need_to_lock, GC_mark_lock_holder, GC_collecting): Ditto.
-       * extra/gc.c (GC_INNER, GC_EXTERN): Define as STATIC.
-       * mach_dep.c (GC_with_callee_saves_pushed): Remove redundant {}.
-       * os_dep.c (GC_init_win32): Reformat the comment.
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (GC_bytes_allocd, GC_objfreelist,
-       GC_aobjfreelist): Replace GC_EXTERN to extern for SEPARATE_GLOBALS
-       case (since they are not defined inside GC at present).
-       * include/private/gc_priv.h (GC_objects_are_marked): Remove the
-       declaration (since made static).
-       * mark.c (GC_objects_are_marked): Define as STATIC.
-       * win32_threads.c (GC_thr_initialized, GC_in_thread_creation):
-       Ditto.
-       * mark.c (GC_N_KINDS_INITIAL_VALUE): New macro (defined and used
-       to initialize GC_n_kinds).
-       * win32_threads.c (start_mark_threads): Adjust the comment.
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_notify_full_gc): Use GC_INLINE for a tiny static
-       function.
-       * backgraph.c (pop_in_progress, GC_apply_to_each_object): Ditto.
-       * mark_rts.c (add_roots_to_index): Ditto.
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * extra/gc.c: New file.
-       * Makefile.am (EXTRA_DIST): Add "extra/gc.c".
-       * configure: Regenerate.
-       * Makefile.in: Ditto.
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * misc.c (GC_log): Remove the declaration; move the definition (to
-       the place where it is used); make STATIC.
-       * misc.c (GC_init): Use GC_err_printf() instead of GC_log_printf()
-       to print open log failure.
-       * misc.c (GC_write): Don't abort on open log failure if the GC is
-       compiled with GC_PRINT_VERBOSE_STATS (useful for WinCE).
-
-2009-10-19  Ivan Maidanski <ivmai@mail.ru> (really Andreas Tobler)
-
-       * include/private/gcconfig.h (USE_MMAP): Guard with ifndef.
-
-2009-10-18  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_fail_count, GC_large_alloc_warn_interval): Move
-       the variable declaration to gc_priv.h.
-       * alloc.c (GC_bytes_found, GC_unmap_threshold,
-       GC_force_unmap_on_gcollect): Ditto.
-       * dyn_load.c (GC_no_win32_dlls, GC_wnt): Ditto.
-       * finalize.c (GC_fail_count): Ditto.
-       * include/private/gc_locks.h (GC_allocate_ml, GC_lock_holder,
-       GC_collecting, GC_mark_lock_holder, GC_need_to_lock): Ditto.
-       * include/private/gc_pmark.h (GC_n_mark_procs, GC_mark_stack_size,
-       GC_mark_stack_limit, GC_mark_stack_top, GC_mark_stack,
-       GC_mark_stack_too_small, GC_mark_state): Ditto.
-       * include/private/pthread_support.h (GC_threads,
-       GC_thr_initialized, GC_in_thread_creation): Ditto.
-       * mallocx.c (GC_bytes_found): Ditto.
-       * mark_rts.c (GC_save_regs_ret_val, GC_world_stopped): Ditto.
-       * misc.c (GC_unmap_threshold): Ditto.
-       * os_dep.c (GC_unmap_threshold): Ditto.
-       * pthread_support.c (GC_markers): Ditto.
-       * thread_local_alloc.c (GC_gcjobjfreelist,
-       GC_gcj_malloc_initialized, GC_gcj_kind): Ditto.
-       * win32_threads.c (GC_fault_handler_lock, GC_write_cs,
-       GC_dont_query_stack_min, GC_markers, GC_wnt): Ditto.
-       * include/private/gc_priv.h (GC_EXTERN): New macro (used mostly as
-       a tag for now); defined after "gcconfig.h" inclusion.
-       * include/private/gc_priv.h: Use GC_EXTERN instead of "extern"
-       keyword for most global variables.
-       * alloc.c (GC_copyright): Add the comment about the symbol
-       visibility.
-       * finalize.c (GC_fo_entries): Ditto.
-       * include/private/gc_priv.h (GC_print_stats): Ditto.
-       * misc.c (GC_quiet): Ditto.
-       * mallocx.c (GC_bytes_allocd_tmp): Make the volatile variable
-       STATIC.
-       * pthread_support.c (GC_threads): Add explicit zero initializer
-       (to make the variable definition differ from the declaration).
-
-2009-10-18  Ivan Maidanski <ivmai@mail.ru>
-
-       * backgraph.c (GC_quiet): Remove the declaration (not needed
-       anymore since gc_priv.h is always included).
-       * checksums.c (GC_quiet): Ditto.
-       * gcj_mlc.c (GC_quiet): Ditto.
-       * headers.c (GC_hdr_cache_hits, GC_hdr_cache_misses): Add the
-       comment.
-       * include/private/gc_hdrs.h (GC_hdr_cache_hits,
-       GC_hdr_cache_misses): Ditto.
-       * mark.c (GC_first_nonempty): Make the volatile variable STATIC.
-       * pthread_stop_world.c (GC_stop_count, GC_world_is_stopped):
-       Ditto.
-       * win32_threads.c (GC_please_stop, GC_max_thread_index,
-       GC_mark_mutex_waitcnt): Ditto.
-
-2009-10-18  Ivan Maidanski <ivmai@mail.ru>
-
-       * pthread_support.c (GC_USE_LD_WRAP): Fix a typo (swapped 'L' and
-       'D') in the name.
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * gc_dlopen.c (GC_MUST_RESTORE_REDEFINED_DLOPEN): Define if dlopen
-       redirection is turned off; turn it on later when dlopen real
-       symbol is no longer needed (according to the comment and the same
-       as in dyn_load.c).
-       * gc_dlopen.c (WRAP_FUNC, REAL_FUNC): Rename to WRAP_DLFUNC and
-       REAL_DLFUNC, respectively (to have unique names since the
-       definitions may differ from that of the similar ones in
-       pthread_support.c).
-       * mark.c (source): Undefine the macro when no longer needed.
-       * os_dep.c (handler): Rename the type to GC_fault_handler_t (to
-       have the unique name across the project).
-       * os_dep.c (STAT_BUF_SIZE, STAT_READ); Guard with ifndef; add the
-       comment.
-       * pthread_support.c (STAT_BUF_SIZE, STAT_READ): Ditto.
-       * os_dep.c (sbrk): Undo sbrk() redirection (for ECOS) when no
-       longer needed.
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * pthread_stop_world.c (pthread_sigmask): Undefine before using
-       in GC_print_sig_mask() (only if DEBUG_THREADS); add the comment.
-       * win32_threads.c (dlopen, _beginthread): Don't undefine (since
-       neither redirected nor used here).
-       * win32_threads.c (GC_Thread_Rep): Rename "table_management" to
-       "tm" for short; remove "tm_" prefix.
-       * win32_threads.c (in_use, next): Don't define the macros; use
-       tm.in_use and tm.next fields, respectively (to ease debugging).
-       * win32_threads.c (HASH): Rename to PTHREAD_MAP_HASH (to have
-       unique name across the project).
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_priv.h (I_HIDE_POINTERS): Define before gc.h
-       inclusion.
-       * include/private/gc_pmark.h (I_HIDE_POINTERS): Define if gc.h is
-       not included yet.
-       * finalize.c (I_HIDE_POINTERS): Don't define.
-       * include/private/dbg_mlc.h (I_HIDE_POINTERS): Ditto.
-       * misc.c (I_HIDE_POINTERS): Ditto.
-       * include/private/dbg_mlc.h (HIDE_POINTER, REVEAL_POINTER,
-       GC_hidden_pointer): Don't define if HIDE_POINTER is undefined.
-       * include/private/gc_pmark.h: Remove the comment about gc_priv.h
-       inclusion order.
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c: Include gc_priv.h before using configuration
-       information (MACOS).
-       * dyn_load.c (GC_must_restore_redefined_dlopen): Rename to
-       GC_MUST_RESTORE_REDEFINED_DLOPEN.
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * backgraph.c (SET_OH_BG_PTR): Place outermost parenthesis
-       properly.
-       * darwin_stop_world.c: Replace "if DEBUG_THREADS" with
-       "ifdef DEBUG_THREADS".
-       * pthread_stop_world.c: Ditto.
-       * pthread_support.c: Ditto.
-       * include/gc_inline.h: Guard with GC_INLINE_H.
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_copyright): Define as const.
-       * alloc.c (GC_collect_at_heapsize): Replace "static" with "STATIC"
-       (since the name starts with "GC_" prefix).
-       * dbg_mlc.c (GC_describe_type_fns): Ditto.
-       * dyn_load.c (GC_FirstDLOpenedLinkMap,
-       GC_register_dynlib_callback, GC_dyld_sections,
-       GC_dyld_name_for_hdr, GC_dyld_image_add, GC_dyld_image_remove):
-       Ditto.
-       * malloc.c (GC_libpthread_start, GC_libpthread_end,
-       GC_libld_start, GC_libld_end): Ditto.
-       * mark_rts.c (GC_remove_root_at_pos, GC_rebuild_root_index):
-       Ditto.
-       * os_dep.c (GC_gww_read_dirty, GC_gww_page_was_dirty,
-       GC_gww_page_was_ever_dirty, GC_mprotect_thread_notify,
-       GC_mprotect_thread_reply, GC_mprotect_thread, GC_darwin_sigbus,
-       GC_forward_exception): Ditto.
-       * pthread_support.c (GC_syms_initialized): Ditto.
-       * typd_mlc.c (GC_push_typed_structures_proc): Ditto.
-       * win32_threads.c (GC_win32_dll_threads,
-       GC_register_my_thread_inner, GC_lookup_pthread, GC_get_stack_min,
-       GC_waitForSingleObjectInfinite): Ditto.
-       * darwin_stop_world.c (GC_use_mach_handler_thread,
-       GC_use_mach_handler_thread, GC_mach_threads_count): Replace
-       "static" with "STATIC" and add zero initializer.
-       * os_dep.c (GC_task_self, GC_ports, GC_mprotect_state,
-       GC_sigbus_count): Ditto.
-       * headers.c (free_hdr): Replace "static" with GC_INLINE.
-       * misc.c (GC_tmp): Rename static variable to fwrite_gc_res.
-       * os_dep.c (memory): Rename static variable to ecos_gc_memory.
-       * os_dep.c (async_set_pht_entry_from_index): Make static (for
-       MPROTECT_VDB case).
-       * pthread_support.c (GC_real_pthread_create,
-       GC_real_pthread_sigmask, GC_real_pthread_join,
-       GC_real_pthread_detach, GC_init_real_syms): Use REAL_FUNC() macro
-       for static GC_real_XXX symbols.
-       * win32_threads.c (GC_may_be_in_stack): Remove "GC_" prefix.
-
-2009-10-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_never_stop_func, GC_check_fl_marks,
-       GC_finish_collection): Reformat the code (make opening bracket
-       style uniform across the file).
-       * allchblk.c (GC_allochblk): Ditto.
-       * backgraph.c (add_edge): Ditto.
-       * dbg_mlc.c (GC_marked_for_finalization): Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries, GC_init_dyld): Ditto.
-       * finalize.c (GC_null_finalize_mark_proc): Ditto.
-       * gc_dlopen.c (GC_dlopen): Ditto.
-       * mark.c (GC_push_marked1, GC_push_marked2, GC_push_marked4):
-       Ditto.
-       * misc.c (looping_handler, GC_call_with_gc_active,
-       GC_do_blocking_inner, GC_do_blocking): Ditto.
-       * os_dep.c (GC_get_main_stack_base, GC_read_dirty): Ditto.
-       * pthread_support.c (GC_pthread_create, GC_pthread_sigmask,
-       GC_pthread_join, GC_pthread_detach, GC_check_tls,
-       GC_do_blocking_inner, GC_call_with_gc_active): Ditto.
-       * reclaim.c (GC_reclaim_clear, GC_reclaim_block,
-       GC_print_free_list): Ditto.
-       * os_dep.c (GC_page_was_dirty, GC_page_was_ever_dirty,
-       GC_remove_protection): Reformat the code (wrap long lines).
-
-2009-10-16  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_finish_collection): Replace getenv() with GETENV().
-       * dyn_load.c (GC_init_dyld): Ditto.
-       * os_dep.c (GC_print_callers): Ditto.
-       * dyn_load.c (GC_dyld_name_for_hdr): Cast _dyld_get_image_name()
-       result (since it's always of "struct mach_header" type).
-       * dyn_load.c (GC_init_dyld): Cast GC_dyld_image_add and
-       GC_dyld_image_remove (to always have the first argument of
-       "struct mach_header" pointer type).
-
-2009-10-16  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * configure.ac: Add threads support for OpenBSD case (threads may
-       not work correctly for it).
-       * configure: Regenerate.
-
-2009-10-15  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * acinclude.m4: Rename to m4/gc_set_version.m4.
-       * aclocal.m4: Regenerate.
-       * configure: Ditto.
-       * Makefile.in: Ditto.
-       * m4/libtool.m4: Delete the file.
-       * m4/lt~obsolete.m4: Ditto.
-       * m4/ltoptions.m4: Ditto.
-       * m4/ltsugar.m4: Ditto.
-       * m4/ltversion.m4: Ditto.
-
-2009-10-15  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gcconfig.h: Define DebugBreak() as _exit(-1) for
-       x86mingw32ce toolchain to workaround the incorrect DebugBreak()
-       declaration in winbase.h (the workaround would turn into a no-op
-       when DebugBreak() will be defined as a macro in the toolchain).
-
-2009-10-15  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gcconfig.h: Recognize __i386__ if WinCE (for
-       x86mingw32ce toolchain).
-       * include/private/gcconfig.h (NO_GETENV): Don't define for CeGCC
-       toolchain (or if already defined).
-       * include/private/gcconfig.h (NO_GETENV_WIN32): New macro (always
-       defined for WinCE or if NO_GETENV is defined).
-       * misc.c (GC_CreateLogFile): Use NO_GETENV_WIN32 macro instead of
-       NO_GETENV one.
-
-2009-10-15  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * configure.ac: Add AC_CONFIG_MACRO_DIR([m4]).
-       * Makefile.am: Add "ACLOCAL_AMFLAGS = -I m4".
-       * libtool.m4: Remove.
-       * aclocal.m4: Regenerate.
-       * configure: Ditto.
-       * Makefile.in: Ditto.
-       * m4/libtool.m4: New file (generated).
-       * m4/lt~obsolete.m4: Ditto.
-       * m4/ltoptions.m4: Ditto.
-       * m4/ltsugar.m4: Ditto.
-       * m4/ltversion.m4: Ditto.
-
-2009-10-10  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h (GC_UNDERSCORE_STDCALL): Recognize new macro;
-       prefix GC_CreateThread and GC_ExitThread with '_' if defined.
-       * doc/README.macros (GC_UNDERSCORE_STDCALL): Document.
-
-2009-10-09  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_collect_or_expand): Add "retry" argument; add the
-       comments; don't use "default" stop_func on a retry if
-       GC_dont_expand.
-       * alloc.c (GC_collect_or_expand): Reformat the code (make the
-       indentation style uniform across the function).
-       * alloc.c (GC_allocobj): Pass "retry" argument to
-       GC_collect_or_expand().
-       * malloc.c (GC_alloc_large): Ditto.
-       * include/private/gc_priv.h (GC_collect_or_expand): Move the
-       declaration to malloc.c; add "retry" argument.
-
-2009-10-09  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_start_call_back): Move the variable definition from
-       misc.c.
-       * include/private/gc_priv.h (GC_start_call_back): Remove the
-       declaration.
-       * alloc.c (GC_notify_full_gc): Remove unnecessary cast of 0.
-       * alloc.c (GC_try_to_collect_inner): Also call stop_func at the
-       beginning of the function.
-       * include/gc.h (GC_try_to_collect): Refine the comment about
-       stop_func.
-
-2009-10-08  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_default_stop_func, GC_try_to_collect_general,
-       GC_gcollect): Add the comment.
-       * alloc.c (GC_try_to_collect_general): Move the assertion on
-       stop_func != 0 to GC_try_to_collect().
-       * alloc.c (GC_try_to_collect_general): If stop_func == 0 then use
-       GC_default_stop_func instead (holding the lock).
-       * alloc.c (GC_gcollect): Pass 0 as stop_func instead of
-       GC_default_stop_func (to prevent data races).
-
-2009-10-08  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.direct: Move "define arguments" documentation to
-       doc/README.macros; add reference to doc/README.macros.
-       * Makefile.dj: Change the documentation reference to
-       doc/README.macros.
-       * README.QUICK: Ditto.
-       * configure.ac: Ditto.
-       * allchblk.c: Remove unnecessary "-D" from the comment.
-       * doc/README.macros: Ditto.
-       * README.environment: Ditto.
-       * include/gc.h: Ditto.
-       * include/gc_inline.h: Ditto.
-       * include/private/gcconfig.h: Ditto.
-       * README.QUICK: Fix a typo.
-       * README.QUICK: Expand all tabs to spaces.
-       * configure: Regenerate.
-       * include/private/config.h.in: Ditto.
-
-2009-10-07  Ivan Maidanski <ivmai@mail.ru>
-
-       * misc.c (GC_CreateLogFile): Use FILE_ATTRIBUTE_NORMAL for
-       CreateFile(); don't immediately flush every write if very verbose.
-
-2009-10-07  Ivan Maidanski <ivmai@mail.ru>
-
-       * doc/README.win32: Replace ".exe.log" to ".gc.log".
-       * doc/README.win64: Ditto.
-       * doc/README.win64: Fix a typo.
-       * misc.c (GC_CreateLogFile): Strip executable file extension for
-       the log file; use ".gc.log" extension (instead of ".log").
-
-2009-10-07  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_config_macros.h: Avoid the redefinition of
-       GC_xxx_THREADS macros.
-
-2009-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_try_to_collect_general): Change the type of "result"
-       local variable to GC_bool.
-
-2009-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_config_macros.h: Use old behavior for FreeBSD and
-       NetBSD platform detection code (check that other GC_xxx_THREADS
-       are undefined); add FIXME.
-
-2009-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc_config_macros.h: Rearrange the platform detection
-       code (GC_WIN32_PTHREADS implies GC_WIN32_THREADS; define
-       GC_THREADS first if GC_XXX_THREADS already set; define proper
-       GC_XXX_THREADS if GC_THREADS; define GC_PTHREADS in a single
-       place; define _REENTRANT if posix threads except for Win32).
-       * include/gc_config_macros.h: Reformat the code (make the
-       indentation style uniform across the file).
-
-2009-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_try_to_collect_general): New function (move the code
-       from GC_try_to_collect, pass force_unmap argument).
-       * alloc.c (GC_try_to_collect, GC_gcollect): Call
-       GC_try_to_collect_general().
-       * alloc.c (GC_gcollect_and_unmap): New public function.
-       * include/gc.h (GC_gcollect_and_unmap): New function declaration.
-       * tests/test.c (window_proc): Call GC_gcollect_and_unmap() on
-       WM_HIBERNATE event (instead of GC_set_force_unmap_on_gcollect()
-       and GC_gcollect()).
-
-2009-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h (GC_allow_register_threads, GC_register_my_thread,
-       GC_unregister_my_thread, GC_malloc_many): Refine the comment.
-       * include/gc.h (GC_malloc_many, GC_NEXT): Declare unconditionally
-       (that is, don't depend on GC_THREADS macro).
-       * include/gc.h: Don't check for __CYGWIN32__ and __CYGWIN__ along
-       with a check for GC_PTHREADS (since the former implies the
-       latter).
-
-2009-10-06  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h: Reformat the code (make the indentation style
-       uniform across the file).
-       * include/gc.h (GC_SOLARIS_THREADS): Don't check for.
-       * include/gc.h (GC_MIN, GC_MAX): Don't define.
-       * mallocx.c (GC_malloc_many): Add comment to #endif.
-
-2009-10-02  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * configure.ac: Drop the subdir-objects Automake option, since
-       it's incompatible with picking source files from libatomic_ops.
-       * Makefile.in: Regenerate.
-
-2009-10-01  Ivan Maidanski <ivmai@mail.ru> (really mostly Andreas Tobler)
-
-       * allchblk.c (GC_fail_count, GC_large_alloc_warn_interval): Add
-       "extern" keyword to a global variable declaration (some compilers
-       require it).
-       * alloc.c (GC_bytes_found, GC_unmap_threshold,
-       GC_force_unmap_on_gcollect): Ditto.
-       * dyn_load.c (GC_no_win32_dlls, GC_wnt): Ditto.
-       * finalize.c (GC_fail_count): Ditto.
-       * include/private/gc_hdrs.h (GC_hdr_cache_hits,
-       GC_hdr_cache_misses): Ditto.
-       * mallocx.c (GC_bytes_found): Ditto.
-       * mark_rts.c (GC_save_regs_ret_val, GC_world_stopped): Ditto.
-       * misc.c (GC_unmap_threshold): Ditto.
-       * os_dep.c (GC_unmap_threshold, GC_old_allocator): Ditto.
-       * pthread_support.c (GC_markers): Ditto.
-       * thread_local_alloc.c (GC_gcjobjfreelist,
-       GC_gcj_malloc_initialized, GC_gcj_kind): Ditto.
-       * win32_threads.c (GC_fault_handler_lock, GC_write_cs,
-       GC_dont_query_stack_min, GC_markers, GC_wnt): Ditto.
-
-2009-10-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.in: Regenerate (by autoreconf -vif, deleting libtool.m4
-       first and using libtool-2.2, automake-1.10.2, autoconf-2.64).
-       * aclocal.m4: Ditto.
-       * config.guess: Ditto.
-       * config.sub: Ditto.
-       * configure: Ditto.
-       * depcomp: Ditto.
-       * install-sh: Ditto.
-       * ltmain.sh: Ditto.
-       * missing: Ditto.
-       * mkinstalldirs: Ditto.
-       * include/private/config.h.in: Ditto.
-
-2009-10-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * tests/huge_test.c: Define GC_IGNORE_WARN (if not defined) to
-       suppress misleading GC "Out of Memory!" warning printed on every
-       GC_MALLOC(LONG_MAX) call.
-       * tests/huge_test.c: Include "gc.h" instead of <gc.h>.
-       * tests/huge_test.c (main): Replace K&R-style function definition
-       with the ANSI C one.
-       * tests/huge_test.c: Expand all tabs to spaces.
-
-2009-10-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (GC_register_dynamic_libraries): Always use
-       lpMaximumApplicationAddress value for WinCE (even for old
-       versions).
-       * os_dep.c (VER_PLATFORM_WIN32_CE): Define if not in winbase.h.
-       * os_dep.c (GC_dont_query_stack_min): New global variable (only if
-       WinCE and THREADS).
-       * os_dep.c (GC_setpagesize): Adjust lpMaximumApplicationAddress
-       for WinCE (prior to version 6) if not _WIN32_WCE_EMULATION; set
-       GC_dont_query_stack_min for older WinCE (prior to version 5).
-       * win32_threads.c (GC_dont_query_stack_min): Declare.
-       * win32_threads.c (GC_get_stack_min): Rename the macro to
-       GC_wince_evaluate_stack_min for WinCE; update the comment.
-       * win32_threads.c (GC_push_stack_for, GC_get_next_stack): Use
-       GC_wince_evaluate_stack_min() instead of GC_get_stack_min() for
-       WinCE and don't update thread's last_stack_min value (only if
-       GC_dont_query_stack_min).
-       * win32_threads.c (GC_push_stack_for): Skip assertion for WinCE if
-       GC_dont_query_stack_min (since the evaluated stack_min value may
-       be incorrect if the stack is bigger than 64 KiB).
-
-2009-10-01  Ivan Maidanski <ivmai@mail.ru>
-
-       * gc_dlopen.c (GC_dlopen): Add function redirector (only if
-       GC_USE_LD_WRAP).
-       * include/gc.h: Include "gc_pthread_redirects.h" even if
-       GC_USE_LD_WRAP or GC_NO_THREAD_REDIRECTS.
-       * include/gc_pthread_redirects.h (GC_PTHREAD_REDIRECTS_H): Don't
-       define and check for (since included only from gc.h).
-       * include/gc_pthread_redirects.h: Declare "GC_" symbols even if
-       GC_USE_LD_WRAP or GC_NO_THREAD_REDIRECTS.
-       * include/gc_pthread_redirects.h: Include signal.h only to get
-       sigset_t definition.
-
-2009-09-30  Ivan Maidanski <ivmai@mail.ru>
-
-       * configure: Regenerate (by autoreconf -vif, deleting libtool.m4
-       first).
-       * Makefile.in: Ditto.
-       * aclocal.m4: Ditto.
-       * include/private/config.h.in: Ditto.
-
-2009-09-30  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.direct: Remove trailing spaces at EOLn.
-       * Makefile.direct: Document GC_REGISTER_MEM_PRIVATE.
-       * mark_rts.c (GC_is_tmp_root): Define also for WinCE unless
-       NO_DEBUGGING (that is, replace _WIN32_WCE_EMULATION with MSWINCE).
-       * os_dep.c (GC_sysinfo): Remove explicit global variable
-       initialization to "{0}" (revert back the previous change) since it
-       might produce a warning.
-
-2009-09-30  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_large_alloc_warn_interval): Move declaration from
-       gc_priv.h.
-       * allchblk.c (GC_large_alloc_warn_suppressed): Move definition
-       from misc.c; define as STATIC.
-       * include/private/gc_priv.h (GC_large_alloc_warn_interval,
-       GC_large_alloc_warn_suppressed): Remove declaration.
-       * alloc.c (GC_bytes_found): Add "defined in" comment.
-       * mallocx.c (GC_bytes_found): Ditto.
-       * misc.c (GC_unmap_threshold): Ditto.
-       * os_dep.c (GC_old_allocator): Ditto.
-       * pthread_support.c (GC_markers): Ditto.
-       * thread_local_alloc.c (GC_gcjobjfreelist,
-       GC_gcj_malloc_initialized, GC_gcj_kind): Ditto.
-       * win32_threads.c (GC_markers): Ditto.
-       * alloc.c (GC_start_time): Explicitly initialize to 0 or NULL (to
-       be distinctive from a variable declaration).
-       * backgraph.c (GC_max_height, GC_deepest_obj): Ditto.
-       * blacklst.c (GC_old_normal_bl, GC_incomplete_normal_bl,
-       GC_old_stack_bl, GC_incomplete_stack_bl): Ditto.
-       * checksums.c (GC_faulted, GC_n_dirty_errors,
-       GC_n_faulted_dirty_errors, GC_n_changed_errors, GC_n_clean,
-       GC_n_dirty, GC_bytes_in_used_blocks): Ditto.
-       * dbg_mlc.c (GC_smashed): Ditto.
-       * finalize.c (GC_old_dl_entries): Ditto.
-       * gcj_mlc.c (GC_gcj_kind, GC_gcj_debug_kind, GC_gcjobjfreelist,
-       GC_gcjdebugobjfreelist): Ditto.
-       * mach_dep.c (GC_save_regs_ret_val): Ditto.
-       * mark.c (GC_n_rescuing_pages, GC_mark_stack, GC_mark_stack_limit,
-       GC_mark_stack_top): Ditto.
-       * misc.c (GC_min_sp, GC_high_water, GC_bytes_allocd_at_reset):
-       Ditto.
-       * os_dep.c (GC_data_start, GC_page_size, GC_sysinfo,
-       GC_old_segv_handler, GC_old_bus_handler,
-       GC_old_bus_handler_used_si, GC_old_segv_handler_used_si,
-       GC_proc_buf, GC_proc_fd, GC_vd_base): Ditto.
-       * pthread_stop_world.c (GC_stop_count, GC_stopping_pid): Ditto.
-       * reclaim.c (GC_leaked): Ditto.
-       * typd_mlc.c (GC_explicit_kind, GC_array_kind, GC_ext_descriptors,
-       GC_typed_mark_proc_index, GC_array_mark_proc_index,
-       GC_eobjfreelist, GC_arobjfreelist): Ditto.
-       * win32_threads.c (GC_pthread_map_cache, GC_marker_cv,
-       GC_marker_Id): Ditto.
-       * dbg_mlc.c (GC_smashed, GC_n_smashed): Define as STATIC.
-       * gcj_mlc.c (GC_gcjdebugobjfreelist): Ditto.
-       * os_dep.c (GC_vd_base): Ditto.
-       * pthread_support.c (GC_mark_threads): Ditto.
-       * reclaim.c (GC_leaked): Ditto.
-       * typd_mlc.c (GC_bm_table): Ditto.
-       * mark_rts.c (GC_save_regs_ret_val): Change declaration type to
-       that of definition; add "defined in" comment.
-       * mark_rts.c (GC_push_current_stack): Remove unnecessary cast for
-       GC_save_regs_ret_val.
-       * misc.c (GC_check_heap, GC_print_all_smashed,
-       GC_start_call_back): Remove unnecessary cast (of 0).
-       * misc.c (GC_LARGE_ALLOC_WARN_INTERVAL): New tuning macro.
-       * misc.c (GC_large_alloc_warn_interval): Initialize to
-       GC_LARGE_ALLOC_WARN_INTERVAL value.
-       * misc.c (GC_tmp): Change to "static".
-       * os_dep.c (GC_setpagesize): Reformat the code (collapse multiple
-       function definitions).
-       * os_dep.c (GC_mprotect_state): Define as static.
-       * pthread_support.c (dummy_thread_local): Prefix with "GC_".
-       * win32_threads.c (WinMain): Remove FIXME for WinCE.
-
-2009-09-30  Ivan Maidanski <ivmai@mail.ru> (really Hans Boehm)
-
-       * os_dep.c (PROTECT, UNPROTECT): Use distinct ABORT messages.
-
-2009-09-30  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * configure.ac: Rewrite the tests for external or internal
-       libatomic_ops.
-       * configure.ac: In particular, drop the symbolic links. Add option
-       --with-libatomic-ops for forced selection.
-       * Makefile.am: Adjust the path of source files from libatomic_ops
-       to not use the links.
-       * Makefile.am (libgc_la_LIBADD): Add $(ATOMIC_OPS_LIBS). This will
-       be empty if we use the bundled AO sources.
-       * configure: Regenerate.
-       * Makefile.in: Ditto.
-
-2009-09-29  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.am: Strip version suffix for libatomic_ops directory.
-       * build_atomic_ops.sh: Ditto.
-       * build_atomic_ops.sh.cygwin: Ditto.
-       * configure_atomic_ops.sh: Ditto.
-       * Makefile.direct: Remove AO_VERSION definition; strip version
-       suffix for libatomic_ops directory.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * gc.mak: Ditto.
-       * Makefile.in: Regenerate.
-
-2009-09-29  Ivan Maidanski <ivmai@mail.ru>
-
-       * libatomic_ops: Rename from "libatomic_ops-1.2".
-
-2009-09-28  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_version): Add "const" keyword.
-       * alloc.c (GC_get_version): New public function.
-       * include/gc.h (GC_get_version): New function declaration; update
-       the comment for the GC version.
-
-2009-09-27  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_locks.h (GC_allocate_ml, GC_lock_holder,
-       GC_collecting, GC_mark_lock_holder, GC_need_to_lock): Use "extern"
-       (for the global variable declaration) again.
-       * include/private/gc_pmark.h (GC_n_mark_procs, GC_mark_stack_size,
-       GC_mark_stack_limit, GC_mark_stack_top, GC_mark_stack,
-       GC_mark_stack_too_small, GC_mark_state): Ditto.
-       * include/private/gcconfig.h (GC_register_stackbottom): Ditto.
-       * include/private/pthread_support.h (GC_threads,
-       GC_thr_initialized, GC_in_thread_creation): Ditto.
-       * include/private/gc_priv.h: Ditto (for all global variables).
-
-2009-09-27  Ivan Maidanski <ivmai@mail.ru>
-
-       * real_malloc.c: Include private/config.h if HAVE_CONFIG_H.
-
-2009-09-27  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_hblkfreelist): Define as STATIC.
-       * blacklst.c (GC_total_stack_black_listed): Ditto.
-       * include/private/gc_priv.h (GC_hblkfreelist, GC_stopped_mark,
-       GC_total_stack_black_listed, GC_push_stubborn_structures): Remove
-       declaration.
-       * mark_rts.c (GC_stopped_mark): Add declaration (only if
-       THREAD_LOCAL_ALLOC).
-       * allchblk.c (GC_fail_count): Move the declaration out of
-       GC_allochblk_nth(); remove "extern".
-       * alloc.c (IF_THREADS): Remove unused macro.
-       * alloc.c (GC_world_stopped): Define only if THREAD_LOCAL_ALLOC.
-       * alloc.c (GC_stopped_mark): Set GC_world_stopped value only if
-       THREAD_LOCAL_ALLOC.
-       * alloc.c (GC_bytes_found, GC_collection_in_progress,
-       GC_check_tls, GC_unmap_threshold, GC_force_unmap_on_gcollect):
-       Remove K&R-style "extern" for the declaration.
-       * dbg_mlc.c (GC_free_inner): Ditto.
-       * dyn_load.c (GC_repeat_read, GC_roots_present, GC_is_heap_base,
-       GC_get_next_stack, GC_no_win32_dlls, GC_wnt): Ditto.
-       * finalize.c (GC_fail_count): Ditto.
-       * include/private/gc_hdrs.h (GC_hdr_cache_hits,
-       GC_hdr_cache_misses): Ditto.
-       * include/private/gc_locks.h (GC_allocate_ml, GC_lock_holder,
-       GC_lock, GC_collecting, GC_mark_lock_holder, GC_need_to_lock):
-       Ditto.
-       * include/private/gc_pmark.h (GC_mark_procs, GC_n_mark_procs,
-       GC_mark_stack_size, GC_mark_stack_limit, GC_mark_stack_top,
-       GC_mark_stack, GC_mark_stack_too_small, GC_mark_state): Ditto.
-       * include/private/gc_priv.h (GC_current_warn_proc, GC_obj_kinds,
-       GC_n_kinds, GC_fo_entries, GC_n_heap_sects, GC_n_memory,
-       GC_page_size, GC_sysinfo, GC_black_list_spacing,
-       GC_objects_are_marked, GC_incremental, GC_dirty_maintained,
-       GC_root_size, GC_debugging_started, GC_large_alloc_warn_interval,
-       GC_large_alloc_warn_suppressed, GC_blocked_sp,
-       GC_activation_frame, GC_push_other_roots,
-       GC_push_finalizer_structures, GC_push_thread_structures,
-       GC_push_typed_structures, GC_start_call_back, GC_is_initialized,
-       GC_check_heap, GC_print_all_smashed, GC_print_all_errors,
-       GC_print_heap_obj, GC_have_errors, GC_print_stats,
-       GC_dump_regularly, GC_backtraces, GC_print_back_height,
-       GC_debug_generic_malloc_inner,
-       GC_debug_generic_malloc_inner_ignore_off_page,
-       GC_fl_builder_count, GC_mark_no, GC_help_marker,
-       GC_setup_temporary_fault_handler, GC_reset_fault_handler): Ditto.
-       * include/private/gcconfig.h (GC_SysVGetDataStart,
-       GC_FreeBSDGetDataStart, GC_register_stackbottom,
-       GC_MacTemporaryNewPtr, GC_amiga_get_mem): Ditto.
-       * include/private/pthread_support.h (GC_threads,
-       GC_thr_initialized, GC_in_thread_creation): Ditto.
-       * malloc.c (GC_text_mapping): Ditto.
-       * mallocx.c (GC_bytes_found): Ditto.
-       * mark.c (GC_check_dirty, GC_started_thread_while_stopped): Ditto.
-       * mark_rts.c (GC_save_regs_ret_val): Ditto.
-       * misc.c (GC_clear_stack_inner, GC_init_parallel, GC_init_win32,
-       GC_setpagesize, GC_init_linux_data_start,
-       GC_set_and_save_fault_handler, GC_unmap_threshold): Ditto.
-       * os_dep.c (GC_unmap_threshold, GC_push_all_stacks,
-       GC_darwin_register_mach_handler_thread): Ditto.
-       * pthread_support.c (GC_markers, GC_collection_in_progress):
-       Ditto.
-       * tests/test.c (GC_amiga_free_all_mem): Ditto.
-       * thread_local_alloc.c (GC_gcjobjfreelist,
-       GC_gcj_malloc_initialized, GC_gcj_kind): Ditto.
-       * win32_threads.c (GC_write_fault_handler, GC_gww_dirty_init,
-       GC_fault_handler_lock, GC_write_cs, GC_markers): Ditto.
-       * misc.c (GC_read, GC_register_finalizer_no_order, GC_init_dyld):
-       Move the declaration out of GC_init(); remove "extern".
-       * os_dep.c (GC_abort): Add the comment; add workaround to suppress
-       compiler "unreachable code" warnings for ABORT callers (where
-       ABORT is followed by a dummy return statement).
-       * os_dep.c (GC_old_allocator): Move the declaration out of
-       GC_default_push_other_roots(); remove "extern".
-       * darwin_stop_world.c (GC_mprotect_stop, GC_mprotect_resume):
-       Move the declaration out of GC_stop_world() and GC_start_world()
-       (only if MPROTECT_VDB); remove "extern".
-
-2009-09-27  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (GC_get_stack_min, GC_push_stack_for,
-       GC_get_next_stack): Recognize _WIN32_WCE_EMULATION macro (used for
-       WinCE emulation and for custom WinCE 6 devices); add the comment.
-       * win32_threads.c (GC_get_stack_min): Cast pointer to word instead
-       of DWORD.
-       * win32_threads.c (GC_get_next_stack): Don't use and maintain the
-       latest known stack_min value for WinCE (if GC_get_stack_min is
-       defined as a macro); update the comments.
-       * win32_threads.c (GC_wnt): Don't declare for WinCE.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.direct: Document EMPTY_GETENV_RESULTS.
-       * gcj_mlc.c (GC_clear_stack): Remove declaration.
-       * malloc.c (GC_clear_stack): Ditto.
-       * mallocx.c (GC_clear_stack): Ditto.
-       * typd_mlc.c (GC_clear_stack): Ditto.
-       * gcj_mlc.c (GENERAL_MALLOC, GENERAL_MALLOC_IOP): Rename to
-       GENERAL_MALLOC_INNER and GENERAL_MALLOC_INNER_IOP, respectively;
-       remove "lb" unnecessary cast to word.
-       * include/private/gc_priv.h (GC_clear_stack): Add declaration.
-       * include/private/gc_priv.h (GENERAL_MALLOC, GENERAL_MALLOC_IOP):
-       Move common declaration from typd_mlc.c and malloc.c; remove
-       unnecessary result and "lb" parameter casts.
-       * include/private/thread_local_alloc.h: Guard against duplicate
-       header file inclusion.
-       * os_dep.c (USE_MUNMAP): Replace "-->" with an error directive for
-       the case when USE_MMAP is not defined.
-       * pthread_support.c (GC_is_thread_tsd_valid): New internal
-       function (only if GC_ASSERTIONS and THREAD_LOCAL_ALLOC); move the
-       code from thread-local GC_malloc(); add FIXME for the condition.
-       * win32_threads.c (GC_is_thread_tsd_valid): Ditto.
-       * thread_local_alloc.c (GC_gcjobjfreelist): Change the type (to
-       match that of its definition).
-       * thread_local_alloc.c (GC_destroy_thread_local): Add a cast for
-       GC_gcjobjfreelist.
-       * thread_local_alloc.c (GC_lookup_thread, GC_lookup_thread_inner):
-       Remove unused declaration; don't include pthread.h.
-       * thread_local_alloc.c (GC_is_thread_tsd_valid): New declaration
-       (only if GC_ASSERTIONS).
-       * thread_local_alloc.c (GC_malloc): Use GC_is_thread_tsd_valid()
-       instead of GC_lookup_thread().
-       * win32_threads.c (GC_lookup_thread_inner): Define as STATIC.
-       * win32_threads.c (UNPROTECT): Rename to UNPROTECT_THREAD (to have
-       id different from that in os_dep.c).
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_enough_large_bytes_left): Replace "inline static"
-       with GC_INLINE.
-       * include/private/gc_priv.h (fixed_getenv): Ditto.
-       * alloc.c (GC_max, GC_min): Replace "static INLINE" with
-       GC_INLINE.
-       * mark_rts.c (rt_hash): Ditto.
-       * win32_threads.c (GC_get_max_thread_index): Ditto.
-       * include/private/gc_priv.h (INLINE): Prefix with "GC_"; include
-       "static"; define for Sun CC; define for VC++ (and other
-       compilers).
-       * pthread_support.c: Don't define __inline__ for non-GNU compilers
-       (not needed anymore).
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * NT_THREADS_MAKEFILE: Remove file (since it duplicates gc.mak).
-       * Makefile.in: Remove reference to NT_THREADS_MAKEFILE.
-       * Makefile.am: Ditto.
-       * Makefile.dj: Ditto.
-       * Makefile.direct: Ditto.
-       * doc/README.win32: Add reference to gc.mak.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.in: Regenerate (by autoreconf -vif).
-       * aclocal.m4: Ditto.
-       * compile: Ditto.
-       * config.guess: Ditto.
-       * config.sub: Ditto.
-       * configure: Ditto.
-       * depcomp: Ditto.
-       * install-sh: Ditto.
-       * ltmain.sh: Ditto.
-       * missing: Ditto.
-       * mkinstalldirs: Ditto.
-       * include/private/config.h.in: New file (generated).
-       * Makefile.direct: Remove references to acinclude.m4, libtool.m4.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * autogen.sh: Update.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * Makefile.am: Don't add libtool.m4 to EXTRA_DIST.
-       * acinclude.m4: Fix underquoting of GC_SET_VERSION.
-       * README.QUICK: Update information for Makefile.
-       * Makefile.am: Do not distribute the substituted bdw-gc.pc.
-       * configure.ac: Add AM conditional analog to KEEP_BACK_PTRS.
-       * tests/tests.am: Use it here to conditionally enable tracetest
-       when possible.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * dyn_load.c (GC_wnt): Update the comment.
-       * dyn_load.c (GC_register_dynamic_libraries): Add the comment for
-       _WIN32_WCE_EMULATION; recognize GC_REGISTER_MEM_PRIVATE (new
-       macro); call GC_is_heap_base() only if check for Type succeeded.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * mark_rts.c (GC_is_tmp_root): Don't define unless NO_DEBUGGING;
-       update the comment.
-       * include/private/gc_priv.h (GC_is_tmp_root): Remove declaration.
-
-2009-09-26  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c: Expand all tabs to spaces; remove trailing spaces at
-       EOLn; remove multiple trailing blank lines.
-       * misc.c: Ditto.
-       * os_dep.c: Ditto.
-       * pthread_support.c: Ditto.
-       * include/private/gc_priv.h: Ditto.
-       * include/private/gcconfig.h: Ditto.
-
-2009-09-25  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gcconfig.h (CANCEL_SAFE, IF_CANCEL): new macros.
-       * include/private/gc_priv.h (DISABLE_CANCEL, RESTORE_CANCEL,
-       ASSERT_CANCEL_DISABLED): New macros.
-       * alloc.c (GC_maybe_gc): Assert cancellation disabled.
-       (GC_collect_a_little_inner,GC_try_to_collect, GC_collect_or_expand):
-       Disable cancellation.
-       (GC_add_to_our_memory): Check for overflow.
-       * misc.c (GC_cancel_disable_count): declare.
-       (GC_init, GC_write): Disable cancellation.
-       (GC_init): Remove redundant GC_is_initialized test.
-       * os_dep.c (GC_repeat_read): Assert cancellation disabled.
-       (GC_get_stack_base): Disable cancellation.
-       * pthread_stop_world.c (GC_suspend_handler_inner): Disable
-       cancellation.
-       * pthread_support.c (GC_mark_thread): Permanently disable
-       cancellation.
-       (GC_wait_for_gc_completion, GC_wait_builder, GC_wait_marker):
-       Assert cancellation disabled.
-       (fork handling): Disable cancellation, fix comment.
-       (GC_pthread_create): Disable cancellation.
-       (GC_unregister_my_thread): Disable cancellation.
-       * Makefile.direct: Document NO_CANCEL_SAFE.
-
-2009-09-25  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile: Remove outdated file (Makefile.direct should be used
-       instead).
-
-2009-09-25  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c: Reformat the code (make indentation and
-       opening bracket style uniform across the file; wrap long code and
-       comment lines).
-
-2009-09-25  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/gc.h (GC_use_DllMain): Refine (and reformat) the
-       comment.
-
-2009-09-25  Ivan Maidanski <ivmai@mail.ru> (really mostly Petter Urkedal)
-
-       * configure.ac: Add documentation to AC_DEFINE for GC_THREADS and
-       EMPTY_GETENV_RESULTS.
-       * configure.ac: Fix a typo.
-       * Makefile.am: Ditto.
-
-2009-09-25  Ivan Maidanski <ivmai@mail.ru>
-
-       * checksums.c (GC_checksum, GC_update_check_page): Remove
-       "register" keyword in local variable declarations (for the code
-       used only for debugging or which is not time-critical).
-       * dbg_mlc.c (GC_has_other_debug_info, GC_store_debug_info,
-       GC_store_debug_info_inner, GC_check_annotated_obj, GC_print_obj,
-       GC_print_smashed_obj, GC_debug_end_stubborn_change,
-       GC_debug_invoke_finalizer): Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries): Ditto.
-       * mallocx.c (GC_realloc): Ditto.
-       * mark_rts.c (GC_print_static_roots, GC_is_static_root,
-       GC_clear_roots): Ditto.
-       * misc.c (GC_write): Ditto.
-       * os_dep.c (GC_print_callers): Ditto.
-       * dyn_load.c (GC_register_dynamic_libraries): Rename "i" local
-       variable to "j" for the nested loop (just not to hide the similar
-       variable in the outer one).
-       * mark_rts.c (GC_print_static_roots): Output an error message
-       using GC_err_printf() (instead of GC_printf()).
-
-2009-09-25  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-
-       * configure.ac: Move include flag from ${INCLUDE} ...
-       * Makefile.am: ... to AM_CPPFLAGS and also add the build directory.
-       * configure.ac: Call AM_CONFIG_HEADER([include/private/config.h]).
-       * configure.ac: Add documentation to all AC_DEFINE either directly
-       or using AH_TEMPLATE.
-
-2009-09-24  Ivan Maidanski <ivmai@mail.ru>
-
-       * win32_threads.c (GC_waitForSingleObjectInfinite): New static
-       function (only if GC_WINMAIN_REDIRECT).
-       * win32_threads.c (WinMain): Call GC_waitForSingleObjectInfinite()
-       thru GC_do_blocking() instead of calling WaitForSingleObject()
-       directly.
-
-2009-09-24  Ivan Maidanski <ivmai@mail.ru>
-
-       * pthread_support.c (start_mark_threads): Refine printed message.
-       * win32_threads.c (GC_thr_init): Ditto.
-       * win32_threads.c: Reformat some code pieces (wrap too long code
-       lines).
-
-2009-09-24  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai145.diff)
-
-       * Makefile.direct (GC_WINMAIN_REDIRECT): Add the comment for.
-       * Makefile.direct (NO_GETENV): Update the comment.
-       * include/gc.h (GC_WINMAIN_WINCE_LPTSTR): Remove macro.
-       * include/gc.h (GC_WinMain): Remove declaration.
-       * include/gc.h (WinMain): Define (as GC_WinMain) if and only if
-       GC_WINMAIN_REDIRECT.
-       * tests/test.c (GC_COND_INIT): Define as GC_INIT() also in case of
-       WinCE target unless GC_WINMAIN_REDIRECT is defined.
-       * tests/test.c (WINMAIN_LPTSTR): New macro.
-       * tests/test.c (WinMain): Use WINMAIN_LPTSTR instead of LP[W]STR
-       and GC_WINMAIN_WINCE_LPTSTR.
-       * win32_threads.c (start_mark_threads): Add the comment for
-       MARK_THREAD_STACK_SIZE.
-       * win32_threads.c: Recognize new GC_WINMAIN_REDIRECT macro.
-       * win32_threads.c (WINMAIN_LPTSTR, WINMAIN_THREAD_STACK_SIZE): New
-       macro (only if GC_WINMAIN_REDIRECT).
-       * win32_threads.c: Undefine WinMain macro if GC_WINMAIN_REDIRECT.
-       * win32_threads.c (GC_WinMain): Add prototype (only if
-       GC_WINMAIN_REDIRECT).
-       * win32_threads.c (main_thread_args, WinMain): Rename
-       GC_WINMAIN_WINCE_LPTSTR to WINMAIN_LPTSTR.
-       * win32_threads.c (WinMain): Call GC_INIT() instead of GC_init();
-       use WINMAIN_THREAD_STACK_SIZE.
-       * win32_threads.c (WinMain): Call GC_deinit() and
-       DeleteCriticalSection() only if WinCE; add FIXME.
-
-2009-09-24  Ivan Maidanski <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_main_stack_base): add assertion for mem_base
-       value returned by GC_get_stack_base().
-
-2009-09-23  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai150.diff)
-
-       * Makefile.direct (MUNMAP_THRESHOLD, GC_FORCE_UNMAP_ON_GCOLLECT):
-       Add the comment for.
-       * alloc.c (GC_unmap_threshold, GC_force_unmap_on_gcollect):
-       Declare external variable (only if USE_MUNMAP).
-       * alloc.c (GC_try_to_collect): Temporarily set GC_unmap_threshold
-       value to 1 if GC_force_unmap_on_gcollect and restore it before
-       unlocking (only if USE_MUNMAP).
-       * doc/README.environment (GC_FORCE_UNMAP_ON_GCOLLECT): Add
-       information for.
-       * include/gc.h (GC_set_force_unmap_on_gcollect,
-       GC_get_force_unmap_on_gcollect): New public function prototype.
-       * include/gc.h (GC_FORCE_UNMAP_ON_GCOLLECT): New macro is
-       recognized.
-       * misc.c (GC_FORCE_UNMAP_ON_GCOLLECT): Ditto.
-       * include/gc.h (GC_INIT_CONF_FORCE_UNMAP_ON_GCOLLECT): New
-       internal macro (used by GC_INIT only).
-       * misc.c (GC_force_unmap_on_gcollect): New global variable.
-       * misc.c (GC_init): Recognize new "GC_FORCE_UNMAP_ON_GCOLLECT"
-       environment variable (and set GC_force_unmap_on_gcollect).
-       * misc.c (GC_set_force_unmap_on_gcollect,
-       GC_get_force_unmap_on_gcollect): New public function.
-       * tests/test.c (window_proc): Call GC_set_force_unmap_on_gcollect
-       to force the mode on if WM_HIBERNATE; restore the mode after
-       GC_gcollect().
-
-2009-09-23  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.direct (LARGE_CONFIG): Update information.
-       * include/gc.h (GC_stop_func): Refine the comment.
-
-2009-09-21  Ivan Maidanski <ivmai@mail.ru>
-
-       * configure.ac: Use EMPTY_GETENV_RESULTS instead of NO_GETENV for
-       Win32 (workaround for Wine bug).
-
-2009-09-20  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c (GC_freehblk): Adjust local variables indentation.
-       * mallocx.c (GC_generic_malloc_many): Ditto.
-       * typd_mlc.c (GC_malloc_explicitly_typed_ignore_off_page,
-       GC_calloc_explicitly_typed): Ditto.
-       * typd_mlc.c (GC_make_array_descriptor): Remove unnecessary
-       brackets.
-
-2009-09-20  Ivan Maidanski <ivmai@mail.ru>
-
-       * configure.ac: Replace GC_WIN32_THREADS with GC_THREADS.
-       * configure.ac: Process enable_parallel_mark option for Cygwin and
-       Win32; define THREAD_LOCAL_ALLOC for Win32.
-
-2009-09-20  Ivan Maidanski <ivmai@mail.ru>
-
-       * include/private/gc_priv.h: Define AO_ASSUME_WINDOWS98 if
-       PARALLEL_MARK (required for VC++ x86).
-
-2009-09-19  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai149.diff)
-
-       * dbg_mlc.c (GC_generate_random_backtrace): Call
-       GC_try_to_collect(GC_never_stop_func) instead of GC_gcollect();
-       if GC is disabled then print error message and return.
-       * include/gc.h (GC_try_to_collect): Refine the comment.
-       * include/private/gc_priv.h (GC_never_stop_func): Fix return type;
-       refine the comment.
-
-2009-09-19  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai147.diff)
-
-       * add_gc_prefix.c: Move the file to the new "extra" directory.
-       * AmigaOS.c: Ditto.
-       * gcname.c: Ditto.
-       * if_mach.c: Ditto.
-       * if_not_there.c: Ditto.
-       * MacOS.c: Ditto.
-       * msvc_dbg.c: Ditto.
-       * setjmp_t.c: Ditto.
-       * threadlibs.c: Ditto.
-       * EMX_MAKEFILE: Prepend setjmp_t.c with "extra" directory.
-       * Makefile: Prepend AmigaOS.c, MacOS.c, add_gc_prefix.c, gcname.c,
-       if_mach.c, if_not_there.c, msvc_dbg.c, setjmp_t.c, threadlibs.c
-       with "extra" directory.
-       * Makefile.am: Ditto.
-       * Makefile.direct: Ditto.
-       * Makefile.dj: Ditto.
-       * Makefile.in: Ditto.
-       * NT_MAKEFILE: Prepend msvc_dbg.obj with "extra" directory.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * NT_THREADS_MAKEFILE: Prepend msvc_dbg.c with "extra" directory.
-       * gc.mak: Ditto.
-       * PCR-Makefile: Prepend if_mach.c, if_not_there.c with "extra"
-       directory.
-       * SMakefile.amiga: Prepend AmigaOS.c, setjmp_t.c with "extra"
-       directory.
-       * doc/simple_example.html: Update for threadlibs.c.
-       * os_dep.c: Prepend included AmigaOS.c with "extra" directory.
-
-2009-09-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * allchblk.c: Expand all tabs to spaces; remove trailing spaces at
-       EOLn; remove multiple trailing blank lines.
-       * mark.c: Ditto.
-       * mark_rts.c: Ditto.
-       * pthread_stop_world.c: Ditto.
-       * win32_threads.c: Ditto.
-       * include/gc.h: Ditto.
-       * include/private/gc_priv.h: Ditto.
-       * pthread_stop_world.c: Add copyright header.
-       * include/gc.h: Reformat some comments.
-
-2009-09-19  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai130a.diff, ivmai130b.diff - superseding diff44, diff69)
-
-       * include/gc.h (GC_do_blocking, GC_call_with_gc_active): New
-       function prototype.
-       * include/private/gc_priv.h (STOP_WORLD): Replace a no-op (for the
-       single-threaded case) with an assertion check for the state to be
-       not a "do-blocking" one.
-       * include/private/gc_priv.h (blocking_data): Move the structure
-       definition from pthread_support.c; change "fn" return type to void
-       pointer.
-       * include/private/gc_priv.h (GC_activation_frame_s): New structure
-       type.
-       * include/private/gc_priv.h (GC_push_all_stack_frames): New
-       function declaration (only if THREADS).
-       * include/private/gc_priv.h (GC_world_stopped): Don't declare
-       unless THREADS.
-       * include/private/gc_priv.h (GC_blocked_sp,
-       GC_activation_frame_s): New declaration (only if not THREADS).
-       * include/private/gc_priv.h (GC_push_all_register_frames): New
-       function declaration (only for IA-64).
-       * include/private/gc_priv.h (NURSERY, GC_push_proc): Remove
-       obsolete (unused) symbols.
-       * include/private/gc_priv.h (GC_push_all_stack_partially_eager):
-       Remove declaration (since it is static now).
-       * mark_rts.c (GC_push_all_stack_partially_eager): Move from mark.c
-       (for code locality) and make STATIC.
-       * mark_rts.c (GC_push_all_register_frames): New function (only for
-       IA-64).
-       * mark_rts.c (GC_push_all_stack_frames): New function (only if
-       THREADS).
-       * mark_rts.c (GC_add_trace_entry): New function prototype (used by
-       GC_push_all_stack_partially_eager(), only if TRACE_BUF).
-       * mark_rts.c (GC_push_all_stack_part_eager_frames): New function.
-       * mar_rts.c (GC_save_regs_ret_val): Move the declaration out of a
-       function body (only for IA-64).
-       * mark_rts.c (GC_push_current_stack): Call
-       GC_push_all_stack_part_eager_frames() instead of
-       GC_push_all_stack_partially_eager().
-       * mark_rts.c (GC_push_current_stack): Call
-       GC_push_all_register_frames() instead of GC_push_all_eager() for
-       IA-64 backing store.
-       * misc.c (GC_do_blocking_inner): Declare function (if THREADS
-       only).
-       * misc.c (GC_blocked_sp, GC_blocked_register_sp,
-       GC_activation_frame): New global variables (only if not THREADS).
-       * misc.c (GC_call_with_gc_active, GC_do_blocking_inner): New API
-       function (only if not THREADS).
-       * misc.c (GC_do_blocking): Move the function from
-       pthread_support.c.
-       * include/private/pthread_support.h (GC_Thread_Rep): Add
-       "activation_frame" field.
-       * pthread_stop_world.c (GC_push_all_stacks): Call
-       GC_push_all_stack_frames() and GC_push_all_register_frames instead
-       of GC_push_all_stack() and/or GC_push_all_eager(); don't check for
-       STACK_GROWS_UP here.
-       * pthread_support.c (GC_do_blocking_inner): Remove "static"; store
-       "fn" result back to "client_data" field.
-       * pthread_support.c (GC_call_with_gc_active): New API function.
-       * win32_threads.c (GC_call_with_gc_active): Ditto.
-       * win32_threads.c (GC_Thread_Rep): Add "thread_blocked_sp" and
-       "activation_frame" fields.
-       * win32_threads.c (GC_new_thread): Add assertion checking for
-       thread_blocked_sp is NULL.
-       * win32_threads.c (GC_do_blocking_inner): New function.
-       * win32_threads.c (GC_stop_world): Don't suspend a thread if its
-       thread_blocked_sp is non-NULL.
-       * win32_threads.c (GC_push_stack_for): Use thread
-       "activation_frame" (if non-NULL); use "thread_blocked_sp" if
-       non-NULL (instead of calling GetThreadContext()); "UNPROTECT" the
-       thread before modifying its last_stack_min; call
-       GC_push_all_stack_frames() instead of GC_push_all_stack(); update
-       the comments.
-
-2009-09-19  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai129.diff - superseding diff47)
-
-       * alloc.c (GC_default_stop_func): New static variable (initialized
-       to GC_never_stop_func).
-       * alloc.c (GC_set_stop_func, GC_get_stop_func): New function.
-       * alloc.c (GC_timeout_stop_func): Define as GC_default_stop_func
-       (instead of GC_never_stop_func) if SMALL_CONFIG (or NO_CLOCK),
-       else call GC_default_stop_func() before getting "current_time".
-       * alloc.c (GC_maybe_gc): Expand GC_gcollect_inner() macro (for
-       FIXME comment).
-       * alloc.c (GC_maybe_gc, GC_collect_a_little_inner): add FIXME for
-       replacing GC_never_stop_func with GC_default_stop_func (if
-       possible).
-       * alloc.c (GC_gcollect): Use GC_default_stop_func.
-       * alloc.c (GC_collect_or_expand): Use GC_default_stop_func
-       (instead of GC_never_stop_func) unless it is trigged due to out of
-       memory; don't increment GC_fail_count and don't output warning
-       (before trying to collect again) in case the collection has been
-       interrupted (by GC_default_stop_func) and the heap expansion has
-       failed too.
-       * include/gc.h (GC_set_stop_func, GC_get_stop_func): New function
-       prototypes.
-
-2009-09-19  Ivan Maidanski <ivmai@mail.ru>
-
-       * os_dep.c (GC_get_stack_base): Add FIXME; add assertion for
-       GC_get_writable_length() result.
-
-2009-09-18  Ivan Maidanski <ivmai@mail.ru> (really Ludovic Courtes)
-
-       * configure.ac: Don't use -lpthread -ldl for Cygwin.
-
-2009-09-18  Ivan Maidanski <ivmai@mail.ru>
-
-       * NT_THREADS_MAKEFILE: Make it back equal to gc.mak.
-
-2009-09-18  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai142.diff)
-
-       * include/private/gcconfig.h (GWW_VDB): Undefine if
-       USE_GLOBAL_ALLOC (since incompatible).
-       * os_dep.c (GetWriteWatch_alloc_flag): Define as 0 unless GWW_VDB
-       is defined.
-       * os_dep.c (GC_unmap_threshold): Declare (for use in
-       GC_init_win32) if USE_MUNMAP.
-       * os_dep.c (GC_init_win32): Turn off memory unmapping if
-       GlobalAlloc() is used.
-       * os_dep.c (GC_win32_get_mem): Define and use new
-       VIRTUAL_ALLOC_PAD macro; don't waste a extra memory page unless
-       MPROTECT_VDB is in use.
-
-2009-09-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile: Replace "version.h" with "include/gc_version.h".
-       * include/gc_version.h: Ditto.
-
-2009-09-17  Ivan Maidanski <ivmai@mail.ru>
-
-       * alloc.c (GC_collect_or_expand): Output heap size in WARN()
-       (before returning FALSE) for convenience.
-
-2009-09-17  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai139.diff)
-
-       * allchblk.c (GC_allochblk_nth): Use GC_PRIdPTR in WARN() format
-       string.
-       * pthread_support.c (start_mark_threads, GC_thr_init): Ditto.
-       * win32_threads.c (GC_delete_thread): Ditto.
-       * include/private/gc_priv.h (GC_PRIdPTR): New macro.
-       * pthread_stop_world.c (GC_suspend_handler_inner): Remove
-       unnecessary cast for WARN argument.
-       * pthread_support.c (start_mark_threads): if pthread_create()
-       failed then don't try to create other marker threads and (after
-       printing a warning) adjust GC_markers and GC_parallel values; log
-       GC_markers value (possibly adjusted) after that.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai140.diff)
-
-       * win32_threads.c (start_mark_threads): if pthread_create() is
-       failed then don't try to create other marker threads and (after
-       printing a warning) adjust GC_markers and GC_parallel values.
-       * win32_threads.c (mark_mutex_event, builder_cv, mark_cv): Move
-       the definition upper (to be visible in start_mark_threads()).
-       * win32_threads.c (start_mark_threads): if CreateThread() or
-       _beginthreadex() is failed then don't try to create other marker
-       threads and (after printing a warning) adjust GC_markers,
-       GC_parallel values, and destroy the event objects (either only
-       some for the uncreated threads if DONT_USE_SIGNALANDWAIT or all if
-       not a single thread is created).
-       * win32_threads.c (GC_thr_init): Log GC_markers value (possibly
-       adjusted) after start_mark_threads() call.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-
-       * Makefile.am: Back remove "GC_" prefix for PTHREADS,
-       DARWIN_THREADS, WIN32_THREADS (for configure.ac).
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-
-       * ChangeLog: Remove trailing spaces at EOLn; insert blank lines
-       where missed.
-       * doc/README: Expand all tabs to spaces; remove trailing spaces at
-       EOLn; remove multiple trailing blank lines.
-       * doc/README.autoconf: Ditto.
-       * doc/README.DGUX386: Ditto.
-       * doc/README.environment: Ditto.
-       * doc/README.macros: Ditto.
-       * doc/README.win32: Ditto.
-       * tests/test.c: Ditto.
-       * tests/test_cpp.cc: Ditto.
-       * backgraph.c: Ditto.
-       * blacklst.c: Ditto.
-       * checksums.c: Ditto.
-       * darwin_stop_world.c: Ditto.
-       * dbg_mlc.c: Ditto.
-       * dyn_load.c: Ditto.
-       * finalize.c: Ditto.
-       * gc_dlopen.c: Ditto.
-       * gcj_mlc.c: Ditto.
-       * headers.c: Ditto.
-       * mach_dep.c: Ditto.
-       * malloc.c: Ditto.
-       * mallocx.c: Ditto.
-       * new_hblk.c: Ditto.
-       * obj_map.c: Ditto.
-       * ptr_chck.c: Ditto.
-       * real_malloc.c: Ditto.
-       * reclaim.c: Ditto.
-       * stubborn.c: Ditto.
-       * thread_local_alloc.c: Ditto.
-       * typd_mlc.c: Ditto.
-       * gc_cpp.cc: Ditto.
-       * include/gc_allocator.h: Ditto.
-       * include/gc_backptr.h: Ditto.
-       * include/gc_config_macros.h: Ditto.
-       * include/gc_cpp.h: Ditto.
-       * include/gc_gcj.h: Ditto.
-       * include/gc_inline.h: Ditto.
-       * include/gc_mark.h: Ditto.
-       * include/gc_pthread_redirects.h: Ditto.
-       * include/gc_typed.h: Ditto.
-       * include/gc_version.h: Ditto.
-       * include/javaxfc.h: Ditto.
-       * include/new_gc_alloc.h: Ditto.
-       * include/private/darwin_semaphore.h: Ditto.
-       * include/private/dbg_mlc.h: Ditto.
-       * include/private/gc_hdrs.h: Ditto.
-       * include/private/gc_locks.h: Ditto.
-       * include/private/gc_pmark.h: Ditto.
-       * include/private/gcconfig.h: Ditto.
-       * include/private/pthread_support.h: Ditto.
-       * include/private/thread_local_alloc.h: Ditto.
-       * darwin_stop_world.c: Add copyright header.
-       * include/gc_backptr.h: Ditto.
-       * include/gc_config_macros.h: Ditto.
-       * include/gc_pthread_redirects.h: Ditto.
-       * include/gc_version.h: Ditto.
-       * include/javaxfc.h: Ditto.
-       * include/private/darwin_semaphore.h: Ditto.
-       * include/private/pthread_support.h: Ditto.
-       * gc_cpp.cc: Make copyright header uniform across the package.
-       * include/gc_cpp.h: Ditto.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
-       (gc_config_h_6a.patch with a minor correction)
-
-       * include/private/gc_priv.h: Change include of config.h to
-       private/config.h.
-       * include/private/gc_pmark.h: Ditto.
-       * gc_cpp.cc: Ditto.
-       * tests/test.c: Ditto.
-       * tests/test_cpp.cc: Include private/config.h (if HAVE_CONFIG_H);
-       undefine GC_BUILD.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai128.diff - superseding diff62, diff66 partly)
-
-       * finalize.c (GC_general_register_disappearing_link): Return
-       GC_SUCCESS, GC_DUPLICATE, GC_NO_MEMORY (instead of 0, 1 and 2,
-       respectively).
-       * include/gc.h (GC_NO_MEMORY): New macro (defined as 2).
-       * include/gc.h (GC_register_disappearing_link,
-       GC_general_register_disappearing_link): Update the comment.
-       * typd_mlc.c (GC_calloc_explicitly_typed): Use GC_NO_MEMORY macro.
-       * finalize.c (GC_general_register_disappearing_link,
-       GC_register_finalizer_inner): Recalculate the hash table index
-       after GC_oom_fn succeeded (since the table may grow while not
-       holding the lock) and check again that the entry is still not in
-       the table (free the unused entry otherwise unless DBG_HDRS_ALL).
-       * finalize.c (GC_register_finalizer_inner): Initialize "hhdr"
-       local variable (to prevent a compiler warning).
-       * finalize.c (GC_register_finalizer_inner): Don't modify the data
-       pointed by "ocd" and "ofn" in GC_register_finalizer_inner() failed
-       (due to out of memory).
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai124.diff - superseding diff67 partly)
-
-       * alloc.c (GC_set_fl_marks, GC_clear_fl_marks): Transform loop to
-       suppress compiler "variable might be uninitialized" warnings.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai138.diff)
-
-       * Makefile.direct (DONT_USE_SIGNALANDWAIT): Add the comment for.
-       * win32_threads.c (DONT_USE_SIGNALANDWAIT): Always define for
-       WinCE.
-       * win32_threads.c (THREAD_HANDLE): Cast Id (of DWORD type) to
-       HANDLE thru word type (to avoid a compiler warning) for WinCE.
-       * win32_threads.c (GC_marker_cv, GC_marker_Id): New static array
-       (only if DONT_USE_SIGNALANDWAIT).
-       * win32_threads.c (start_mark_threads): Initialize GC_marker_Id
-       and GC_marker_cv for each helper thread (only if
-       DONT_USE_SIGNALANDWAIT).
-       * win32_threads.c (GC_mark_mutex_state): New static variable (only
-       if DONT_USE_SIGNALANDWAIT).
-       * win32_threads.c (GC_mark_mutex_waitcnt,
-       signalObjectAndWait_func): Don't define if DONT_USE_SIGNALANDWAIT.
-       * win32_threads.c (GC_acquire_mark_lock, GC_release_mark_lock):
-       Use InterlockedExchange() over GC_mark_mutex_state (instead of
-       AO_fetch_and_add()) if DONT_USE_SIGNALANDWAIT.
-       * win32_threads.c (GC_wait_marker, GC_notify_all_marker):
-       Implement wait/broadcast primitives using Win32 multiple events
-       (one for each marker thread) if DONT_USE_SIGNALANDWAIT (instead of
-       using Win32 SignalObjectAndWait).
-       * win32_threads.c (GC_thr_init): Don't declare hK32 local
-       variable, don't check for GC_wnt, and don't initialize
-       signalObjectAndWait_func if DONT_USE_SIGNALANDWAIT.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai127.diff - superseding diff49)
-
-       * alloc.c (GC_finish_collection): Call GC_print_finalization_stats
-       if GC_print_stats (after getting "done_time").
-       * finalize.c (GC_old_dl_entries): New static variable (only if not
-       SMALL_CONFIG).
-       * finalize.c (GC_finalize): Save current GC_dl_entries value (only
-       if not SMALL_CONFIG).
-       * finalize.c (GC_print_finalization_stats): Define if and only if
-       not SMALL_CONFIG; use GC_old_dl_entries value; use GC_log_printf()
-       instead of GC_printf(); use "%lu" (instead of "%u") print format
-       specifier; use unsigned long type for "ready" counter (for LP64
-       targets).
-       * misc.c (GC_dump): No longer call GC_print_finalization_stats()
-       here (since it is called from GC_finish_collection()).
-       * misc.c (STACKBASE): Remove unused macro undef (for NOSYS and
-       ECOS).
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai134.diff)
-
-       * alloc.c (GC_expand_hp): Replace GC_init_inner() call with
-       GC_init() one.
-       * malloc.c (GC_alloc_large, GC_generic_malloc_inner): Ditto.
-       * mallocx.c (GC_generic_malloc_many): Ditto.
-       * misc.c (GC_enable_incremental): Ditto.
-       * alloc.c (GC_expand_hp): Update the comment.
-       * mark.c (GC_obj_kinds): Ditto.
-       * win32_threads.c (GC_allow_register_threads): Ditto.
-       * private/gc_priv.h (GC_init_inner): Remove function declaration.
-       * misc.c (GC_init_inner): Replace with public GC_init().
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai126.diff)
-
-       * gcj_mlc.c (GC_gcj_fake_mark_proc): New static function.
-       * gcj_mlc.c (GC_init_gcj_malloc): If mp is 0 then supply
-       GC_gcj_fake_mark_proc (aborting with the appropriate message)
-       instead.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai125.diff)
-
-       * os_dep.c (GC_wince_get_mem): If VirtualAlloc() returns NULL (due
-       to out of memory) then don't increment GC_n_heap_bases and don't
-       call VirtualAlloc() again (with MEM_COMMIT).
-       * os_dep.c (GC_remap): Abort with a more informatory message if
-       VirtualAlloc() fails due to out of memory; update FIXME.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai132.diff - superseding diff41a, diff64, diff84 partly)
-
-       * Makefile: Fix typo for msvc_dbg.c.
-       * Makefile.direct: Ditto.
-       * Makefile.am: Prefix PTHREADS, DARWIN_THREADS, WIN32_THREADS with
-       "GC_".
-       * Makefile.dj: Don't reference remove files (nursery.c,
-       gc_nursery.h, gc_copy_descr.h).
-       * NT_MAKEFILE: Don't define __STDC__ macro (no longer used).
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * gc.mak: Ditto.
-       * NT_MAKEFILE: Remove unnecessary -DGC_BUILD (since it is always
-       defined in the source files).
-       * NT_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * gc.mak: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Fix typo for -DGC_NOT_DLL.
-       * NT_STATIC_THREADS_MAKEFILE: Replace GC_WIN32_THREADS with
-       GC_THREADS.
-       * NT_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-       * gc.mak: Ditto.
-       * NT_MAKEFILE: Define _CRT_SECURE_NO_DEPRECATE to suppress the
-       compiler warnings.
-       * NT_STATIC_THREADS_MAKEFILE: Ditto.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Place -D_CRT_SECURE_NO_DEPRECATE
-       before "$*.C" (and "$*.CPP").
-       * NT_X64_THREADS_MAKEFILE: Ditto.
-
-2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai131.diff - superseding diff83, diff84 partly)
-
-       * doc/README.solaris2: Replace GC_SOLARIS_THREADS with GC_THREADS.
-       * doc/README.win32: Replace GC_WIN32_THREADS with GC_THREADS.
-       * doc/README.win64: Add info about mingw-w64; add note for VC++
-       warnings suppression.
-
-2009-09-15  Hans Boehm <Hans.Boehm@hp.com> (Mostly Juan Jose Garcia-Ripoll)
-       (Also similar to, but not the same as, Ivan's diff104_cvs)
-
-       * os_dep.c (GC_forward_exception): Fix logic in several places.
-       (OSX-specific)
-
-2009-09-15  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai137v2.diff)
-
-       * include/private/gc_priv.h (MAX_HEAP_SECTS): Guard with ifndef.
-
-2009-09-14  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai136v2.diff)
-
-       * Makefile.direct: Copy missing information for -DSHORT_DBG_HDRS
-       from Makefile.
-       * Makefile: Remove the information about "define arguments" (which
-       is incomplete and outdated compared to that in Makefile.direct);
-       add help reference to Makefile.direct.
-       * Makefile.dj: Ditto.
-
-2009-09-14  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai135.diff)
-
-       * alloc.c (world_stopped_total_time, world_stopped_total_divisor):
-       Replace "STATIC" with "static" in the definition (since the
-       symbols aren't prefixed with "GC_").
-       * win32_threads.c (marker_sp, marker_bsp, marker_last_stack_min,
-       start_mark_threads, mark_mutex, builder_cv, mark_cv,
-       mark_mutex_event, signalObjectAndWait_func, main_thread_start):
-       Ditto.
-       * pthread_support.c (GC_wait_builder): Define as STATIC.
-       * win32_threads.c (GC_wait_builder): Ditto.
-
-2009-09-14  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai133.diff)
-
-       * misc.c (GC_get_heap_size_inner, GC_get_free_bytes_inner): New
-       API function.
-       * include/gc_pmark.h (GC_get_heap_size_inner,
-       GC_get_free_bytes_inner): New function declaration.
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai121.diff)
-
-       * include/gc.h: Recognize __CEGCC__ (as a synonym for _WIN32_WCE).
-       * include/gc_config_macros.h: Ditto.
-       * include/gc.h (GC_MAXIMUM_HEAP_SIZE): Recognize new macro.
-       * include/gc.h (GC_INIT_CONF_MAXIMUM_HEAP_SIZE): New macro (for
-       internal use).
-       * include/gc_config_macros.h: Always include stddef.h if GCC.
-       * include/gc_config_macros.h (GC_API): Define for CeGCC in the
-       same way as for MinGW.
-       * include/gc_config_macros.h (GC_API): Group the definition for
-       all cases together (check for GC_DLL only once).
-       * include/gc_pthread_redirects.h: Group non-Darwin code together.
-       * tests/test.c: Recognize GC_PRINT_VERBOSE_STATS (only if GC_DLL).
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (ivmai120a.diff, ivmai120b.diff)
-
-       * Makefile.direct (GC_PTHREADS_PARAMARK, GC_IGNORE_GCJ_INFO,
-       GC_PRINT_VERBOSE_STATS, GC_DONT_EXPAND, GC_INITIAL_HEAP_SIZE,
-       GC_FREE_SPACE_DIVISOR, GC_TIME_LIMIT, GC_FULL_FREQ): Add the
-       comment for.
-       * misc.c (GC_init_inner): Recognize GC_PRINT_VERBOSE_STATS (new
-       macro).
-       * dyn_load.c (GC_wnt): Change definition to TRUE for WinCE; add
-       FIXME and the comment for WinCE.
-       * gcj_mlc.c (GC_init_gcj_malloc): Recognize GC_IGNORE_GCJ_INFO
-       (new macro).
-       * include/gc.h (GC_HAVE_BUILTIN_BACKTRACE): Don't define for VC++
-       WinCE (since backtrace() is unimplemented).
-       * include/private/gc_priv.h (GC_n_heap_bases): Remove declaration
-       (since static).
-       * os_dep.c (GC_n_heap_bases): Define as STATIC; move the
-       definition to be above GC_is_heap_base().
-       * include/private/gcconfig.h: Don't define NOSYS for WinCE on ARM
-       (both for MinGW and CeGCC toolchains).
-       * include/private/gcconfig.h: Recognize __CEGCC__ and
-       __MINGW32CE__ (as synonyms for __WIN32_WCE).
-       * include/private/gcconfig.h: If SH4 then don't set config
-       parameters for SH.
-       * include/private/thread_local_alloc.h (GC_key_create): Don't
-       abort on failures, just return -1 in these cases (this also
-       prevents compilation error for targets where ABORT is defined
-       indirectly as an inline assembler sequence).
-       * mark.c (WRAP_MARK_SOME): Also define for WinCE; add FIXME for
-       the GCC-based cross-compiler.
-       * mark.c (ext_ex_regn, mark_ex_handler): Don't define unless
-       WRAP_MARK_SOME is defined; define also for WinCE case; don't
-       check for _WIN64 (since WRAP_MARK_SOME is undefined for it).
-       * mark.c (GC_mark_some): Use __try/__except also for WinCE; update
-       the comment.
-       * misc.c: Include signal.h after gc_pmark.h included; check for
-       MSWINCE instead of _WIN32_WCE.
-       * misc.c (GC_init_inner): Remove duplicate GC_setpagesize() call.
-       * misc.c: Don't include <crtdbg.h> for WinCE targets.
-       * misc.c (GC_write): Define _MAX_PATH if undefined (workaround for
-       CeGCC toolchain).
-       * misc.c (GC_write): Use OutputDebugStringW() instead of
-       _CrtDbgReport() for WinCE targets.
-       * os_dep.c (GC_least_described_address): Define as STATIC.
-       * os_dep.c (GC_register_data_segments): Fix code indentation.
-       * os_dep.c (GC_wince_get_mem): Initialize "result" local variable
-       (to prevent a compiler warning).
-       * os_dep.c (GC_dirty_init): Add comment for WinCE target.
-       * tests/test.c: Don't include winbase.h directly if GCC for WinCE,
-       include assert.h instead.
-       * tests/test.c (tiny_reverse_test): Define and use
-       TINY_REVERSE_UPPER_VALUE macro (4 if VERY_SMALL_CONFIG else 10);
-       useful for WinCE.
-       * win32_threads.c (GC_Thread_Rep): Don't declare "handle" field
-       for WinCE (since thread Id is used as a "real" thread handle).
-       * win32_threads.c (THREAD_HANDLE): New macro.
-       * win32_threads.c (GC_register_my_thread_inner): Don't recognize
-       DONT_IMPORT_GETCURTHREAD anymore; don't record thread handle on
-       WinCE.
-       * Makefile.direct (DONT_IMPORT_GETCURTHREAD): Remove comment for.
-       * win32_threads.c (UNPROTECT, GC_fault_handler_lock): Don't check
-       for MSWINCE.
-       * win32_threads.c (GC_delete_gc_thread, GC_delete_thread): Don't
-       close thread handle on WinCE (since it's a thread Id).
-       * win32_threads.c (GC_suspend): Don't check for MSWINCE in the
-       MPROTECT-related code (for the case if MPROTECT_VDB would be
-       implemented for WinCE).
-       * win32_threads.c (GC_suspend, GC_start_world, GC_push_stack_for):
-       Use THREAD_HANDLE(t) to obtain thread handle.
-       * win32_threads.c (GC_PTHREADS_PARAMARK): New macro recognized;
-       implicitly define GC_PTHREADS_PARAMARK if GC_PTHREADS; include
-       pthread.h; define NUMERIC_THREAD_ID(id) if undefined yet; replace
-       GC_PTHREADS with GC_PTHREADS_PARAMARK where appropriate (for the
-       parallel mark support).
-       * win32_threads.c (start_mark_threads): Use int type for "i" local
-       variable (instead of "unsigned") to prevent a compiler warning.
-       * win32_threads.c (start_mark_threads): Don't check CreateThread()
-       result for -1; call CloseHandle() for the handle created by
-       CreateThread() (on WinCE); don't use errno (since errno.h is
-       missing on some targets like WinCE) when printing warning on a
-       marker thread creation failure.
-       * win32_threads.c (signalObjectAndWait_func): Define for WinCE.
-       * win32_threads.c (GC_wait_marker): Remove unnecessary assertion
-       for non-zero signalObjectAndWait_func (to make the code compilable
-       for WinCE).
-       * win32_threads.c (GC_thr_init): Allow PARALLEL_MARK for WinCE;
-       use GC_sysinfo to get processors count if WinCE; don't check for
-       SignalObjectAndWait() if WinCE; replace GC_PTHREADS with
-       GC_PTHREADS_PARAMARK.
-       * win32_threads.c (GC_thr_init): Recognize GC_MIN_MARKERS new
-       macro (useful for testing parallel marking on WinCE).
-       * win32_threads.c (GC_win32_start, main_thread_start): Define as
-       STATIC.
-       * win32_threads.c: Don't define main_thread_args,
-       main_thread_start(), WinMain() for WinCE if GC_DLL.
-       * win32_threads.c (WINCE_MAIN_STACK_SIZE): Remove useless macro
-       (since the stack size parameter is ignored on WinCE).
-       * win32_threads.c (main_thread_start): Remove forward declaration;
-       place its definition before WinMain() one.
-       * win32_threads.c (WinMain): Abort if GC_CreateThread() or
-       WaitForSingleObject() failed (for the main thread).
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff118_cvs - superseding diff53)
-
-       * allchblk.c (MUNMAP_THRESHOLD): Move macro definition out of
-       a function.
-       * allchblk.c (GC_unmap_threshold): New global variable definition
-       (initialized to MUNMAP_THRESHOLD).
-       * allchblk.c (GC_unmap_old): Use GC_unmap_threshold instead of
-       MUNMAP_THRESHOLD; skip unmapping if GC_unmap_threshold is 0.
-       * doc/README.environment (GC_UNMAP_THRESHOLD): Add information.
-       * misc.c (GC_unmap_threshold): New variable declaration.
-       * misc.c (GC_init_inner): Recognize "GC_UNMAP_THRESHOLD"
-       environment variable to set GC_unmap_threshold value (only if
-       USE_MUNMAP).
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff117)
-
-       * dbg_mlc.c (OFN_UNSET): New macro (to detect
-       GC_register_finalizer() failures).
-       * dbg_mlc.c (store_old): Add a check for register_finalizer()
-       failure caused by an out-of-memory event (leave *ofn and *ocd
-       unmodified in that case).
-       * dbg_mlc.c (GC_debug_register_finalizer,
-       GC_debug_register_finalizer_no_order,
-       GC_debug_register_finalizer_unreachable,
-       GC_debug_register_finalizer_ignore_self): Initialize my_old_fn
-       to OFN_UNSET; clear *ocd and *ofn for non-heap objects (the same
-       as in GC_register_finalizer_inner()).
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff116a, diff116b, diff116c)
-
-       * Makefile.direct (GC_DLL): Add the comment for.
-       * doc/README.macros: Fix a typo.
-       * doc/README.macros (_DLL, GC_DLL, GC_NOT_DLL): Update info.
-       * doc/README.macros (__STDC__): Remove info.
-       * dbg_mlc.c (GC_get_back_ptr_info, GC_generate_random_heap_address,
-       GC_generate_random_valid_address, GC_print_backtrace,
-       GC_generate_random_backtrace, GC_register_describe_type_fn): Add
-       GC_API and GC_CALL to function definition.
-       * malloc.c (GC_generic_malloc): Ditto.
-       * mallocx.c (GC_incr_bytes_allocd, GC_incr_bytes_freed): Ditto.
-       * mark.c (GC_mark_and_push): Ditto.
-       * misc.c (GC_new_free_list_inner, GC_new_free_list,
-       GC_new_kind_inner, GC_new_kind, GC_new_proc_inner, GC_new_proc):
-       Ditto.
-       * include/gc_backptr.h (GC_get_back_ptr_info,
-       GC_generate_random_heap_address, GC_generate_random_valid_address,
-       GC_generate_random_backtrace, GC_print_backtrace): Add GC_API and
-       GC_CALL to function prototype.
-       * include/gc_mark.h (GC_mark_and_push, GC_new_free_list,
-       GC_new_free_list_inner, GC_new_kind, GC_new_kind_inner,
-       GC_new_proc, GC_new_proc_inner, GC_generic_malloc,
-       GC_register_describe_type_fn): Ditto.
-       * include/new_gc_alloc.h (GC_incr_bytes_allocd, GC_incr_mem_freed,
-       GC_generic_malloc_words_small): Ditto.
-       * gc_cpp.cc: Include "config.h" (if HAVE_CONFIG_H defined).
-       * include/private/gc_pmark.h: Ditto.
-       * include/private/gc_priv.h: Ditto.
-       * tests/test.c: Ditto.
-       * gc_cpp.cc: Define GC_BUILD.
-       * include/private/gc_pmark.h: Ditto.
-       * include/private/gc_priv.h: Ditto.
-       * gc_dlopen.c (WRAP_FUNC, REAL_FUNC): New macro.
-       * gc_dlopen.c (dlopen): Add GC_API to the wrapper function
-       definition.
-       * pthread_support.c (GC_pthread_create, GC_pthread_sigmask,
-       GC_pthread_join, GC_pthread_detach, pthread_sigmask, pthread_join,
-       pthread_detach, pthread_create): Ditto.
-       * win32_threads.c (GC_pthread_join, GC_pthread_create,
-       GC_pthread_sigmask, GC_pthread_detach): Ditto.
-       * gc_dlopen.c (dlopen): Use WRAP_FUNC and REAL_FUNC macros.
-       * include/gc_backptr.h: Include "gc.h".
-       * include/gc_backptr.h: Use extern "C" for the exported functions.
-       * include/gc_mark.h: Ditto.
-       * include/gc_config_macros.h (GC_THREADS): Define the macro if any
-       GC_XXX_THREADS is defined.
-       * include/gc_config_macros.h (_PTHREADS, _POSIX4A_DRAFT10_SOURCE):
-       Move the definitions below the place where GC_NETBSD_THREADS and
-       GC_DGUX386_THREADS are defined.
-       * include/gc_config_macros.h (GC_DLL): Don't define (even if _DLL
-       is defined) for GCC.
-       * include/gc_config_macros.h (GC_API): Define for Cygwin (in the
-       same way as for VC++); define for GCC v4+ (other than already
-       recognized MinGW/Cygwin) as a "default" visibility attribute if
-       GC_DLL is defined.
-       * include/gc_config_macros.h (GC_ATTR_MALLOC, GC_ATTR_ALLOC_SIZE):
-       New macro.
-       * include/gc.h (GC_malloc, GC_malloc_atomic, GC_strdup,
-       GC_malloc_uncollectable, GC_malloc_stubborn, GC_memalign,
-       GC_malloc_atomic_uncollectable, GC_malloc_ignore_off_page,
-       GC_malloc_atomic_ignore_off_page, GC_debug_malloc,
-       GC_debug_malloc_atomic, GC_debug_strdup,
-       GC_debug_malloc_uncollectable, GC_debug_malloc_stubborn,
-       GC_debug_malloc_ignore_off_page,
-       GC_debug_malloc_atomic_ignore_off_page,
-       GC_debug_malloc_replacement): Add GC_ATTR_MALLOC attribute.
-       * include/gc_gcj.h (GC_gcj_malloc, GC_debug_gcj_malloc,
-       GC_gcj_malloc_ignore_off_page): Ditto.
-       * include/gc.h (GC_malloc, GC_malloc_atomic,
-       GC_malloc_uncollectable, GC_malloc_stubborn,
-       GC_malloc_atomic_uncollectable, GC_malloc_ignore_off_page,
-       GC_malloc_atomic_ignore_off_page, GC_debug_malloc,
-       GC_debug_malloc_atomic, GC_debug_malloc_uncollectable,
-       GC_debug_malloc_stubborn, GC_debug_malloc_ignore_off_page,
-       GC_debug_malloc_atomic_ignore_off_page,
-       GC_debug_malloc_replacement: Add GC_ATTR_ALLOC_SIZE attribute
-       (for the first argument).
-       * include/gc_gcj.h (GC_gcj_malloc, GC_debug_gcj_malloc,
-       GC_gcj_malloc_ignore_off_page): Ditto.
-       * include/gc.h (GC_memalign, GC_realloc, GC_debug_realloc,
-       GC_debug_realloc_replacement): Add GC_ATTR_ALLOC_SIZE attribute
-       (for the second argument).
-       * include/gc.h (GC_malloc, GC_malloc_atomic, GC_strdup,
-       GC_malloc_uncollectable, GC_malloc_stubborn, GC_memalign,
-       GC_malloc_atomic_uncollectable, GC_free, GC_base, GC_size,
-       GC_realloc, GC_expand_hp, GC_set_max_heap_size,
-       GC_exclude_static_roots, GC_add_roots, GC_remove_roots,
-       GC_register_displacement, GC_debug_register_displacement,
-       GC_try_to_collect, GC_malloc_ignore_off_page,
-       GC_malloc_atomic_ignore_off_page, GC_debug_malloc,
-       GC_debug_malloc_atomic, GC_debug_strdup,
-       GC_debug_malloc_uncollectable, GC_debug_malloc_stubborn,
-       GC_debug_malloc_ignore_off_page,
-       GC_debug_malloc_atomic_ignore_off_page, GC_debug_free,
-       GC_debug_realloc, GC_debug_malloc_replacement,
-       GC_debug_realloc_replacement, GC_finalization_proc,
-       GC_register_finalizer, GC_debug_register_finalizer,
-       GC_register_finalizer_ignore_self,
-       GC_debug_register_finalizer_ignore_self,
-       GC_register_finalizer_no_order,
-       GC_debug_register_finalizer_no_order,
-       GC_register_finalizer_unreachable,
-       GC_debug_register_finalizer_unreachable,
-       GC_register_disappearing_link,
-       GC_general_register_disappearing_link,
-       GC_unregister_disappearing_link, GC_noop1, GC_warn_proc,
-       GC_set_warn_proc, GC_ignore_warn_proc, GC_fn_type,
-       GC_call_with_alloc_lock, GC_stack_base_func,
-       GC_call_with_stack_base, GC_same_obj, GC_pre_incr, GC_post_incr,
-       GC_is_visible, GC_is_valid_displacement, GC_same_obj_print_proc,
-       GC_is_valid_displacement_print_proc, GC_is_visible_print_proc,
-       GC_malloc_many, GC_CreateThread, GC_beginthreadex,
-       GC_endthreadex): Comment out (or remove if single and meaningless)
-       function argument names (to avoid identifiers out of the name
-       space).
-       * include/gc_gcj.h (GC_init_gcj_malloc, GC_gcj_malloc,
-       GC_debug_gcj_malloc, GC_gcj_malloc_ignore_off_page): Ditto.
-       * include/gc.h (GC_try_to_collect): Update the comment.
-       * include/gc.h (GC_size, GC_register_my_thread): Add const
-       qualifier for the argument referent.
-       * misc.c (GC_size): Ditto.
-       * pthread_support.c (GC_register_my_thread_inner,
-       GC_register_my_thread): Ditto.
-       * win32_threads.c (GC_register_my_thread_inner,
-       GC_register_my_thread): Ditto.
-       * include/gc.h (GC_INIT_CONF_ROOTS): New macro for internal use
-       (define instead of GC_INIT() for Cygwin and AIX).
-       * include/gc.h (GC_DONT_EXPAND, GC_MAX_RETRIES,
-       GC_FREE_SPACE_DIVISOR, GC_FULL_FREQ, GC_TIME_LIMIT, GC_IGNORE_WARN,
-       GC_INITIAL_HEAP_SIZE): Recognize new macro.
-       * include/gc.h (GC_INIT_CONF_DONT_EXPAND, GC_INIT_CONF_MAX_RETRIES,
-       GC_INIT_CONF_FREE_SPACE_DIVISOR, GC_INIT_CONF_FULL_FREQ,
-       GC_INIT_CONF_TIME_LIMIT, GC_INIT_CONF_IGNORE_WARN,
-       GC_INIT_CONF_INITIAL_HEAP_SIZE): New macro for internal use.
-       * include/gc.h (GC_INIT): Use GC_INIT_CONF_XXX macros.
-       * include/gc_mark.h: Prefix GC_H with '_'.
-       * include/gc_mark.h (GC_least_plausible_heap_addr,
-       GC_greatest_plausible_heap_addr, GC_debug_header_size): Use GC_API
-       for the public variable declaration.
-       * include/new_gc_alloc.h (GC_objfreelist_ptr, GC_aobjfreelist_ptr,
-       GC_uobjfreelist_ptr, GC_auobjfreelist_ptr): Ditto.
-       * include/gc_pthread_redirects.h (GC_pthread_create,
-       GC_pthread_sigmask, GC_dlopen, GC_pthread_join, GC_pthread_detach):
-       Use GC_API for the wrapper prototype.
-       * include/gc_pthread_redirects.h (pthread_create, pthread_join,
-       pthread_detach, pthread_sigmask, dlopen): Undefine unconditionally
-       before redirecting.
-       * include/new_gc_alloc.h: Replace GC_incr_mem_freed() with
-       GC_incr_bytes_freed(); remove FIXME.
-       * include/private/gc_priv.h (GC_make_closure,
-       GC_debug_invoke_finalizer, GC_noop): Remove GC_API for the private
-       function.
-       * tests/test.c (GC_print_stats): Handle GC_DLL case regardless of
-       the target.
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff115)
-
-       * finalize.c (GC_general_register_disappearing_link,
-       GC_register_finalizer_inner): Remove unnecessary "ifdef THREADS"
-       guard for LOCK/UNLOCK().
-       * finalize.c (GC_general_register_disappearing_link,
-       GC_register_finalizer_inner): Get GC_oom_fn value before releasing
-       the lock (to prevent data races).
-       * gcj_mlc.c (GC_gcj_malloc, GC_debug_gcj_malloc,
-       GC_gcj_malloc_ignore_off_page): Ditto.
-       * mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
-       * include/gc_inline.h (GC_FAST_MALLOC_GRANS): Use GC_get_oom_fn()
-       instead of GC_oom_fn (to prevent data races).
-       * malloc.c (GC_generic_malloc): Ditto.
-       * mallocx.c (GC_memalign): Ditto.
-       * pthread_support.c (pthread_create): Ditto.
-       * gcj_mlc.c (maybe_finalize): Acquire the lock before setting
-       last_finalized_no value to prevent data races.
-       * include/gc.h (GC_gc_no, GC_get_gc_no, GC_oom_fn, GC_set_oom_fn,
-       GC_set_find_leak, GC_set_finalize_on_demand,
-       GC_set_java_finalization, GC_set_finalizer_notifier,
-       GC_set_dont_expand, GC_set_full_freq, GC_set_non_gc_bytes,
-       GC_set_no_dls, GC_set_free_space_divisor, GC_set_max_retries,
-       GC_set_dont_precollect, GC_set_time_limit, GC_warn_proc): Refine
-       the comment.
-       * misc.c (GC_set_oom_fn): Ditto.
-       * include/gc.h (GC_general_register_disappearing_link): Refine the
-       comment (replace "soft" word with "weak").
-       * misc.c (GC_oom_fn, GC_get_gc_no, GC_get_parallel,
-       GC_set_finalizer_notifier, GC_set_find_leak): Add the comment.
-       * misc.c (GC_set_oom_fn, GC_get_oom_fn, GC_set_finalizer_notifier,
-       GC_get_finalizer_notifier): Use LOCK/UNLOCK to prevent data races.
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff114a, diff114b, diff114c)
-
-       * dbg_mlc.c: Guard include <errno.h> with ifndef MSWINCE; include
-       "private/dbg_mlc.h" before it.
-       * malloc.c: Ditto.
-       * dbg_mlc.c (GC_debug_strdup): Use memcpy() instead of strcpy()
-       for WinCE (since deprecated); evaluate strlen() only once; don't
-       set errno for WinCE.
-       * malloc.c (GC_strdup): Ditto.
-       * dyn_load.c (GC_wnt): Define as macro (FALSE) for WinCE.
-       * include/gc.h (GC_unregister_my_thread): Refine the comment.
-       * include/gc.h (GC_uintptr_t, GC_beginthreadex, GC_endthreadex):
-       Don't declare for WinCE.
-       * include/gc.h (GC_WINMAIN_WINCE_LPTSTR): New macro (WinCE only).
-       * include/gc.h (GC_WinMain): Remove GC_API.
-       * include/gc.h (GC_WinMain): Use GC_WINMAIN_WINCE_LPTSTR for
-       lpCmdLine.
-       * tests/test.c (GC_WinMain): Ditto.
-       * win32_threads.c (main_thread_args, GC_WinMain): Ditto.
-       * include/gc_config_macros.h (ptrdiff_t): Guard with
-       ifndef _PTRDIFF_T_DEFINED; define _PTRDIFF_T_DEFINED macro.
-       * include/private/gc_locks.h: Guard include "atomic_ops.h" with
-       ifdef GC_PTHREADS (and not GC_WIN32_THREADS).
-       * mark.c: Include "atomic_ops.h" if PARALLEL_MARK.
-       * thread_local_alloc.c: Include "atomic_ops.h" if GC_GCJ_SUPPORT.
-       * win32_threads.c: Include "atomic_ops.h" if MPROTECT_VDB.
-       * include/private/gc_locks.h: Use include "atomic_ops.h" instead
-       of include <atomic_ops.h>.
-       * include/private/gc_priv.h: Ditto.
-       * include/private/gc_locks.h (GC_allocate_ml, GC_need_to_lock):
-       Don't export (replace GC_API to "extern").
-       * win32_threads.c (GC_allocate_ml): Don't export.
-       * include/private/gc_priv.h (DebugBreak): Define as macro for
-       WinCE (if not UNDER_CE and DebugBreak is not defined yet).
-       * include/private/gc_priv.h (UNALIGNED): Rename to UNALIGNED_PTRS
-       (since "UNALIGNED" is defined in winnt.h of WinCE).
-       * mark.c (UNALIGNED): Ditto.
-       * include/private/gcconfig.h (ARM32): Recognize _M_ARM and _ARM_.
-       * include/private/gcconfig.h (ALIGNMENT): Check always defined.
-       * include/private/gcconfig.h: Allow GC_WIN32_THREADS for WinCE.
-       * include/private/thread_local_alloc.h: Define USE_WIN32_SPECIFIC
-       for WinCE (since __declspec(thread) is unsupported).
-       * include/private/thread_local_alloc.h (TLS_OUT_OF_INDEXES):
-       Define for WinCE (if undefined).
-       * malloc.c (GC_malloc): Remove outdated comment about disabling
-       signals.
-       * misc.c: Don't include <tchar.h> (since not used anymore and may
-       break TEXT() macro defined in winnt.h).
-       * misc.c (GC_init_inner): Don't use GetModuleHandle() and
-       InitializeCriticalSectionAndSpinCount() for WinCE.
-       * misc.c (GC_init_inner): Replace GetModuleHandleA() with
-       GetModuleHandle() (and use TEXT() macro controlled by UNICODE).
-       * misc.c (LOG_FILE): Remove unused macro; don't use _T() macro.
-       * misc.c (GC_CreateLogFile): New static function (Win32/WinCE
-       only); move the code from GC_write(); replace GETENV() with
-       GetEnvironmentVariable(); replace CreateFileA() with
-       CreateFile(); use TEXT() macro (for Unicode support); replace
-       strcat() with memcpy() (since deprecated in WinCE).
-       * misc.c (GC_write): Define as STATIC.
-       * win32_threads.c (GC_attached_thread): Ditto.
-       * misc.c (GC_write): Use GC_CreateLogFile().
-       * misc.c: Define vsnprintf macro as StringCchVPrintfA for WinCE.
-       * misc.c (GC_abort): Try to invoke MessageBoxA() dynamically
-       (Win32 only) if DONT_USE_USER32_DLL is defined.
-       * misc.c (GC_abort): Duplicate msg to GC log file (for Win32 and
-       WinCE).
-       * misc.c (GC_abort): Use a more user-friendly abort if
-       NO_DEBUGGING (Win32 only).
-       * os_dep.c: Include "atomic_ops.h" only if MPROTECT_VDB (and
-       THREADS).
-       * os_dep.c (detect_GetWriteWatch): Use TEXT() for GetModuleHandle
-       (for Unicode support); check GetModuleHandle() result.
-       * tests/test.c: Don't define assert for WinCE (since may be
-       redefined by "assert.h" included from libatomic_ops).
-       * tests/test.c (FAIL): Define as ABORT for all targets (except
-       for PCR).
-       * tests/test.c (n_tests): Don't use AO_t.
-       * tests/test.c (check_heap_stats): Don't cast n_tests.
-       * tests/test.c (inc_int_counter): New function (for n_tests atomic
-       incrementation).
-       * tests/test.c (run_one_test): Test GC_memalign() for all targets.
-       * tests/test.c (run_one_test): Avoid unbalanced brackets in
-       #if-#else-#endif blocks.
-       * tests/test.c (run_one_test): Replace AO_fetch_and_add1() and
-       private LOCK/UNLOCK with GC_call_with_alloc_lock(inc_int_counter).
-       * tests/test.c (check_heap_stats): Replace
-       "if (sizeof(char *) > 4)" with "#if CPP_WORDSZ == 64" to suppress
-       "unreachable code" compiler warning.
-       * tests/test.c (WinMain): Set cmd type to LPWSTR (for WinCE
-       "UNDER_CE" mode); else use LPSTR type (for Win32 and WinCE).
-       * tests/test.c (thr_window): Replace "L" string prefix with
-       TEXT().
-       * thread_local_alloc.c: Check THREADS is defined (to prevent other
-       compiler errors and warnings otherwise).
-       * tests/test.c (WinMain): Recognize GC_NO_DLLMAIN macro (for
-       GC_use_DllMain()).
-       * Makefile.direct (GC_NO_DLLMAIN, DONT_IMPORT_GETCURTHREAD): Add
-       the comments for.
-       * win32_threads.c (GC_register_my_thread_inner): Recognize
-       DONT_IMPORT_GETCURTHREAD macro.
-       * win32_threads.c: Recognize GC_NO_DLLMAIN macro (to exclude
-       DllMain support if needed).
-       * win32_threads.c (GC_NO_DLLMAIN): Define implicitly if DllMain
-       thread registration is unsupported for a given configuration.
-       * win32_threads.c (GC_use_DllMain): Update the comment; refine
-       ABORT message.
-       * win32_threads.c (GC_use_DllMain,
-       GC_started_thread_while_stopped, GC_register_my_thread_inner,
-       GC_lookup_thread_inner, GC_delete_gc_thread,
-       GC_allow_register_threads, GC_lookup_pthread,
-       GC_push_thread_structures, GC_stop_world, GC_push_all_stacks):
-       Check for GC_NO_DLLMAIN.
-       * win32_threads.c (GC_Thread_Rep.tm_in_use, GC_attached_thread,
-       DllMain): Don't define if GC_NO_DLLMAIN.
-       * win32_threads.c (GC_stop_world): Declare "i" and "max" local
-       variables only if not GC_NO_DLLMAIN (to suppress compiler
-       warning).
-       * win32_threads.c (GC_mark_thread, start_mark_threads): Use
-       CreateThread() instead of _beginthreadex() for WinCE.
-       * win32_threads.c (MARK_THREAD_STACK_SIZE, WINCE_MAIN_STACK_SIZE):
-       New macros defined (used by start_mark_threads(), WinMain()).
-       * win32_threads.c (GC_thr_init): Exclude parallel-specific code on
-       WinCE for now (since getenv(), GetProcessAffinityMask() and
-       SignalObjectAndWait() are missing on WinCE).
-       * win32_threads.c (GC_thr_init): replace GetModuleHandleA() with
-       GetModuleHandle(); replace CreateEventA() with CreateEvent(); use
-       TEXT() macro (for Unicode support).
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff113)
-
-       * include/gc.h (GC_has_static_roots_func): New typedef (user filter
-       callback).
-       * include/gc.h (GC_register_has_static_roots_callback): Use
-       GC_has_static_roots_func type.
-       * dyn_load.c (GC_has_static_roots,
-       GC_register_has_static_roots_callback): Ditto.
-       * dyn_load.c (GC_has_static_roots,
-       GC_register_has_static_roots_callback): Define on all platforms.
-       * dyn_load.c (GC_register_dynlib_callback,
-       GC_register_dynamic_libraries, GC_init_dyld): Replace K&R-style
-       functions definition with the ANSI C one.
-       * dyn_load.c (GC_register_dynlib_callback): Use new local variable
-       "callback" (initialized from GC_has_static_roots) to minimize data
-       races.
-       * dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr,
-       GC_cond_add_roots): Define as STATIC.
-       * mark_rts.c (GC_remove_roots_inner): Ditto.
-       * dyn_load.c (GC_dyld_image_add): Don't call GC_add_roots() for
-       sections smaller than pointer size (just to avoid acquiring the
-       lock unnecessarily).
-       * dyn_load.c (GC_dyld_name_for_hdr): Define unconditionally (not
-       only for DARWIN_DEBUG).
-       * dyn_load.c (GC_dyld_image_add): Replace GC_add_roots() call with
-       LOCK + GC_add_roots_inner() + UNLOCK.
-       * dyn_load.c (GC_dyld_image_add): Call GC_has_static_roots() user
-       callback (if set) holding the lock; if it returns 0 then don't call
-       GC_add_roots_inner() for that region.
-       * dyn_load.c (GC_register_has_static_roots_callback): Put
-       "callback" value to GC_has_static_roots on all platforms.
-       * dyn_load.c (GC_has_static_roots): Update the comments.
-       * include/gc.h (GC_exclude_static_roots, GC_add_roots,
-       GC_remove_roots, GC_register_has_static_roots_callback): Ditto.
-       * include/private/gc_priv.h (struct roots): Ditto.
-       * include/private/gc_priv.h (GC_remove_roots_inner): Move prototype
-       to mark_rts.c and declare it as STATIC.
-       * include/private/gc_priv.h (GC_exclude_static_roots_inner): New
-       prototype.
-       * dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr): Use
-       GC_exclude_static_roots_inner() instead of GC_exclude_static_roots.
-       * misc.c (GC_init_inner): Ditto.
-       * mark_rts.c (GC_exclude_static_roots_inner): New function (move
-       all the code from GC_exclude_static_roots(); add the comment.
-       * mark_rts.c (GC_add_roots_inner, GC_exclude_static_roots_inner):
-       add alignment assertion for the lower bound; add assertion for the
-       lower bound to be less than the upper one.
-       * mark_rts.c (GC_add_roots_inner, GC_exclude_static_roots): Adjust
-       the upper bound (round down to be of a pointer-aligned value);
-       return in case of an empty range.
-       * mark_rts.c (GC_exclude_static_roots): Acquire the lock and call
-       GC_exclude_static_roots_inner().
-       * mark_rts.c (GC_remove_roots): Quickly check the bounds and return
-       in case of a do-nothing case (before acquiring the lock).
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff112)
-
-       * finalize.c (GC_fail_count): New external variable declaration.
-       * finalize.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested): New function declarations (if THREADS
-       only).
-       * finalize.c (GC_finalizer_nested, GC_finalizer_skipped): New
-       static global variables (used internally by GC_finalize() and
-       GC_check_finalizer_nested()).
-       * finalize.c (GC_check_finalizer_nested): New static function
-       definition (only if not THREADS, used internally by
-       GC_notify_or_invoke_finalizers() to minimize the probability of
-       a deep recursion when a client finalizer tries to allocate GC
-       memory).
-       * finalize.c (GC_finalize): Reset GC_finalizer_nested value (or
-       call GC_reset_finalizer_nested()) if last heap expansion failed.
-       * finalize.c (GC_notify_or_invoke_finalizers): Access GC_gc_no,
-       GC_finalizer_now, GC_finalize_on_demand, GC_finalizer_notifier,
-       last_finalizer_notification variables holding the lock (to avoid
-       data races).
-       * finalize.c (GC_finalizer_notifier): Add comment.
-       * finalize.c (GC_notify_or_invoke_finalizers): Add "quick" check
-       for an empty finalization queue (only if THREADS and not
-       KEEP_BACK_PTRS/MAKE_BACK_GRAPH).
-       * finalize.c (GC_notify_or_invoke_finalizers): Call
-       GC_check_finalizer_nested() and skip GC_invoke_finalizers() call
-       if appropriate.
-       * include/private/pthread_support.h (GC_Thread_Rep): Add unsigned
-       finalizer_nested and finalizer_skipped fields (for internal use
-       by the multi-threaded GC_check_finalizer_nested()).
-       * win32_threads.c (GC_Thread_Rep): Ditto.
-       * pthread_support.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested): New function definitions (the
-       multi-threaded variants of that in finalize.c).
-       * win32_threads.c (GC_reset_finalizer_nested,
-       GC_check_finalizer_nested): Ditto.
-
-2009-09-10  Ivan Maidanski <ivmai@mail.ru>
-       (diff103_cvs - resembling diff78, diff88_cvs, diff99_cvs,
-       diff100_cvs, diff101_cvs, diff102_cvs)
-
-       * alloc.c (GC_stopped_mark): Remove GC_log_printf("") (not needed
-       anymore and GCC produces a warning for it).
-       * alloc.c (GC_stopped_mark): Adjust printf argument type
-       specifier.
-       * backgraph.c: Include dbg_mlc.h before ifdef MAKE_BACK_GRAPH (for
-       the case when the configuration information comes from aconfig
-       file).
-       * checksums.c: Ditto (for gc_priv.h and CHECKSUMS, respectively).
-       * include/gc_allocator.h (GC_ATTR_UNUSED): Use "__unused__"
-       keyword instead of "unused".
-       * include/gc_allocator.h: Fix typos in comments.
-       * thread_local_alloc.c: Ditto.
-       * include/javaxfc.h (GC_finalize_all): Update comment.
-       * include/private/gc_priv.h (GC_API_PRIV): New macro (defined as
-       GC_API and serves only as a marker for the private but exported
-       symbols used by test.c only).
-       * include/private/gc_priv.h (GC_abort, GC_arrays, GC_is_marked,
-       GC_printf, GC_err_printf, GC_log_printf): Replace GC_API decl with
-       GC_API_PRIV one.
-       * include/private/gc_priv.h (GC_fo_entries): Don't export it
-       outside a DLL.
-       * include/private/gc_priv.h (GC_ATTR_FORMAT_PRINTF): New macro
-       designated to check the arguments correctness of printf-like
-       functions (currently works only for GCC v3+).
-       * include/private/gc_priv.h (GC_printf, GC_err_printf,
-       GC_log_printf): Use GC_ATTR_FORMAT_PRINTF attribute.
-
-2009-09-03  Hans Boehm <Hans.Boehm@hp.com> (really Loren J. Rittle)
-
-       * dyn_load.c (HAVE_DL_ITERATE_PHDR): Break definition from use.
-       Define for FreeBSD 7.0+.
-
-2009-09-02  Hans Boehm <Hans.Boehm@hp.com> (with help from Victor Ivrii and
-                                           others)
-
-       * mach_dep.c: Don't include ucontext.h with NO_GETCONTEXT.
-
-2009-08-19  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_gcj.h (GC_init_gcj_malloc): Improve descriptive
-       comment.
-
-2009-08-11  Hans Boehm <Hans.Boehm@hp.com>
-       (Replacement for Ivan Maidanski's diff99_cvs.  Hopefully fixes
-       the same bugs, and then some.)
-
-       * allchblk.c (GC_merge_unmapped): Don't assume that adjacent
-       free blocks have different mapping status.  Correctly handle gap
-       between blocks.
-       (GC_split_block): Remove dead code setting hb_flags.  Add comment.
-       (GC_allochblk): Split blocks also in generational-only mode.
-       * os_dep.c (GC_unmap_gap): Don't really use munmap.
-
-2009-08-08  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (Mistakenly omitted from last check-in)
-
-       * include/private/gc_priv.h (GC_unmapped_bytes): Define as 0 for
-       not USE_MUNMAP case.
-
-2009-08-07  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       diff111 (supersedes diff101_cvs which, in turn, resembles diff52,
-       diff75, diff83 partly)
-
-       * Makefile.direct (MARK_BIT_PER_OBJ, PRINT_BLACK_LIST,
-       USE_PROC_FOR_LIBRARIES): Fix typo in the comments.
-       * Makefile.direct (USE_MMAP, USE_MUNMAP, THREAD_LOCAL_ALLOC,
-       PARALLEL_MARK, STATIC): Update the comments.
-       * include/private/gcconfig.h (GC_PREFER_MPROTECT_VDB): New macro
-       recognized (only if MPROTECT_VDB).
-       * Makefile.direct (DONT_USE_USER32_DLL, GC_PREFER_MPROTECT_VDB):
-       Add the comments for.
-       * os_dep.c (detect_GetWriteWatch): Recognize "GC_USE_GETWRITEWATCH"
-       environment variable (only if MPROTECT_VDB, if the variable is
-       unset when GC_PREFER_MPROTECT_VDB macro controls the strategy).
-       * doc/README.environment (GC_USE_GETWRITEWATCH): New variable.
-       * include/private/gcconfig.h (MPROTECT_VDB): Add FIXME for
-       USE_MUNMAP and PARALLEL_MARK cases (to relax the conditions in
-       the future).
-       * misc.c (GC_get_heap_size, GC_get_free_bytes): Ignore the memory
-       space returned to OS (GC_unmapped_bytes).
-       * include/gc.h (GC_get_heap_size, GC_get_free_bytes): Update the
-       comments.
-       * misc.c (GC_get_unmapped_bytes): New API function.
-       * include/gc.h (GC_get_unmapped_bytes): New API prototype.
-       * os_dep.c (GC_dirty_init): Move "ifdef GWW_VDB" block out of
-       "ifdef MSWIN32" one (for Cygwin).
-
-2009-08-01  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       diff100_cvs (diff51 and diff55, partly)
-
-       * pthread_support.c (GC_allow_register_threads): New API function.
-       * win32_threads.c (GC_allow_register_threads): Ditto.
-       * include/gc.h (GC_allow_register_threads): New API prototype.
-       * include/gc.h (GC_register_my_thread, GC_unregister_my_thread):
-       Update the comments.
-       * pthread_support.c (GC_register_my_thread): Check the collector
-       is in the multi-threaded mode.
-       * win32_threads.c (GC_register_my_thread): Ditto.
-
-2009-07-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * finalize.c (GC_finalize_all): Always call GC_invoke_finalizers
-       instead, following Ivan's original patch.
-
-2009-06-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * allchblk.c (GC_allochblk_nth): Add assertion.
-       * checksums.c: Add GC_record_fault, GC_was_faulted,
-       CC_n_faulted_dirty_errors.
-       (GC_check_dirty): Remove register declarations, print
-       dirty bit errors on faulted pages.
-       * os_dep.c (GC_write_fault_handler): Call GC_record_fault().
-       * os_dep.c (GC_remove_protection): Compute index correctly.
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_version.h, configure.ac, doc/README:
-       Change to version 7.2alpha3.
-       * configure: Regenerate.
-
-[7.2alpha2]
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_version.h, configure.ac, doc/README:
-       Change to version 7.2alpha2.
-       * configure: Regenerate.
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidanski)
-       diff98_cvs(resembling diff3, diff27, diff59, diff61, diff66,
-       diff73 partly)
-
-       * dbg_mlc.c (GC_print_smashed_obj): Convert a group of printf()
-       calls into a single one (for output atomicity).
-       * typd_mlc.c (GC_calloc_explicitly_typed): Don't declare and use
-       GC_finalization_failures variable; check the result of
-       GC_general_register_disappearing_link() (for lack of memory)
-       instead.
-       * finalize.c (GC_finalization_failures): Remove unused global
-       variable.
-       * finalize.c (GC_general_register_disappearing_link,
-       GC_general_register_disappearing_link): Don't update the value of
-       GC_finalization_failures (since unused).
-       * include/private/gc_pmark.h (PUSH_ONE_CHECKED_STACK,
-       GC_PUSH_ONE_STACK, GC_PUSH_ONE_HEAP): The first parameter is of
-       word type now (as FIXUP_POINTER requires numeric argument).
-       * finalize.c (GC_ignore_self_finalize_mark_proc): GC_PUSH_ONE_HEAP
-       requires the first parameter of word type.
-       * mark.c (PUSH_GRANULE): Ditto.
-       * mark.c (GC_push_one, GC_push_all_eager): Ditto (for
-       GC_PUSH_ONE_STACK).
-       * finalize.c (GC_finalize_all): Call GC_invoke_finalizers() or
-       GC_finalizer_notifier directly, instead
-       of GC_INVOKE_FINALIZERS() to prevent infinite looping.
-       * include/javaxfc.h: Clarify GC_finalize_all comment.
-       * gcj_mlc.c: Include gc_pmark.h before "ifdef GC_GCJ_SUPPORT" (not
-       after) for configuration information.
-       * gcj_mlc.c (GC_gcj_malloc_ignore_off_page): Add comment.
-       * gcj_mlc.c (GC_gcj_malloc_ignore_off_page): Check "op" local
-       variable for NULL before dereferencing it, return GC_oom_fn() in
-       this case.
-       * typd_mlc.c (GC_malloc_explicitly_typed,
-       GC_malloc_explicitly_typed_ignore_off_page): Transform the code to
-       suppress compiler warning (for uninitialized "lg" variable).
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com>
-
-       * win32_threads.c (GC_unregister_my_thread): add false assertion
-       in unreachable code.
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       diff97_cvs (resembling diff43, diff51, diff67, diff76, diff83 partly)
-
-       * pthread_support.c (GC_inner_start_routine): Don't release the
-       GC lock between GC_register_my_thread_inner() and
-       GC_init_thread_local() calls (post the "registered" even after
-       calling GC_init_thread_local()).
-       * win32_threads.c (GC_register_my_thread, GC_unregister_my_thread):
-       Use GC_lookup_thread_inner() instead of GC_lookup_thread() and
-       acquire the GC lock only once.
-       * win32_threads.c (GC_thr_init): Call GC_register_my_thread_inner()
-       directly instead of GC_register_my_thread() since I_HOLD_LOCK
-       and our (main) thread is not registered yet (add assertion for it).
-       * win32_threads.c (GC_init_parallel): Call GC_lookup_thread_inner()
-       directly instead of GC_lookup_thread() (since I_HOLD_LOCK).
-       * win32_threads.c (GC_lookup_thread): Remove unused function.
-       * win32_threads.c: Remove "#error GC_DLL untested with Cygwin".
-       * win32_threads.c (GC_win32_dll_threads): Define as FALSE macro
-       also if THREAD_LOCAL_ALLOC or GC_PTHREADS.
-       * win32_threads.c (GC_use_DllMain): Call ABORT also if GC_PTHREADS
-       (for Cygwin).
-       * win32_threads.c (GC_push_stack_for): Add parentheses around "&&"
-       (inside GC_ASSERT) to prevent compiler warning.
-       * win32_threads.c (GC_push_all_stacks): Remove FIXME for
-       PARALLEL_MARK.
-       * win32_threads.c (MAX_MARKERS, GC_markers): Move the definitions
-       to a place before GC_get_next_stack().
-       * win32_threads.c (marker_sp, marker_bsp): New static arrays (same
-       as in pthread_support.c).
-       * win32_threads.c (marker_last_stack_min): New static arrays (the
-       same semantics as for last_stack_min of GC_Thread_Rep).
-       * win32_threads.c (GC_get_next_stack): Handle marker threads.
-       * win32_threads.c (GC_mark_thread): Save the current stack pointer
-       to marker_[b]sp.
-       * win32_threads.c (start_mark_threads): Initialize
-       marker_last_stack_min elements (to "unset" value).
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff96_cvs, partly from diff45 and diff75)
-
-       * misc.c (GC_set_oom_fn, GC_set_all_interior_pointers,
-       GC_set_finalize_on_demand, GC_set_java_finalization,
-       GC_set_finalizer_notifier, GC_set_dont_expand, GC_set_full_freq,
-       GC_set_no_dls, GC_set_free_space_divisor, GC_set_max_retries,
-       GC_set_dont_precollect, GC_set_time_limit, GC_set_warn_proc):
-       Change return type to void (these API functions no longer return
-       the old value).
-       * include/gc.h: Ditto (for prototypes).
-       * tests/test.c (main, WinMain, test): Remove explicit cast to void
-       for GC_set_warn_proc().
-       * misc.c (GC_get_oom_fn, GC_get_all_interior_pointers,
-       GC_get_finalize_on_demand, GC_get_java_finalization,
-       GC_get_finalizer_notifier, GC_get_dont_expand, GC_get_full_freq,
-       GC_get_no_dls, GC_get_free_space_divisor, GC_get_max_retries,
-       GC_get_dont_precollect, GC_get_time_limit, GC_get_warn_proc): New
-       API functions (to get the current value of the corresponding R/W
-       public variables).
-       * include/gc.h: Ditto (for prototypes).
-       * include/gc.h (GC_set_warn_proc, GC_set_free_space_divisor):
-       Update the comment.
-       * misc.c (GC_ignore_warn_proc): New API call-back function.
-       * include/gc.h (GC_ignore_warn_proc): Ditto (for the prototype).
-       * misc.c (GC_set_find_leak, GC_get_find_leak, GC_set_non_gc_bytes,
-       GC_get_non_gc_bytes): New API setter and getter functions (for the
-       public GC_find_leak and GC_non_gc_bytes variables, respectively).
-       * include/gc.h: Ditto (for prototypes).
-       * include/gc.h (GC_memalign): Add proto to GC API.
-       * mallocx.c (GC_memalign): Use GC_API, GC_CALL for the definition.
-       * tests/test.c (run_one_test): Test GC_memalign() on Win32 too,
-       remove GC_memalign() proto.
-       * misc.c (GC_write): Use multi-byte (A) variants of Win32
-       GetModuleFileName() and CreateFile().
-       * tests/test.c (main): Replace K&R-style function definition with the
-       ANSI C one.
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski and
-                                           George Talbot)
-       (diff95_cvs)
-
-       * include/private/gcconfig.h (PLATFORM_ANDROID): New macro
-       recognized (for Linux on ARM32 without glibc).
-       * include/private/gcconfig.h (STRTOULL): Define for all targets
-       (define as "strtoul" for most targets except for LLP64/Win64).
-       * misc.c (GC_init_inner): Use STRTOULL instead of atoi/atol()
-       (cast the result to word type) to decode values of "GC_TRACE",
-       "GC_INITIAL_HEAP_SIZE", "GC_MAXIMUM_HEAP_SIZE" environment
-       variables.
-
-2009-06-12  Hans Boehm <Hans.Boehm@hp.com> (Really mostly George Talbot)
-
-       * include/gc_allocator.h: Add gc_allocator_ignore_off_page.
-       * tests/test_cpp.cc: Add call to gc_allocator_ignore_off_page.
-
-2009-06-11  Hans Boehm <Hans.Boehm@hp.com>
-
-       * win32_threads.c (GC_release_mark_lock): Correct misspelling of
-       AO_load in assertion.
-
-2009-06-11  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidanski)
-       (diff93_cvs: resembling diff27, diff30, diff43, diff44, diff66,
-       diff76, diff79, diff83 partly)
-
-       * win32_threads.c (MAX_THREADS): Define as 1 if GC_win32_dll_threads
-       is defined as FALSE (otherwise the size of dll_thread_table is near
-       200 KiB for 32-bit).
-       * win32_threads.c (GC_use_DllMain): Optimize for THREAD_LOCAL_ALLOC.
-       * win32_threads.c (GC_Thread_Rep): Add backing_store_end and
-       backing_store_ptr fields for IA64 support.
-       * win32_threads.c (GC_register_my_thread_inner): Set
-       backing_store_end field to reg_base value for IA64 (same as in
-       pthread_support.c).
-       * win32_threads.c (SET_PTHREAD_MAP_CACHE): Put parentheses in the
-       "right" places, remove ';'.
-       * win32_threads.c (GC_fault_handler_lock): Declare only
-       if MPROTECT_VDB (and not WinCE).
-       * win32_threads.c (GC_suspend): Acquire and release
-       GC_fault_handler_lock only if MPROTECT_VDB (and not WinCE).
-       * win32_threads.c (GC_suspend): Define as STATIC.
-       * win32_threads.c (GC_push_stack_for): Fix WARN() format specifier
-       (should be word-compliant, "%p" is used w/o "0x"), don't cast sp.
-       * win32_threads.c (GC_push_all_stacks): Convert a group of printf()
-       calls into a single one (for output atomicity).
-       * win32_threads.c (GC_get_next_stack): Unprotect thread descriptor
-       before altering its last_stack_min ("thread" variable is added).
-       * win32_threads.c (GC_get_next_stack): Remove unnecessary checks for
-       "s" is non-NULL.
-       * win32_threads.c (GC_get_next_stack): Don't call GC_may_be_in_stack
-       if WinCE.
-       * win32_threads.c (GC_get_next_stack): Pass current_min value to
-       GC_get_stack_min as-is (without -1).
-       * win32_threads.c (GC_wait_marker): Remove FIXME and use "release"
-       version of AO_fetch_and_sub1().
-       * win32_threads.c (GC_win32_start_inner, GC_win32_start): convert int
-       to pointer (and vice versa) thru word type to suppress warnings.
-       * win32_threads.c (GC_mark_mutex_waitcnt): Fix comment, always
-       access atomically.
-       * misc.c: Change GC_THREADS tests back to THREADS.
-
-
-2009-06-11  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff92_cvs: resembling diff20, diff27, diff34, diff38, diff43, diff45,
-       diff46, diff56, diff60, diff62, diff74, diff75, diff81 partly)
-
-       * allchblk.c (GC_print_hblkfreelist, GC_dump_regions): Convert
-       a group of printf() calls into a single one (for output atomicity).
-       * include/gc.h (GC_set_all_interior_pointers, GC_set_full_freq,
-       GC_set_time_limit): New prototypes.
-       * misc.c (GC_set_all_interior_pointers, GC_set_full_freq,
-       GC_set_time_limit): New public setter/getter functions.
-       * include/gc.h: Fix (and remove outdated) comments for thread-local
-       allocation.
-       * include/gc.h: Fix typos in comments.
-       * misc.c (GC_init_inner, GC_printf): Ditto.
-       * include/gc.h (GC_unregister_disappearing_link): Refine comment.
-       * include/gc.h (GC_stack_base): Recognize _M_IA64 macro.
-       * misc.c (GC_stack_last_cleared, GC_min_sp, GC_high_water,
-       GC_bytes_allocd_at_reset, DEGRADE_RATE): Define only if THREADS.
-       * misc.c (GC_stack_last_cleared, GC_min_sp, GC_high_water,
-       GC_bytes_allocd_at_reset): Define as STATIC.
-       * misc.c (GC_get_heap_size, GC_get_free_bytes,
-       GC_get_bytes_since_gc, GC_get_total_bytes): Acquire the GC lock to
-       avoid data races.
-       * misc.c (GC_write_cs): Define only if THREADS (Win32/WinCE only).
-       * misc.c (GC_init_inner): Initialize GC_write_cs only if THREADS.
-       * misc.c (GC_init_inner): Use GC_INITIAL_HEAP_SIZE (if available) to
-       set the default initial value of initial_heap_sz.
-       * misc.c (GC_deinit): Destroy GC_write_cs only if THREADS.
-       * misc.c (GC_init_inner): Fix WARN() format specifier (should be
-       word-compliant, "%p" is used w/o "0x").
-       * misc.c (GC_init_inner): Don't recognize "GC_PAUSE_TIME_TARGET"
-       environment variable if SMALL_CONFIG.
-       * misc.c (GC_init_inner): Recognize "GC_FULL_FREQUENCY" environment
-       variable to set initial GC_full_freq value (if not SMALL_CONFIG).
-       * doc/README.environment (GC_FULL_FREQUENCY): Add information.
-       * doc/README.environment (GC_MARKERS): Refine information.
-       * misc.c (GC_init_inner): Change GC_ASSERT to GC_STATIC_ASSERT where
-       possible.
-       * misc.c (IF_NEED_TO_LOCK): New macro (instead of GC_need_to_lock).
-       * misc.c (GC_write): Use IF_NEED_TO_LOCK for handling GC_write_cs.
-       * misc.c (GC_abort): Don't define if SMALL_CONFIG.
-       * misc.c (GC_abort): Directly use WRITE() instead of GC_err_printf()
-       (to prevent possible infinite recursion).
-
-2009-06-09  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       diff90_cvs (resembling diff28, diff30, diff32, diff34, diff47,
-       diff49, diff60, diff62, diff66, diff67, diff68, diff72 partly)
-
-       * finalize.c (finalization_mark_proc): Replace K&R-style declaration
-       with ANSI C one.
-       * finalize.c (GC_grow_table, GC_register_finalizer_inner,
-       GC_enqueue_all_finalizers): Remove outdated comments about disabling
-       signals.
-       * finalize.c (GC_general_register_disappearing_link): Fix assertion
-       to catch NULL "obj" value.
-       * finalize.c (GC_unregister_disappearing_link): Check "link"
-       alignment before gaining the lock.
-       * finalize.c (GC_finalize): Refine comment.
-       * finalize.c (GC_finalize): Fix WARN() format specifier (should be
-       word-compliant, "%p" is used w/o "0x").
-       * finalize.c (GC_invoke_finalizers): Initialize "bytes_freed_before"
-       variable (to 0) to suppress compiler warning.
-       * include/gc_gcj.h (MARK_DESCR_OFFSET): Move to private/gc_pmark.h.
-       * include/gc_gcj.h: add "extern C" header and tail.
-       * include/private/gc_pmark.h: Remove GC_do_parallel_mark(),
-       GC_help_wanted, GC_helper_count, GC_active_count declarations (move
-       the comments to the place where these symbols are defined in mark.c).
-       * mark.c: Add STATIC GC_do_parallel_mark() declaration (for use by
-       GC_mark_some_inner, if PARALLEL_MARK only).
-       * mark.c (GC_mark_some_inner, GC_help_wanted, GC_helper_count,
-       GC_active_count, GC_do_parallel_mark): Define as STATIC.
-       * pthread_support.c (GC_mark_thread): Ditto.
-       * typd_mlc.c (GC_explicit_typing_initialized, GC_explicit_kind,
-       GC_array_kind, GC_ext_descriptors, GC_ed_size, GC_avail_descr,
-       GC_typed_mark_proc_index, GC_array_mark_proc_index, GC_eobjfreelist,
-       GC_arobjfreelist): Ditto.
-       * include/private/gc_pmark.h (PUSH_CONTENTS_HDR): Change GC_ASSERT
-       for HBLKSIZE to GC_STATIC_ASSERT.
-       * mark.c (GC_noop): Define for Borland C the same as for Watcom.
-       * mark.c (GC_noop, GC_mark_and_push): Add ARGSUSED tag.
-       * pthread_support.c (GC_do_blocking_inner): Ditto.
-       * mark.c (GC_mark_from): Initialize "limit" (to 0) in the default
-       switch branch to suppress compiler warning.
-       * mark.c (GC_return_mark_stack): Append new-line to printf message.
-       * mark.c: Remove unused GC_true_func(), GC_PUSH_ALL().
-       * pthread_support.c (GC_mark_thread): Add dummy "return 0" to
-       suppress compiler warning.
-       * pthread_support.c (start_mark_threads): Move the code limiting
-       "GC_markers" value (and printing a warning) to GC_thr_init().
-       * pthread_support.c (GC_thr_init): Silently limit "GC_markers" value
-       if based on the number of CPUs.
-       * pthread_support.c (GC_thr_init): Treat incorrect "GC_markers"
-       values as one.
-       * pthread_support.c (GC_register_my_thread_inner): Add a check for
-       "stack_end" is non-NULL (the same as in win32_threads.c).
-       * pthread_support.c (pthread_create): Call GC_oom_fn before giving up
-       with ENOMEM.
-       * thread_local_alloc.c (return_single_freelist): Convert "for" loop
-       to "while" one to suppress "possible extraneous ';'" warning.
-
-2009-06-08  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski
-                                           and Zoltan Varga)
-
-       * darwin_stop_world.c (GC_push_all_stacks): Recognize ARM32.
-       * include/private/gc_priv.h (GC_THREAD_STATE_T): Define for ARM32
-       (Darwin only).
-       * include/private/gcconfig.h: Add machine-specific part for DARWIN.
-       * include/private/gcconfig.h (ARM32): Define config parameters for
-       DARWIN (iPhone).
-
-2009-06-08  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff91_cvs: resembling diff3, diff27, diff33, diff45, diff47, diff49,
-       diff60, diff67, diff68 partly)
-
-       * alloc.c (GC_FULL_FREQ, GC_DONT_EXPAND, GC_FREE_SPACE_DIVISOR,
-       GC_TIME_LIMIT): New macros (used to control the default initial
-       values of GC_full_freq variable, GC_dont_expand,
-       GC_free_space_divisor, GC_time_limit respectively).
-       * include/private/gc_priv.h (TIME_LIMIT): Remove macro (replaced
-       with GC_TIME_LIMIT in alloc.c).
-       * alloc.c (GC_need_full_gc, GC_stopped_mark, GC_finish_collection):
-       Define as STATIC.
-       * mark_rts.c (GC_push_current_stack, GC_push_gc_structures): Ditto.
-       * include/private/gc_priv.h (GC_stopped_mark, GC_finish_collection):
-       Move the prototypes to alloc.c, make STATIC.
-       * include/private/gc_priv.h (GC_push_current_stack,
-       GC_push_gc_structures, GC_push_regs_and_stack): Remove prototypes
-       (move the comments to the places where these functions are defined).
-       * mach_dep.c (GC_push_regs_and_stack): Move to mark_rts.c and define
-       as STATIC.
-       * alloc.c (GC_timeout_stop_func, GC_stopped_mark,
-       GC_print_heap_sects): Convert a group of printf() calls into
-       a single one (for output atomicity).
-       * mark_rts.c (GC_print_static_roots): Ditto.
-       * alloc.c (GC_stopped_mark): Output blank line (when logging) for
-       convenience to delimit collections.
-       * alloc.c (GC_clear_a_few_frames): Rename NWORDS to CLEAR_NWORDS;
-       make "frames" local variable volatile (to prevent optimization).
-       * alloc.c (GC_try_to_collect_inner, GC_stopped_mark,
-       GC_finish_collection, GC_allocobj): Remove outdated comments about
-       disabling signals.
-       * include/private/gc_priv.h (GC_register_displacement_inner,
-       GC_gcollect_inner): Ditto.
-       * alloc.c (GC_try_to_collect_inner, GC_stopped_mark,
-       GC_finish_collection): Initialize "start_time" local variable (to 0)
-       to suppress compiler warning.
-       * mark_rts.c (GC_add_roots_inner): Ditto (for "old" variable).
-       * alloc.c (GC_RATE, MAX_PRIOR_ATTEMPTS): Guard with "ifndef".
-       * include/private/gc_priv.h (clock, GC_stop_world, GC_start_world,
-       GC_acquire_mark_lock, GC_release_mark_lock, GC_notify_all_builder,
-       GC_wait_for_reclaim, GC_notify_all_marker, GC_wait_marker): Replace
-       K&R-style function prototypes with ANSI C one.
-       * include/private/gc_priv.h (ABORT): Define as DebugBreak() for
-       Win32/WinCE if SMALL_CONFIG (the same as in GC_abort()).
-       * include/private/gc_priv.h (ROUNDED_UP_WORDS, abs): Remove unused
-       macros.
-       * include/private/gc_priv.h (GC_noop): Declare for Borland C the
-       same as for Watcom.
-       * mark_rts.c (GC_push_conditional_with_exclusions): Add ARGSUSED tag.
-
-2009-06-04  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff89_cvs, resembling diff3, diff27, diff34, diff38, diff47, diff49,
-       diff59, diff60, diff66, diff67, diff68, diff69a, diff70, diff81
-       partly)
-
-       * dbg_mlc.c (GC_store_debug_info, GC_store_debug_info_inner): Remove
-       outdated comment about disabling signals.
-       * mallocx.c (GC_malloc_uncollectable,
-       GC_malloc_atomic_uncollectable): Ditto.
-       * os_dep.c: Ditto.
-       * dbg_mlc.c (GC_debug_change_stubborn, GC_debug_end_stubborn_change):
-       Add ARGSUSED tag.
-       * pthread_stop_world.c (GC_suspend_handler,
-       GC_suspend_handler_inner): Ditto.
-       * dbg_mlc.c (GC_debug_free, GC_debug_realloc): Fix printf message.
-       * dbg_mlc.c (GC_debug_realloc): Set "result" to NULL in the default
-       switch branch to suppress compiler warning.
-       * dyn_load.c (GC_init_dyld): Use ABORT() instead of GC_abort().
-       * include/private/darwin_semaphore.h (sem_init): Ditto.
-       * include/javaxfc.h: Replace "GC_H" with "_GC_H".
-       * include/private/dbg_mlc.h (GC_has_other_debug_info,
-       GC_store_debug_info): Replace K&R-style function prototypes with ANSI
-       C one.
-       * include/private/gcconfig.h (GC_FreeBSDGetDataStart, real_malloc,
-       GC_win32_get_mem, GC_wince_get_mem, GC_unix_get_mem): Ditto.
-       * include/private/pthread_support.h (GC_stop_init): Ditto.
-       * include/private/gcconfig.h: Refine comment about setting
-       GC_stackbottom.
-       * include/private/gcconfig.h (FIXUP_POINTER): Put parentheses in the
-       "right" places.
-       * include/private/pthread_support.h (GC_Thread_Rep): Refine comment
-       for "stack_end" field.
-       * mallocx.c (GC_malloc_uncollectable,
-       GC_malloc_atomic_uncollectable): Remove cast to undefined "hbklk".
-       * os_dep.c (GC_USE_MEM_TOP_DOWN): New macro (for setting
-       GC_mem_top_down to MEM_TOP_DOWN for debug purposes).
-       * os_dep.c (GC_gww_read_dirty, catch_exception_raise): Fix WARN()
-       format specifier (should be word-compliant, "%p" is used w/o "0x").
-       * pthread_stop_world.c (GC_suspend_handler_inner): Ditto.
-       * os_dep.c (GC_dirty_init): Append new-line to printf messages.
-       * os_dep.c (GC_mprotect_thread): Fix GC_err_printf message.
-       * os_dep.c (GC_save_callers): Change GC_ASSERT to GC_STATIC_ASSERT.
-       * pthread_stop_world.c (GC_retry_signals, GC_suspend_ack_sem): Define
-       as STATIC.
-       * pthread_stop_world.c (GC_push_all_stacks): Add assertion for that
-       "thread_blocked" is not set for the current thread.
-       * real_malloc.c: Add "extern GC_quiet" to suppress compiler warning.
-       * reclaim.c (GC_reclaim_all): Initialize "start_time" (to 0) to
-       suppress compiler warning.
-
-2009-06-02  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (adding last bit of diff86_cvs)
-
-       * tests/test.c (check_heap_stats): Avoid unbalanced brackets in ifdef.
-
-2009-05-27  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff26)
-
-       * win32_threads.c: restructure parallel marking mutex initialization.
-       * win32_threads.c, alloc.c, darwin_stop_world.c, mallocx.c, mark.c,
-       pthread_stop_world.c, pthread_support.c: Add runtime conditions
-       on GC_parallel were appropriate.
-       * pthread_support.c: Condition marker_bsp on ia64.
-       (GC_segment_is_thread_stack): Fix loop upper bound.
-       * reclaim.c: Limit some assertions to PARALLEL_MARK.
-       * pthread_support.c: Don't acquire mark lock for thread-local
-       allocation.
-       * include/private/gc_priv.h: Don't define parallel mark sync
-       support just for THREAD_LOCAL_ALLOC.
-
-2009-05-27  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff39)
-
-       * include/private/gcconfig.h: refine MINGW32 test.
-       * mark.c: Add win64/gcc tests.
-
-2009-05-27  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff86_cvs, resembling diff28, diff32, diff33, diff38, diff68 partly)
-
-       * test.c (fork_a_thread, reverse_test, alloc8bytes, tree_test,
-       typed_test, run_one_test, check_heap_stats, main, test): Replace
-       all K&R-style function definitions with ANSI C ones.
-       * trace_test.c (main): Ditto.
-       * test.c (GC_COND_INIT): Define as GC_INIT() also in case of
-       THREAD_LOCAL_ALLOC.
-       * test.c (reverse_test): Call fork_a_thread() only if GC_PTHREADS
-       or GC_WIN32_THREADS; remove fork_a_thread() macros definition.
-       * test.c (reverse_test): Use "volatile" when clearing "b" and "c"
-       local variables (to suppress "assigned value is never used"
-       compiler warning).
-       * test.c (tree_test): Use public GC_noop1() instead of private
-       GC_noop().
-       * test.c (typed_test): Ditto.
-       * test.c (check_heap_stats): Define and assign value to
-       "late_finalize_count" local variable only if its value is used
-       (if FINALIZE_ON_DEMAND defined).
-       * test.c (main): Remove DJGPP-specific initialization of
-       GC_stackbottom (not needed anymore, handled in gcconfig.h).
-       * trace_test.c: Guard #define GC_DEBUG with #ifndef.
-       * trace_test.c: Include "gc_backptr.h".
-       * trace_test.c (main): Call GC_INIT().
-       * trace_test.c (main): Add "return 0" statement.
-
-2009-05-25  Hans Boehm <Hans.Boehm@hp.com> (Really Petter Urkedal)
-
-       * dyn_load.c (GC_register_dynlib_callback): Use new index j
-       instead of i in the inner loop.
-
-2009-05-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff85)
-
-       * tests/test.c: Increment n_tests with fetch_and_add when possible,
-       avoiding need to export lock.
-
-2009-05-22  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff63,diff65)
-
-       * include/gc_pthread_redirects.h:
-               - dlfcn.h is included for dlopen() proto before undefining
-               "dlopen" (so, it's possible now to include dlfcn.h after
-               gc.h from user code);
-               - GC_dlopen() proto is added (except for Darwin as
-               it's missing there);
-               - "dlopen" is explicitly undefined (before its redefinition).
-       * include/gc.h:
-               - "process.h" is included besides "windows.h"
-               (for _beginthreadex/_endthreadex); win32 only.
-               - GC_NO_THREAD_DECLS is moved to the right place
-               (before closing "extern C").
-       * pthread_support.c: Fix out of memory handling for Thread_Reps.
-       * win32_threads.c: Don't include process.h on winCE,
-       improve out of memory handling for thread structures, don't
-       define GC_beginthreadex and GC_endthreadex for winCE.
-
-2009-05-22  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski
-       (diff71)
-
-       * tests/test.c: Change gcj vtable decriptor type from size_t to
-       GC_word.
-
-2009-05-22  Hans Boehm <Hans.Boehm@hp.com>
-
-       * gcj_mlc.c: Add comment.
-       * tests/test.c: Change NTEST to NTHREADS.  Fork 5 threads by default.
-       Run reverse_test a second time in each thread.Add comments.
-       Don't rely on AO_fetch_and_add.
-
-2009-05-22  Hans Boehm <Hans.Boehm@hp.com> (Largely from Ludovic Cortes)
-
-       * dyn_load.c (GC_register_dynlib_callback,
-       GC_register_dynamic_libraries_dl_iterate_phdr): Add support
-       for GNU_PT_RELRO relocations.
-
-2009-05-22  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-       (diff61)
-
-       * Makefile, Makefile.direct: GC_SOLARIS_PTHREADS was replaced
-       by GC_SOLARIS_THREADS.
-       * include/gc.h: Improve finalizer documentation.
-       * mips_sgi_mach_dep.s: Replace _MIPS_SIM_ABI32 with _ABIO32.
-       * pthread_stop_world.c, Makefile.dj: Fix typos.
-
-2009-05-21  Hans Boehm <Hans.Boehm@hp.com>
-
-       * win32_threads.c (GC_new_thread): Make first_thread
-       visible to the whole file.
-       (UNPROTECT): New macro.
-       (GC_push_stack_for, GC_suspend, GC_start_world): unprotect
-       thread structures before writing.
-       (GC_suspend): Acquire GC_fault_handler_lock before suspending
-       thread.
-       * os_dep.c: export GC_fault_handler_lock.
-       (GC_remove_protection): Check if already unprotected.
 
-2009-05-20  Hans Boehm <Hans.Boehm@hp.com> (really Ivan Maidanski)
-
-       * doc/README.win32: Add OpenWatcom warning.
-       * include/private/gcconfig.h: Really check it in.
-
-2009-05-19  Hans Boehm <Hans.Boehm@hp.com> (Mostly Ivan Maidanski, Dave Korn)
-
-       * os_dep.c (GC_get_stack_base, windows): Replace with Dave Korn's
-       code from gcc version.
-       * os_dep.c: make gc compilable (optionally) for Cygwin with
-       GetWriteWatch-based virtual dirty bit implementation ("os_dep.c" file).
-       * os_dep.c: Make non-win32 GC_write_fault_handler STATIC.
-       * mark.c (GC_noop): fix declaration definition mismatch for DMC.
-       * include/private/gcconfig.h: Enable MPROTECT_VDB and GWW_VDB for
-       Watcom (Win32 only).  It works.
-
-2009-05-07  Hans Boehm <Hans.Boehm@hp.com> (and Mark Sibly)
-
-       * mach_dep.c: Don't use __builtin_unwind_init for register
-       state on PowerPC/Darwin.
-
-2009-04-24  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/gcdescr.html: Improve description of object freelist
-       structure.
-       * include/private/gc_priv.h: Fix comment for _size_map.
-
-2009-03-16  Hans Boehm <Hans.Boehm@hp.com>
-
-       * os_dep.c (GC_linux_stack_base): Relax sanity test.
-
-2009-03-11  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * include/private/gc_pmark.h (PUSH_CONTENTS_HDR for
-       MARK_BIT_PER_OBJ): Add missing backslash before eoln.
-
-2009-02-28  Hans Boehm <Hans.Boehm@hp.com>
-
-       * misc.c (GC_set_warn_proc): Implicitly intialize GC on
-       non-Cygwin win32.
-
-2009-02-28  Hans Boehm <Hans.Boehm@hp.com> (Really Petr Krajca)
-
-       * configure.ac: Enable thread-local allocation for sparc-linux.
-       * configure: Regenerate.
-
-2009-02-28  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * alloc.c (GC_try_to_collect): Remove duplicate initialization
-       check.
-       * malloc.c (GC_generic_malloc): Remove lw to eliminate single-
-       threaded warnings.
-       * mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
-
-2009-02-28  Hans Boehm <Hans.Boehm@hp.com> (Mostly Ivan Maidansky)
-
-       * allchblk.c, backgraph.c, dbg_mlc.c, dyn_load.c,
-       finalize.c, include/private/gc_pmark.h, malloc.c, mark.c,
-       os_dep.c, pthread_stop_world.c, pthread_support.c, reclaim.c,
-       thread_local_alloc.c.
-       * misc.c: Refine comment.
-
-2009-02-28  Hans Boehm <Hans.Boehm@hp.com>
-
-       * os_dep.c: Define GC_GWW_BUF_LEN more intelligently.  Add FIXME
-       comment.
-
-2009-02-28  Hans Boehm <Hans.Boehm@hp.com> (With input from Ivan Maidansky)
-
-       * win32_threads.c (GC_push_stack_for): Yet another attempt
-       at the stack_min finding logic.  Try to clean up the existing code
-       while minimizing VirtualQuery calls.
-       (GC_win32_start_inner): Register thread before GC_printf.
-       Produce more output with DEBUG_THREADS.
-       *include/gc.h: Update obsolete comments.
-
-2009-02-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * tests/test.c:
-       (gcj_class_struct2): Use cast instead of l suffix.
-       Cast GetLastError to int in various places.
-       Avoid unused result warning from incr/decr macros.
-       Add cast for fake_gcj_mark_proc.
-       Cast GC_gc_no to unsigned in printf.
-
-2009-02-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * include/gc.h: Fix two typos in comments.
-
-2009-02-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * finalize.c: Fix typo in comment.
-
-2008-12-03  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * blacklst.c (GC_print_source_pointer): Don't call GC_print_heap_obj
-       with lock.
-
-2008-12-01  Hans Boehm <Hans.Boehm@hp.com>
-
-       * reclaim.c: (GC_reclaim_block): Scan even nearly full blocks
-       if we are checking for leaks.
-
-2008-11-12  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidansky)
-
-       * win32_threads.c: Remove mark lock spinning.
-       * win32_threads.c, pthread_support.c: Update GC_unlocked_count,
-       GC_spin_count, and GC_block_count using atomic operations.
-       * tests/test.c: Declare n_tests as AO_t only if we have threads.
-
-2008-11-11  Hans Boehm <Hans.Boehm@hp.com>
-       (Really almost entirely Ivan Maidansky)
-
-       * win32_threads.c: Support PARALLEL_MARK.  Make printf arg
-       types agree with format specifiers.  Add missing copyright header.
-       Add STATIC for GC_threads.
-       * include/private/gcconfig.h: Add FIXME comment.
-       * tests/test.c (run_ine_test): Replace LOCK/UNLOCK use with
-       AO_fetch_and_add1_full.  Declare n_tests as AO_t.
-       (WinMain): Don't call GC_use_DllMain.
-       with PARALLEL_MARK or THREAD_LOCAL_ALLOC.
-
-2008-11-10  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * alloc.c (GC_try_to_collect_inner): Don't print redundant
-       GC_bytes_allocd and GC_gc_no.
-       (GC_stopped_mark): Print average world stop time.
-       * include/private/gc_priv.h (MS_TIME_DIFF): Add cast.
-
-2008-11-10  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidansky)
-
-       * misc.c, doc/README.environment: Add support  for
-       GC_FREE_SPACE_DIVISOR and GC-disable-incremental.
-       * include/gc.h: Make GC_set_free_space_divisor correspond to
-       (somewhat unfortunate) reality.
-
-2008-11-07  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       (Mostly improves LLP64 support.)
-       * backgraph.c, checksums.c, dbg_mlc.c, finalize.c, mark.c,
-       misc.c, reclaim.c: Changed some int and long type to word or size_t
-       (and vice versa where appropriate)
-       * gcj_mlc.c, include/private/dbg_mlc.h, include/private/gcconfig.h,
-       include/private/thread_local_alloc.h, mark.c,
-       misc.c, thread_local_alloc.c, win32_threads.c: Added intermediate
-       casts to word type when casting from int to pointer (or pointer
-       to int, or data pointer to code pointer) - just to remove the
-       corresponding compiler warning.
-       * ptr_chck.c (GC_is_visible): cast int const to word type to
-       prevent left shift overflow.
-       * os_dep.c: change the type of GC_mem_top_down global variable
-       (containing a flag) to DWORD.
-       * include/gc_config_macros.h: define GC_SOLARIS_THREADS if GC_THREADS
-       is defined on SunOS x86_64.
-       * misc.c (GC_init_size_map): Ifdef out GC_ASSERT as a workaround
-       for VC++ 2008 amd64 (v15.00.21022.08 for x64) compiler bug
-       (the compiler gets hung if invoked with -Ox -D
-       ALL_INTERIOR_POINTERS -D GC_ASSERTIONS)
-       * backgraph.c: cast GC_gc_no value to unsigned short when
-       assigned/compared to height_gc_no field of back_edges.
-       * os_dep.c (GC_remove_protection): Add ARGSUSED.
-       * win32_threads.c (GC_thread_exit_proc): Remove unused local
-       variable.
-       * mark.c (GC_check_dirty): Move declaration out of func body.
-
-2008-11-06  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/gcinterface.html: Improve REDIRECT_MALLOC documentation.
-       * include/gc.h (GC_register_my_thread): Improve comment.
-
-2008-11-04  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.direct: Add comment for -DCHECKSUMS.
-
-2008-10-27  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * thread_local_alloc.c, include/private/thread_local_alloc.h:
-       Fix typos in comments.
-       * finalize.c: Declare mark_procs and GC_register_finalizer_inner
-       STATIC.
-       * malloc.c (GC_free): Move size calculation below assertion.
-
-2008-10-27  Hans Boehm <Hans.Boehm@hp.com>
-
-       * win32_threads.c (GC_get_stack_min, GC_may_be_in_stack):
-       Add one entry VirtualQuery cache, I_HOLD_LOCK assertions.
-       (GC_push_stack_for, GC_get_next_stack) : Hopefully fix WINCE support.
-
-2008-10-27  Hans Boehm <Hans.Boehm@hp.com> (Thanks to Klaus Treichel)
-
-       * finalize.c (GC_general_register_disappearing_link): Add
-       assertion.
-       * malloc.c (GC_generic_malloc): Round lb to granules, not words.
-       * mallocx.c (GC_generic_malloc_ignore_off_page): Round lb to
-       granules, not words.
-
-2008-10-27  Hans Boehm <Hans.Boehm@hp.com> (Really Rex Dieter and
-                                           Petr Krajca)
-
-       * mach_dep.c (NO_GETCONTEXT): Define for sparc linux.
-       * configure.ac: Define mach_dep for sparc-linux.
-       * configure: Regenerate.
-
-2008-10-25  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidansky)
-
-       * mark_rts.c (GC_approx_sp): Use volatile to avoid common
-       warning.
-
-2008-10-25  Hans Boehm <Hans.Boehm@hp.com>
-
-       * dyn_load.c (GC_cond_add_roots): Fix GC_get_next_stack argument
-       order.
-
-2008-10-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * alloc.c, dbg_mlc.c, dyn_load.c, finalize.c, gcj_mlc.c,
-       include/gc.h, include/gc_config_macros.h, include/gc_cpp.h,
-       include/gc_gcj.h, include/gc_mark.h, include/gc_typed.h,
-       include/javaxfc.h, include/private/gc_locks.h,
-       include/private/gc_priv.h, malloc.c, mallocx.c, mark.c, mark_rts.c,
-       misc.c, obj_map.c, os_dep.c, pthread_support.c, ptr_chck.c,
-       stubborn.c, tests/test.c, thread_local_alloc.c, typd_mlc.c
-       win32_threads.c: Add GC_CALL and GC_CALLBACK macro invocations.
-       * test.c: Remove some old K&R code.
-
-2008-10-24  Hans Boehm <Hans.Boehm@hp.com>
-       (Partially based loosely on patch from Ivan Maidanski)
-
-       * win32_threads.c (GC_may_be_in_stack): New.  (GC_Thread_Rep):
-       Add last_stack_min.  (GC_push_stack_for): Use last_stack_min.
-       (GC_get_next_stack): Add limit argument, use_last_stack_min.
-       (GC_suspend): make stack_base assignment conditional.
-       * dyn_load.c (win32 GC_cod_add_roots): Pass limit to
-       GC_get_next_stack.
-       * configure_atomic_ops.sh: Remove.
-       * build_atomic_ops.sh, build_atomic_ops.sh.cygwin, doc/README.win32,
-       Makefile.direct: Partially support build directories whose path
-       name contains blanks.
-       * Makefile.am: Support new files (build_atomic_ops.sh,
-       build_atomic_ops.sh.cygwin)
-       * Makefile.in: Regenerate.
-
-2008-10-21  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * include/private/gc_locks.h, include/private/gc_pmark.h,
-       include/private/gc_priv.h, include/private/gcconfig.h,
-       mach_dep.c, mark_rts.c, misc.c, os_dep.c, pthread_stop_world.c,
-       pthread_support.c, thread_local_alloc.c, typd_mlc.c, win32_threads.c:
-       Fix comments.
-
-2008-10-21  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * pthread_support.c: Comment out LOCK_STATS.
-       * include/gc.h: Fix comments.
-
-2008-10-20  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * misc.c (GC_init_inner): Enable GC_LOG_FILE on Cygwin.
-       * include/private/gcconfig.h: Consider USE_MMAP for Cygwin.
-       * os_dep.c (GC_get_main_stack_base): Use alternate definition
-       with USE_MMAP.
-       * include/private/gc_priv.h: Sometimes define SETJMP on Cygwin.
-
-2008-10-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/README: Make it clearer when Makefile.direct is assumed.
-       * cord/cord.am: install include/cord.h.
-       * Makefile.in: Regenerate.
-
-2008-09-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * win32_threads.c (GC_pthread_join, GC_pthread_start_inner):
-       Remove unused variables.
-       * darwin_stop_world.c: Always declare GC_thr_init().
-       * dbg_mlc.c (GC_debug_free_inner): Don't touch oh_sz if
-       SHORT_DBG_HDRS is defined.
-       * include/private/gc_pmark.h (OR_WORD_EXIT_IF_SET, parallel
-       mark, USE_MARK_BITS version): Refer to correct parameter name.
-
-2008-09-24  Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
-
-       * finalize.c (GC_general_register_disappearing_link): Remove
-       redundant code.
-       * gcj_mlc.c (GC_init_gcj_malloc): Add cast to signed.
-       * os_dep.c: (GC_write_fault_handler): Remove remaining
-       references to deleted variable "code".  Remove redundant
-       FREEBSD definitions.
-       * include/private/gcconfig.h (GWW_VDB): Define for X86_64 when
-       defined for X86. (STATIC): Define as "static" with NO_DEBUGGING.
-
-2008-09-24  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gc_priv.h: Update MAX_HEAP_SECTS.
-
-2008-09-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * dbg_mlc.c (GC_print_smashed_obj): Increase robustness with
-       smashed string, (GC_debug_free_inner): Mark as free.
-       * mallocx.c (GC_malloc_many): Always clear new block if
-       GC_debugging_started.
-       * reclaim.c: Move GC_debugging_started from
-       GC_reclaim_small_nonempty_block() to GC_reclaim_generic(),
-       which is also called directly.
-       * doc/README: Fix spelling error.  Update license summary.
-       * include/gc.h (GC_PRE_INCR3, GC_POST_INCR3): add (void **) casts.
-       * tests/test.c: Don't define GC_DEBUG if already defined.
-
-2008-08-27  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/simple_example.html: update --enable-full-debug reference,
-       Make HTML formatting standards compliant.
-       * doc/debugging.html, doc/leak.html: Fix HTML formatting bugs.
-       * doc/gcinterface.html: specify encoding.
-
-2008-08-27  Hans Boehm <Hans.Boehm@hp.com> (with help from Marco Maggi)
-
-       * doc/simple_example.html: Update thread-local allocation
-       description.
-
-2008-08-26  Hans Boehm <Hans.Boehm@hp.com> (with help from Marco Maggi)
-
-       * configure.ac: Check for gc-debug earlier; replace remaining
-       full-debug tests.
-       * configure: Regenerate.
-       * include/gc.h, ptr_chck.c (GC_pre_incr, GC_post_incr):
-       Use signed offset type.  Use ptr_t internally.
-       * doc/gcinterface.html: Update LOCAL_MALLOC description.
-       * doc/README.autoconf, doc/leak.html, doc/README.DGUX386:
-       Fix full-debug reference.
-       * include/gc.h: Rewrite GC_..._INCR and friends.
-       * tests/test.c: Minimally test GC_..._INCR and friends.
-
-2008-08-21  Hans Boehm <Hans.Boehm@hp.com>
-
-       * mark.c: (GC_push_next_marked, GC_push_next_marked_dirty,
-       GC_push_next_marked_uncollectable): Never invoke GC_push_marked
-       on free hblk.
-       * headers.c: Test COUNT_HDR_CACHE_HITS not USE_HDR_CACHE.
-       (GC_header_cache_miss): Always blacklist pointers for free
-       hblks.  Add assertion and comment.
-       * pthread_support.c (GC_register_my_thread): Fix #if indentation.
-       * include/private/gc_hdrs.h: USE_HDR_CACHE is no longer tested.
-       Delete it.
-       * include/private/gc_pmark.h: (PUSH_OBJ): Add assertion.
-
-2008-08-21  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c, include/gc_mark.h, Makefile.direct: Improve comments.
-
-2008-08-01  Hans Boehm <Hans.Boehm@hp.com> (Really Klaus Treichel)
-
-       * configure.ac: Set win32_threads on MinGW.
-       * configure: Regenerate.
-
-2008-07-25  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidanski)
-
-       Ivan's description of the patch follows. Note that a few pieces like
-       the GC_malloc(0) patch, were not applied since an alternate had been
-       previously applied.  A few differed stylistically from the rest of
-       the code (mostly casts to void * instead of target type),
-       or were classified as too minor to bother.  Note that
-       all of Ivan's static declarations which did not correct outright
-       naming bugs (as a few did), where replaced by STATIC, which is
-       ignored by default.
-
-       - minor bug fixing (for FreeBSD, for THREAD_LOCAL_ALLOC and for
-       GC_malloc(0));
-       - addition of missing getter/setter functions for public variables
-       (may be useful if compiled as Win32 DLL);
-       - addition of missing GC_API for some exported functions;
-       - addition of missing "static" declarator for internal functions
-       and variables (where possible);
-       - replacement of all remaining K&R-style definitions with ANSI
-       C ones (__STDC__ macro is not used anymore);
-       - addition of some Win32 macro definitions (that may be missing in
-       the standard headers supplied with a compiler) for GWW_VDB mode;
-       - elimination of most compiler warnings (except for
-       "uninitialized data" warning);
-       - several typos correction;
-       - missing parenthesis addition in macros in some header files of
-       "libatomic_ops" module.
-
-       My highlights based on reading the patch:
-
-       * allchblk.c: Remove GC_freehblk_ptr decl.
-       Make free_list_index_of() static.
-       * include/gc.h: Use __int64 on win64, define GC_oom_func,
-       GC_finalizer_notifier_proc, GC_finalizer_notifier_proc,
-       add getter and setters: GC_get_gc_no, GC_get_parallel,
-       GC_set_oom_fn, GC_set_finalize_on_demand,
-       GC_set_java_finalization, GC_set_dont_expand,
-       GC_set_no_dls, GC_set_max_retries, GC_set_dont_precollect,
-       GC_set_finalizer_notifier.  Always define GC_win32_free_heap.
-       gc_config_macros.h: Define _REENTRANT after processing
-       GC_THREADS.
-       * include/gc_cpp.h: Improve GC_PLACEMENT_DELETE test,
-       handling of operator new[] for old Windows compilers.
-       * include/gc_inline.h (GC_MALLOC_FAST_GRANS): Add parentheses
-       around arguments.
-       * dbg_mlc.c, malloc.c, misc.c: Add many GC_API specs.
-       * mark.c (GC_mark_and_push_stack): Fix source argument for
-       blacklist printing.
-       * misc.c: Fix log file naming based on environment variable
-       for Windows.  Make GC_set_warn_proc and GC_set_free_space_divisor
-       just return current value with 0 argument.  Add DONT_USE_USER32_DLL.
-       Add various getters and setters as in gc.h.
-       * os_dep.c: Remove no longer used GC_disable/enable_signals
-       implementations.  (GC_get_stack_base): Add pthread_attr_destroy
-       call.  No longer set GC_old_bus_handler in DARWIN workaround.
-       * pthread_support.c: GC_register_my_thread must also
-       call GC_init_thread_local.
-
-2008-07-21  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.direct, mach_dep.c: Add support for NO_GETCONTEXT.
-       * mach_dep.c: Include signal.h.
-       * gc_priv.h: Factor out INLINE declaration.
-
-2008-07-03  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Thiemo Seufer)
-
-       * include/private/gcconfig.h: Update MIPS/LINUX config.
-       * doc/gcdescr.html: Fix typo.
-       * mach_dep.c (GC_with_callee_saves_pushed): Don't rely on getcontext
-       for MIPS/LINUX.
-
-2008-05-30  Hans Boehm <Hans.Boehm@hp.com> (some really dmcmahill)
-
-       * configure.ac: SPARC fixes.
-       * configure: Regenerate.
-       * thread_local_alloc.c(GC_mark_thread_local_fls_for): Include
-       size 0, except for gcj.
-       * doc/gc.man: Expand C++ cautions.
-       * include/gc_inline.h: Fix comments.
-
-2008-05-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_version.h, configure.ac, doc/README:
-       Change to version 7.2alpha1.
-       * configure: Regenerate.
-
-[7.1]
-
-2008-05-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_version.h, configure.ac, doc/README:
-       Change to version 7.1.
-       * configure: Regenerate.
-
-2008-05-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/gcinterface.html: Improve C++ interface documentation.
-
-2008-03-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * allchblk.c (GC_allochblk): Check for overflow during size
-       rounding.
-       * tests/huge_test.c: New.
-       * Makefile.direct, tests/tests.am: Add huge_test.c
-       * Makefile.in: Regenerate.
-
-2008-02-29  Hans Boehm <Hans.Boehm@hp.com>
-
-       * pthread_support.c: Fix typo in comment.
-       * os_dep.c (GC_win32_get_mem): Add heap section only if
-       allocation succeeded.
-
-2008-02-28  Hans Boehm <Hans.Boehm@hp.com>
-
-       * malloc.c: (free replacement) Fix caller address space check.
-
-2008-02-25  Hans Boehm <Hans.Boehm@hp.com>
-
-       * finalize.c (GC_grow_table): Dereference table in null-check.
-
-2008-02-24  Hans Boehm <Hans.Boehm@hp.com>
-
-       * win32_threads.c (GC_delete_gc_thread, GC_delete_thread):
-       Consistently call CloseHandle. (GC_suspend): Call
-       GC_delete_gc_thread.
-       * tests/test.c: Don't reference GC_print_stats if not exported.
-
-2008-02-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * tests/test.c (run_one_test): Don't mention pthread_self().
-       * misc.c: Declare GC_thr_init().
-
-2008-02-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * allchblk.c (add_to_fl): disable assertions with USE_MUNMAP,
-       and refine assertions to handle huge unmergable blocks.
-       (GC_allochblk_nth): Add comment.
-
-2008-02-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gcconfig.h: Add missing FREEBSD macro
-       consistency test.
-
-2008-02-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * allchblk.c (GC_enough_large_bytes_left): No longer take
-       parameters; return free list index bound.
-       (GC_merge_unmapped): Don't access nexthdr until after null test.
-       (Fixes bug in 1/29/08 check-in.)  (GC_allochblk): Calculate
-       when splitting is allowable only once here, not when considering each
-       block. (GC_allchblk_nth): Accept new may_split parameter.
-       Avoid some redundant tests for exact size matches.
-       * alloc.c (GC_should_collect): Cache min_bytes_allocd.
-       (GC_maybe_gc): Make locking assertion testable.
-       * mark_rts.c: Fix indentation.
-       * pthread_stop_world.c: Replace old GC_err_printf1 reference.
-       * tests/test.c: Remove (void) casts.  Optionally print some
-       timing information.
-
-2008-02-15  Hans Boehm <Hans.Boehm@hp.com>
-
-       * windows-untested/gc.def: Remove CreateThread line.
-       * windows-untested/README: New file.
-       * win32_threads.c (GC_use_DllMain): Force collector initialization.
-       (GC_init_parallel): Reformat comment.
-       * include/gc.h (GC_use_DllMain): Clarify usage rules in comment.
-       * mark.c (GC_mark_from): Slightly simplify GC_DS_PER_OBJECT code.
-       * include/gc_cpp.h: Add matching placement delete overloads
-       everywhere.
-       * include/private/gc_locks.h (NO_THREAD): Add cast.
-       * include/private/gcconfig.h: Add test for __HP_aCC.
-       * configure.ac, tests/tests.am:  Avoid libgccpp on HP/UX.
-       * Makefile.in, configure: Regenerate.
-
-2008-02-11  Hans Boehm <Hans.Boehm@hp.com> (partly David Leonard)
-
-       * doc/README.win32: Fix typo.
-       * configure.ac: Fix printing of enable-shared result.
-       * configure: Regenerate.
-
-2008-02-08  Hans Boehm <Hans.Boehm@hp.com>
-
-       * misc.c (GC_init_inner): Assert !GC_need_to_lock only when
-       defined.  (GC_call_with_stack_base): Add GC_API.
-       * os_dep.c (GC_get_stack_base): Add GC_API.
-       * win32_threads.c: (GC_register_my_thread, GC_unregister_my_thread):
-       Add GC_API.
-       * include/gc.h: Add GC_API annotations.
-       * include/private/gc_locks.h: Define UNCOND_LOCK etc. also for
-       PCR.
-       * include/private/gc_pmark.h: Fix comments.
-
-2008-02-06  Hans Boehm <Hans.Boehm@hp.com> (mostly from Henning Makholm)
-
-       * include/private/gc_priv.h, mark_rts.c, typd_mlc.c:
-       Add GC_push_typed_structures() to push GC_ext_descriptors.
-
-2008-01-31  Hans Boehm <Hans.Boehm@hp.com> (mostly from Andreas Tobler)
-
-       * tests/test.c: Call GC_INIT for DARWIN; test system type using
-       gcconfig.h-defined macros.
-
-2008-01-29  Hans Boehm <Hans.Boehm@hp.com>
-
-       * allchblk.c (GC_merge_unmapped, GC_freehblk): Refuse to create
-       blocks large enough that their size, when interpreted as a signed
-       value, would be negative.
-       * include/private/gc_priv.h: Comment hb_sz range limit.
-
-2008-01-29  Hans Boehm <Hans.Boehm@hp.com>  (with help from Manuel Serrano)
-
-       * mark.c (GC_push_next_marked): correct comment.
-       * Makefile.direct: document NO_PROC_STAT.
-       * include/private/gcconfig.h: Accomodate NO_PROC_STAT.
-
-2008-01-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_version.h, configure.ac, doc/README:
-       Change to version 7.1alpha3.
-       * configure: Regenerate.
-
-[7.1alpha2]
-
-2008-01-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_version.h, configure.ac, doc/README:
-       Change to version 7.1alpha2.
-       * configure: Regenerate.
-
-2008-01-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am: Mention atomic_ops.c and atomic_ops_sysdeps.S
-       again.  Refer to build directory as ".".
-       * Makefile.in: Regenerate.
-
-2008-01-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * configure.ac: Ignore --enable-parallel-mark on Darwin for now.
-       * configure: Regenerate.
-       * darwin_stop_world.c: Add FIXME comment for parallel marker.
-
-2008-01-09  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gc_priv.h: Update MAX_ROOT_SETS
-       and LOG_PHT_ENTRIES to handle larger heaps.
-
-2008-01-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc.h (GC_INIT,GC_init): Update comments.
-
-2008-01-03  Hans Boehm <Hans.Boehm@hp.com> (based on a patch from
-       John Bowman, and an ancient patch from Fergus Henderson)
-
-       * allchblk.c, alloc.c, include/private/gc_priv.h:
-       Track GC_bytes_dropped and use in GC triggering decisions.
-       * alloc.c (min_bytes_allocd): Weight atomic blocks less.
-
-2008-01-02  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c (GC_add_to_heap): Call GC_install_header(p) AFTER
-       adjusting p.
-
-2007-12-23  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am: Add NT_X64_THREADS_MAKEFILE.
-
-2007-12-23  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Friedrich Dominicus)
-
-       * NT_X64_STATIC_THREADS_MAKEFILE: Clean up obsolete comment.
-       * alloc.c: Add declaration for GC_add_current_malloc_heap.
-       * win32_threads.c (GC_beginthreadex): Clean up error
-       return code.
-       * doc/README.win64, NT_X64_THREADS_MAKEFILE, Makefile.direct:
-       Add NT_X64_THREADS_MAKEFILE.
-
-2007-12-21  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c: Define GC_version instead of in version.h.
-       * version.h: Remove.
-       * include/gc_version.h: Move most of version.h here.
-       * include/gc.h: Include gc_version.h.
-       * gcname.c, add_gc_prefix.c: include gc.h instead of version.h.
-       * Makefile.direct, Makefile.dj, Makefile.am, include/include.am:
-       Adjust for version.h rename.
-       * Makefile.in: Regenerate.
-
-2007-12-21  Hans Boehm <Hans.Boehm@hp.com> (Really mostly russ sludge dot net)
-
-       * configure.ac: Put libatomic_ops links in build directory.
-       * configure: Regenerate.
-       * Makefile.am: Don't mention atomic_ops.c and atomic_ops_sysdeps.S
-       as nodist sources.
-
-2007-12-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc.h, doc/README.macros: Add GC_NO_THREAD_REDIRECTS,
-       GC_NO_THREAD_DECLS, don't test explicitly for GC_SOLARIS_THREADS.
-
-2007-12-20  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c: Deal correctly with address wrapping for
-       GC_greatest_plausible_heap_addr and GC_least_plausible_heap_addr.
-       * finalize.c, include/gc.h (GC_register_disappearing_link,
-       GC_register_finalizer_inner): Improve out-of-memory handling.
-       * include/private/gc_pmark.h: Fix comment spelling.
-
-2007-12-18  Hans Boehm <Hans.Boehm@hp.com> (really mainly Peter Wang)
-
-       * include/gc_inline.h, include/gc_tiny_fl.h: cleanups to make usable
-       in other contexts.
-
-2007-12-18  Hans Boehm <Hans.Boehm@hp.com> (really Radek Polak)
-
-       * include/gc.h: Don't define GC_HAVE_BUILTIN_BACKTRACE for uclibc.
-
-2007-12-18  Hans Boehm <Hans.Boehm@hp.com>
-
-       * gc_cpp.cc: Don't include gc_cpp.h from local directory.
-
-2007-12-18  Hans Boehm <Hans.Boehm@hp.com> (really Adam Megacz)
-
-       * allchblk.c, configure.ac (add --enable-munmap)
-       * configure: Regenerate.
-
-2007-12-10  Andreas Tobler <a.tobler@schweiz.org>
-
-       * dyn_load.c (GC_dyld_image_add): Remove ifdef clause and use the macro
-       GC_GETSECTBYNAME instead.
-       * include/private/gc_priv.h: Define GC_GETSECTBYNAME according to the
-       architecture (Darwin).
-
-2007-10-24  Hans Boehm <Hans.Boehm@hp.com>
-
-       * reclaim.c (GC_bytes_found): Expand comment.
-       * thread_local_alloc.c (GC_malloc_atomic, GC_gcj_malloc): Pass
-       granules, not bytes, to GC_FAST_MALLOC_GRANS.
-       * include/gc.h: Never include gc_local_alloc.h.
-       * tests/test.c: Add size zero allocation tests.
-
-2007-10-23  Hans Boehm <Hans.Boehm@hp.com>
-
-       * malloc.c: Update GC_large_allocd_bytes on explicit deallocation.
-       * allchblk.c: Sanity check GC_max_large_allocd_bytes.
-
-2007-10-23  Hans Boehm <Hans.Boehm@hp.com> (Really Manuel Serrano)
-
-       * Makefile.direct: Invoke $(MAKE) instead of make.
-
-2007-10-23  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/scale.html: Reflect gc7 thread local allocation behavior.
-
-2007-10-23  Hans Boehm <Hans.Boehm@hp.com> (really Petter Urkedal)
-
-       * include/extra/gc.h, include/extra/gc_cpp.h: New.
-       * include/include.am: Install gc.h and gc_cpp.h in $(prefix)/include
-       again.
-       * Makefile.in: Regenerate.
-
-2007-08-15  Hans Boehm <Hans.Boehm@hp.com> (really Samuel Thibault)
-
-       * pthread_support.c (GC_thr_init): Use sysconf(_SC_NPROCESSORS_ONLN)
-       for HURD.
-
-2007-08-14  Hans Boehm <Hans.Boehm@hp.com> (really David Daney)
-
-       * include/private/gcconfig.h: Add Linux/mips-64 support.
-
-2007-08-14  Hans Boehm <Hans.Boehm@hp.com> (really mostly Samuel Thibault)
-
-       * dbg_mlc.c: Use random() on all glibc systems.
-       * mach_dep.c (GC_with_callee_saves_pushed): Don't use getcontext() on
-       HURD.  Add comment.
-       * pthread_stop_world.c (GC_suspend_handler, GC_stop_init): Accomodate
-       systems without SA_SIGINFO.
-
-2007-08-14  Hans Boehm <Hans.Boehm@hp.com> (partly really Henrik Theiling)
-
-       * include/gc.h (GC_PTR_STORE): Fix non-DEBUG parentheses.
-       * tests/test.c (run_one_test): Add GC_PTR_STORE test.
-       No longer test for RS6000.
-
-2007-08-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c, backgraph.c, headers.c, include/private/gc_priv.h:
-       Maintain GC_our_memory and GC_n_memory.
-       * dbg_mlc.c (GC_print_smashed_obj): Improve message.
-       (GC_print_all_smashed_proc): Pass client object address instead of
-       base.
-       * dyn_load.c (sort_heap_sects): New.  (GC_register_map_entries):
-       Register sections that are contiguous and merged with our heap.
-       * malloc.c, os_dep.c (GC_text_mapping): Check for just base name
-       of libraries.
-       * malloc.c (calloc): Check for special callers even with
-       USE_PROC_FOR_LIBRARIES. Move assertion.  Add rudimentary
-       malloc/free tracing.
-       * misc.c: No longer call GC_init_lib_bounds explicitly.
-       * thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Always
-       initialize on demand.
-       * tests/test.c: Call GC_INIT only when required.
-
-2007-08-03  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.direct: Remove comment fragment.
-       * tests/tests.am: Add smashtest.
-       * Makefile.in: Regenerate.
-       * configure.ac: Define GC_USE_DLOPEN_WRAP with redirect-malloc.
-       * configure: Regenerate.
-       * pthread_support.c: Fix comment spelling.
-       * include/private/gcconfig.h: Define USE_PROC_FOR_LIBRARIES with
-       GC_LINUX_THREADS and REDIRECT_MALLOC.
-       * tests/smash_test.c: Initial check-in.
-       * obj_map.c: Print log entry to correct file.
-       * include/private/thread_local_alloc.h: Add TlsAlloc error check.
-
-2007-07-23  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c (GC_stopped_mark): Call GC_add_current_malloc_heap()
-       while world is still running.
-       * os_dep.c (GC_is_heap_base): Don't call GC_add_current_malloc_heap()
-       with world stopped.
-       * include/gc.h (GC_INIT for cygwin): Always call GC_add_roots.
-       * misc.c (GC_init/GC_init_inner): Perform all work in
-       GC_init_inner.
-       * Makefile.direct: Expand -DUSE_MUNMAP comment.
-
-2007-07-23  Hans Boehm <Hans.Boehm@hp.com> (really Jim Marshall)
-
-       * include/gc.h: Define uintptr_t explicitly for VC++6.
-       * msvc_dbg.c (GetModuleBase): Revert to strcat if strcat_s doesn't
-       exist.
-
-2007-07-02  Hans Boehm <Hans.Boehm@hp.com>
-
-       * version.h, configure.ac, doc/README: Change to version 7.1alpha1.
-       * configure: Regenerate.
-
-2007-07-02  Hans Boehm <Hans.Boehm@hp.com>
-
-       * version.h, configure.ac, doc/README: Change to version 7.0.
-       * configure: Regenerate.
-
-2007-07-02  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_config_macros.h: Also check for IA64 when setting
-       GC_HPUX_THREADS.
-       * mallocx.c: Change my_bytes_allocd to signed_word.
-       * include/gc_pthread_redirects.h: Remove obsolete Solaris threads
-       (as opposed to pthreads) support.
-
-2007-07-02  Hans Boehm <Hans.Boehm@hp.com>
-
-       * mach_dep.c (GC_with_callee_saves_pushed): Don't use getcontext()
-       on ARM/Linux.  Check getcontext() return value.
-
-2007-06-29  Hans Boehm <Hans.Boehm@hp.com>
-
-       * backgraph.c (per_object_func): Make argument types consistent.
-       (GC_traverse_back_graph): Mark GC_deepest_obj.
-
-2007-06-29  Hans Boehm <Hans.Boehm@hp.com>
-
-       * finalize.c (GC_finalize): Change dl_size and fo_size to size_t.
-       * os_dep.c (GC_win32_get_mem): Add GC_mem_top_down option.
-
-2007-06-28  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/README.win32, doc/README, README.QUICK: Fix some of the worst
-       anachronisms.
-       * dyn_load.c: Partially support cygwin, but don't enable it yet.
-
-2007-06-28  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am: Use -no-undefined for libgc.
-       * Makefile.in: Regenerate.
-       * Makefile.direct: Document USE_PROC_FOR_LIBRARIES.
-       * dyn_load.c (GC_register_map_entries): Rename prot_buf to prot
-       consistently.
-       * misc.c: Fix some WARN calls.  Move GC_is_initialized setting and
-       GC_thr_init() call.
-       * os_dep.c: Consistently use WARN where appropriate.
-       * thread_local_alloc.c: Revert change to GC_WIN32_THREADS test.  Instead
-       remove inappropriate pthread.h include.
-       * doc/README.linux: Remove some anachronisms.
-
-2007-06-23  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c: Also use GC_check_tls on non-Linux systems.
-       * mallocx.c (GC_reclaim_generic): Remove bogus declaration.
-       * include/private/gc_priv.h (GC_reclaim_generic): Declare correctly
-       with prototype.
-
-2007-06-19  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c (GC_adj_bytes_allocd): Avoid (long) casts, fix comment.
-       (GC_print_heap_sects): Use size_t instead of unsigned long.
-       * thread_local_alloc.c (GC_lookup_thread): Define in the correct
-       context.
-       * win32_threads.c, include/gc_config_macros.h: The last of Romano
-       Paolo Tenca's patch.  Move stdint.h include to gc_config_macros.h.
-       * include/gc_inline.h: Avoid gc_priv.h dependencies.
-       * tests/test.c (check_heap_stats): Replace unsigned long with size_t.
-
-2007-06-12  Hans Boehm <Hans.Boehm@hp.com>
-
-       * aclocal.m4: Regenerate to update date.
-
-2007-06-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * NT_X64_STATIC_THREADS_MAKEFILE: Replace obsolete -debugtype:cv.
-       * mark_rts.c (GC_push_roots): Fix kind type.
-
-2007-06-06  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/README.win64: New file.
-       * doc/doc.am, Makefile.direct: Add README.win64.
-       * Makefile.in: Regenerate.
-
-2007-06-06  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am, Makefile.direct: Add NT_X64_STATIC_THREADS_MAKEFILE.
-       * Makefile.in: Regenerate.
-       * NT_X64_STATIC_THREADS_MAKEFILE: Fix warning flags.
-       * allochblk.c, alloc.c, blacklst.c, dbg_mlc.c, dyn_load.c,
-       finalize.c, headers.c, mach_dep.c, malloc.c, mark.c, misc.c,
-       obj_map.c, os_dep.c, ptr_chck.c, reclaim.c, typd_mlc.c,
-       win32_threads.c, cord/de_win.c, include/gc_mark.h,
-       include/private/gc_hdrs.h, include/private/gc_pmark.h,
-       include/private/gc_priv.h, tests/test_cpp.cc:
-       Replace old style function declarations.  Clean up integral types.
-       Remove register declarations.  The change in malloc.c and the
-       "int descr" declaration in mark.c are the most likely to have
-       been real bugs outside of win64.
-       * msvc_dbg.c: Disable on win64.
-       * win32_threads.c: Add AMD64 support.
-       * include/gc.h: no backtrace on AMD64 for now.
-
-2007-06-06  Hans Boehm <Hans.Boehm@hp.com>
-
-       * msvc_dbg.c(GetModuleBase): Replace strcat with strcat_s.
-
-2007-06-06  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc.h: (GC_word, GC_signed_word): Fix win64 definitions.
-       Don't include windows.h in an extern "C" context.
-       * include/private/gcconfig.h: Fix win64/X86_64 configuration.
-       * tests/test.c: Eliminate more old style function definitions.
-       Cleanup pointer and integer casts for win64.
-       * tests/test_cpp.cc: Don't include gc_priv.h.
-       * NT_STATIC_THREADS_MAKEFILE: Restrict suffixes for VC++ 2005.
-       * NT_X64_STATIC_THREADS_MAKEFILE: New.
-
-2007-06-06  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Romano Paolo Tenca)
-
-       * win32_threads.c: Separate out DEBUG_WIN32_PTHREADS_STACK.  Ignore
-       FINISHED threads for suspension.  (GC_pthread_join): Add
-       pthread_self() cast.  (GC_pthread_start_inner): Execute cleanup
-       handler when popping it.
-       * include/private/gc_locks.h: Inline THREAD_EQUAL for
-       GC_WIN32_PTHREADS.  Define USE_PTHREAD_LOCKS only if we have
-       pthreads.
-
-2007-05-23  Hans Boehm <Hans.Boehm@hp.com> (Really mostly Romano Paolo Tenca)
-
-       * gc_dlopen.c, thread_local_alloc.c, threadlibs.c, win32_threads.c,
-       tests/test.c: Accomodate GC_WIN32_PTHREADS.
-       * include/gc.h: Don't include windows.h for GC_WIN32_PTHREADS.
-       * include/gc_config_macros.h: Define both PTHREADS and
-       GC_WIN32_THREADS.
-       * include/private/gc_locks.h: Nonstandard definitions of
-       NUMERIC_THREAD_ID for GC_WIN32_PTHREADS.
-       * doc/README.win32, Makefile.direct: Include documentation
-       for GC_WIN32_PTHREADS.
-       * Makefile.direct: Remove some anachronisms in the documentation.
-
-2007-05-23  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am: Move includes to bottom.  Add better library
-       dependencies.  Increment library version.  Remove "SUBDIRS += .".
-       * cord/cord.am, tests/tests.am: Add better library dependencies.
-       Remove now unnecessary dependencies.
-       * Makefile.in: Regenerate.
-       * include/gc.h (GC_beginthreadex, GC_endthreadex, GC_ExitThread):
-       Move to define on all Windows platforms.  (_beginthread): define
-       to generate error if used.
-
-2007-05-22  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gc_locks.h: Format to 80 columns.
-
-2007-05-22  Hans Boehm <Hans.Boehm@hp.com>
-
-       * malloc.c(GC_free): Ignore bad frees on MSWIN32 with REDIRECT_MALLOC.
-       * NT_MAKEFILE: msvc_dbg.h is in include/private.  Don't use cvars
-       rc.
-       * misc.c (WIN32 GC_write): Define GC_need_to_lock in single-threaded
-       case.
-       * win32_threads.c: Test for __MINGW32__ in addition to _MINGW_VER.
-       (GC_CreateThread, GC_beginthreadex): Deallocate args even if we fail.
-       * include/gc.h: Add GC_reachable_here().  (GC_WinMain): Add GC_API.
-       (GC_beginthreadex, GC_endthreadex, GC_ExitThread): Declare.
-       * tests/test.c: Add GC_reachable_here() call.
-
-2007-05-21  Hans Boehm <Hans.Boehm@hp.com>
-
-       * alloc.c (GC_try_to_collect): Call GC_init if necessary.
-       * tests/thread_leak_test.c: Don't unconditionally define
-       GC_LINUX_THREADS.
-
-2007-05-21  Andreas Tobler <a.tobler@schweiz.org>
-
-       * Makefile.am: Remove extra_ldflags_libgc definition.
-       * Makefile.in: Regenerate.
-
-2007-05-17  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gc_priv.h: Define AO_REQUIRE_CAS.
-
-2007-05-16  Hans Boehm <Hans.Boehm@hp.com>
-
-       * finalize.c (GC_unreachable_finalize_mark_proc): Don't return void
-       value.
-
-2007-05-15  Hans Boehm <Hans.Boehm@hp.com>
-
-       * configure.ac, version.h, doc/README: Change version to 7.0alpha10.
-       * configure: Regenerate.
-
-[7.0alpha9 release]
-
-2007-05-15  Hans Boehm <Hans.Boehm@hp.com>
-
-       * configure.ac, version.h, doc/README: Change version to 7.0alpha9.
-       * configure: Regenerate.
-
-2007-05-15  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am: Include NT_STSTIC_THREADS_MAKEFILE in dist.
-       * Makefile.in: Regenerate.
-       * include/private/gc_locks.h: GC_compare_and_exchange, GC_atomic_add:
-       remove. NUMERIC_THREAD_ID, THREAD_EQUAL: New.  GC_lock_holder: now
-       unsigned long.  I_DONT_HOLD_LOCK, I_HOLD_LOCK: Update.
-       * pthread_stop_world.c, pthread_support.c, win32_threads.c: Use
-       NUMERIC_THREAD_ID, THREAD_EQUAL.
-       * include/private/gcconfig.h: GENERIC_COMPARE_AND_SWAP: Remove.
-       * include/private/thread_local_alloc.h: Don't USE_COMPILER_TLS on
-       ARM.
-
-2007-05-11  Hans Boehm <Hans.Boehm@hp.com>
-
-       * dbg_mlc.c, include/gc.h, finalize.c: Merge Alexandre Oliva's
-       GC_debug_register_finalizer_unreachable() patch from gcc tree.
-       * thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Add assertions
-       to check GC has been initialized.
-
-2007-05-10  Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/gc_cpp.h: Documentation updates.
-       * include/gc_config_macros.h: Don't check for __ppc__ to set
-       DARWIN_THREADS.
-       * Makefile.am: Include configure_atomic_ops.sh in dist.
-       * Makefile.in: Regenerate.
-
-2007-05-08  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.am: Don't distribute copied atomic_ops files.  Include
-       libatomic_ops with "make dist".
-       * Makefile.in: Regenerate.
-       * configure: Regenerate.
-       * configure.ac: Enable THREAD_LOCAL_ALLOC for Cygwin with threads.
-       * win32_threads.c: Report error for Cygwin + GC_DLL.
-
-2007-05-08  Hans Boehm <Hans.Boehm@hp.com>
-
-       * Makefile.direct: Update THREAD_LOCAL_ALLOC documentation.
-       * cord/de_win.c: Rename and move AboutBox.  Call GC_INIT.  Remove
-       MakeProcInstance anachronism.
-       * doc/README.macros: Officially remove elif prohibition.
-       Remove documentation for defunct SRC_M3 support.
-       * include/gc.h: Remove more SRC_M3 references.
-       * include/private/gcconfig.h: Remove still more SRC_M3 references.
-       GC_SOLARIS_THREADS no longer needs to be checked separately.
-
-2007-05-08  Hans Boehm <Hans.Boehm@hp.com>
+[7.1alpha2] 2008-01-10
+======================
+
+* Makefile.am: Mention atomic_ops.c and atomic_ops_sysdeps.S
+again.  Refer to build directory as ".".
+
+* configure.ac: Ignore --enable-parallel-mark on Darwin for now.
+* darwin_stop_world.c: Add FIXME comment for parallel marker.
+
+* include/private/gc_priv.h: Update MAX_ROOT_SETS
+and LOG_PHT_ENTRIES to handle larger heaps.
+
+* include/gc.h (GC_INIT,GC_init): Update comments.
+
+* allchblk.c, alloc.c, include/private/gc_priv.h:
+Track GC_bytes_dropped and use in GC triggering decisions.
+* alloc.c (min_bytes_allocd): Weight atomic blocks less.
+
+* alloc.c (GC_add_to_heap): Call GC_install_header(p) AFTER
+adjusting p.
+
+* Makefile.am: Add NT_X64_THREADS_MAKEFILE.
+
+* NT_X64_STATIC_THREADS_MAKEFILE: Clean up obsolete comment.
+* alloc.c: Add declaration for GC_add_current_malloc_heap.
+* win32_threads.c (GC_beginthreadex): Clean up error
+return code.
+* doc/README.win64, NT_X64_THREADS_MAKEFILE, Makefile.direct:
+Add NT_X64_THREADS_MAKEFILE.
+
+* alloc.c: Define GC_version instead of in version.h.
+* version.h: Remove.
+* include/gc_version.h: Move most of version.h here.
+* include/gc.h: Include gc_version.h.
+* gcname.c, add_gc_prefix.c: include gc.h instead of version.h.
+* Makefile.direct, Makefile.dj, Makefile.am, include/include.am:
+Adjust for version.h rename.
+
+* configure.ac: Put libatomic_ops links in build directory.
+* Makefile.am: Don't mention atomic_ops.c and atomic_ops_sysdeps.S
+as nodist sources.
+
+* include/gc.h, doc/README.macros: Add GC_NO_THREAD_REDIRECTS,
+GC_NO_THREAD_DECLS, don't test explicitly for GC_SOLARIS_THREADS.
+
+* alloc.c: Deal correctly with address wrapping for
+GC_greatest_plausible_heap_addr and GC_least_plausible_heap_addr.
+* finalize.c, include/gc.h (GC_register_disappearing_link,
+GC_register_finalizer_inner): Improve out-of-memory handling.
+* include/private/gc_pmark.h: Fix comment spelling.
+
+* include/gc_inline.h, include/gc_tiny_fl.h: cleanups to make usable
+in other contexts.
+
+* include/gc.h: Don't define GC_HAVE_BUILTIN_BACKTRACE for uclibc.
+
+* gc_cpp.cc: Don't include gc_cpp.h from local directory.
+
+* allchblk.c, configure.ac (add --enable-munmap)
+
+* dyn_load.c (GC_dyld_image_add): Remove ifdef clause and use the macro
+GC_GETSECTBYNAME instead.
+* include/private/gc_priv.h: Define GC_GETSECTBYNAME according to the
+architecture (Darwin).
+
+* reclaim.c (GC_bytes_found): Expand comment.
+* thread_local_alloc.c (GC_malloc_atomic, GC_gcj_malloc): Pass
+granules, not bytes, to GC_FAST_MALLOC_GRANS.
+* include/gc.h: Never include gc_local_alloc.h.
+* tests/test.c: Add size zero allocation tests.
+
+* malloc.c: Update GC_large_allocd_bytes on explicit deallocation.
+* allchblk.c: Sanity check GC_max_large_allocd_bytes.
+
+* Makefile.direct: Invoke $(MAKE) instead of make.
+
+* doc/scale.html: Reflect gc7 thread local allocation behavior.
+
+* include/extra/gc.h, include/extra/gc_cpp.h: New.
+* include/include.am: Install gc.h and gc_cpp.h in $(prefix)/include
+again.
+
+* pthread_support.c (GC_thr_init): Use sysconf(_SC_NPROCESSORS_ONLN)
+for HURD.
+
+* include/private/gcconfig.h: Add Linux/mips-64 support.
+
+* dbg_mlc.c: Use random() on all glibc systems.
+* mach_dep.c (GC_with_callee_saves_pushed): Don't use getcontext() on
+HURD.  Add comment.
+* pthread_stop_world.c (GC_suspend_handler, GC_stop_init): Accomodate
+systems without SA_SIGINFO.
+
+* include/gc.h (GC_PTR_STORE): Fix non-DEBUG parentheses.
+* tests/test.c (run_one_test): Add GC_PTR_STORE test.
+No longer test for RS6000.
+
+* alloc.c, backgraph.c, headers.c, include/private/gc_priv.h:
+Maintain GC_our_memory and GC_n_memory.
+* dbg_mlc.c (GC_print_smashed_obj): Improve message.
+(GC_print_all_smashed_proc): Pass client object address instead of
+base.
+* dyn_load.c (sort_heap_sects): New.  (GC_register_map_entries):
+Register sections that are contiguous and merged with our heap.
+* malloc.c, os_dep.c (GC_text_mapping): Check for just base name
+of libraries.
+* malloc.c (calloc): Check for special callers even with
+USE_PROC_FOR_LIBRARIES. Move assertion.  Add rudimentary
+malloc/free tracing.
+* misc.c: No longer call GC_init_lib_bounds explicitly.
+* thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Always
+initialize on demand.
+* tests/test.c: Call GC_INIT only when required.
+
+* Makefile.direct: Remove comment fragment.
+* tests/tests.am: Add smashtest.
+* configure.ac: Define GC_USE_DLOPEN_WRAP with redirect-malloc.
+* pthread_support.c: Fix comment spelling.
+* include/private/gcconfig.h: Define USE_PROC_FOR_LIBRARIES with
+GC_LINUX_THREADS and REDIRECT_MALLOC.
+* tests/smash_test.c: Initial check-in.
+* obj_map.c: Print log entry to correct file.
+* include/private/thread_local_alloc.h: Add TlsAlloc error check.
+
+* alloc.c (GC_stopped_mark): Call GC_add_current_malloc_heap()
+while world is still running.
+* os_dep.c (GC_is_heap_base): Don't call GC_add_current_malloc_heap()
+with world stopped.
+* include/gc.h (GC_INIT for cygwin): Always call GC_add_roots.
+* misc.c (GC_init/GC_init_inner): Perform all work in
+GC_init_inner.
+* Makefile.direct: Expand -DUSE_MUNMAP comment.
+
+* include/gc.h: Define uintptr_t explicitly for VC++6.
+* msvc_dbg.c (GetModuleBase): Revert to strcat if strcat_s doesn't
+exist.
+
+
+[7.0] 2007-07-02
+================
+
+* include/gc_config_macros.h: Also check for IA64 when setting
+GC_HPUX_THREADS.
+* mallocx.c: Change my_bytes_allocd to signed_word.
+* include/gc_pthread_redirects.h: Remove obsolete Solaris threads
+(as opposed to pthreads) support.
+
+* mach_dep.c (GC_with_callee_saves_pushed): Don't use getcontext()
+on ARM/Linux.  Check getcontext() return value.
+
+* backgraph.c (per_object_func): Make argument types consistent.
+(GC_traverse_back_graph): Mark GC_deepest_obj.
+
+* finalize.c (GC_finalize): Change dl_size and fo_size to size_t.
+* os_dep.c (GC_win32_get_mem): Add GC_mem_top_down option.
+
+* doc/README.win32, doc/README, README.QUICK: Fix some of the worst
+anachronisms.
+* dyn_load.c: Partially support cygwin, but don't enable it yet.
+
+* Makefile.am: Use -no-undefined for libgc.
+* Makefile.direct: Document USE_PROC_FOR_LIBRARIES.
+* dyn_load.c (GC_register_map_entries): Rename prot_buf to prot
+consistently.
+* misc.c: Fix some WARN calls.  Move GC_is_initialized setting and
+GC_thr_init() call.
+* os_dep.c: Consistently use WARN where appropriate.
+* thread_local_alloc.c: Revert change to GC_WIN32_THREADS test.  Instead
+remove inappropriate pthread.h include.
+* doc/README.linux: Remove some anachronisms.
+
+* alloc.c: Also use GC_check_tls on non-Linux systems.
+* mallocx.c (GC_reclaim_generic): Remove bogus declaration.
+* include/private/gc_priv.h (GC_reclaim_generic): Declare correctly
+with prototype.
+
+* alloc.c (GC_adj_bytes_allocd): Avoid (long) casts, fix comment.
+(GC_print_heap_sects): Use size_t instead of unsigned long.
+* thread_local_alloc.c (GC_lookup_thread): Define in the correct
+context.
+* win32_threads.c, include/gc_config_macros.h: The last of Romano
+Paolo Tenca's patch.  Move stdint.h include to gc_config_macros.h.
+* include/gc_inline.h: Avoid gc_priv.h dependencies.
+* tests/test.c (check_heap_stats): Replace unsigned long with size_t.
+
+* NT_X64_STATIC_THREADS_MAKEFILE: Replace obsolete -debugtype:cv.
+* mark_rts.c (GC_push_roots): Fix kind type.
+
+* doc/README.win64: New file.
+* doc/doc.am, Makefile.direct: Add README.win64.
+
+* Makefile.am, Makefile.direct: Add NT_X64_STATIC_THREADS_MAKEFILE.
+* NT_X64_STATIC_THREADS_MAKEFILE: Fix warning flags.
+* allochblk.c, alloc.c, blacklst.c, dbg_mlc.c, dyn_load.c,
+finalize.c, headers.c, mach_dep.c, malloc.c, mark.c, misc.c,
+obj_map.c, os_dep.c, ptr_chck.c, reclaim.c, typd_mlc.c,
+win32_threads.c, cord/de_win.c, include/gc_mark.h,
+include/private/gc_hdrs.h, include/private/gc_pmark.h,
+include/private/gc_priv.h, tests/test_cpp.cc:
+Replace old style function declarations.  Clean up integral types.
+Remove register declarations.  The change in malloc.c and the
+"int descr" declaration in mark.c are the most likely to have
+been real bugs outside of win64.
+* msvc_dbg.c: Disable on win64.
+* win32_threads.c: Add AMD64 support.
+* include/gc.h: no backtrace on AMD64 for now.
+
+* msvc_dbg.c(GetModuleBase): Replace strcat with strcat_s.
+
+* include/gc.h: (GC_word, GC_signed_word): Fix win64 definitions.
+Don't include windows.h in an extern "C" context.
+* include/private/gcconfig.h: Fix win64/X86_64 configuration.
+* tests/test.c: Eliminate more old style function definitions.
+Cleanup pointer and integer casts for win64.
+* tests/test_cpp.cc: Don't include gc_priv.h.
+* NT_STATIC_THREADS_MAKEFILE: Restrict suffixes for VC++ 2005.
+* NT_X64_STATIC_THREADS_MAKEFILE: New.
+
+* win32_threads.c: Separate out DEBUG_WIN32_PTHREADS_STACK.  Ignore
+FINISHED threads for suspension.  (GC_pthread_join): Add
+pthread_self() cast.  (GC_pthread_start_inner): Execute cleanup
+handler when popping it.
+* include/private/gc_locks.h: Inline THREAD_EQUAL for
+GC_WIN32_PTHREADS.  Define USE_PTHREAD_LOCKS only if we have
+pthreads.
+
+* gc_dlopen.c, thread_local_alloc.c, threadlibs.c, win32_threads.c,
+tests/test.c: Accomodate GC_WIN32_PTHREADS.
+* include/gc.h: Don't include windows.h for GC_WIN32_PTHREADS.
+* include/gc_config_macros.h: Define both PTHREADS and
+GC_WIN32_THREADS.
+* include/private/gc_locks.h: Nonstandard definitions of
+NUMERIC_THREAD_ID for GC_WIN32_PTHREADS.
+* doc/README.win32, Makefile.direct: Include documentation
+for GC_WIN32_PTHREADS.
+* Makefile.direct: Remove some anachronisms in the documentation.
+
+* Makefile.am: Move includes to bottom.  Add better library
+dependencies.  Increment library version.  Remove "SUBDIRS += .".
+* cord/cord.am, tests/tests.am: Add better library dependencies.
+Remove now unnecessary dependencies.
+* include/gc.h (GC_beginthreadex, GC_endthreadex, GC_ExitThread):
+Move to define on all Windows platforms.  (_beginthread): define
+to generate error if used.
+
+* include/private/gc_locks.h: Format to 80 columns.
+
+* malloc.c(GC_free): Ignore bad frees on MSWIN32 with REDIRECT_MALLOC.
+* NT_MAKEFILE: msvc_dbg.h is in include/private.  Don't use cvars
+rc.
+* misc.c (WIN32 GC_write): Define GC_need_to_lock in single-threaded
+case.
+* win32_threads.c: Test for __MINGW32__ in addition to _MINGW_VER.
+(GC_CreateThread, GC_beginthreadex): Deallocate args even if we fail.
+* include/gc.h: Add GC_reachable_here().  (GC_WinMain): Add GC_API.
+(GC_beginthreadex, GC_endthreadex, GC_ExitThread): Declare.
+* tests/test.c: Add GC_reachable_here() call.
+
+* alloc.c (GC_try_to_collect): Call GC_init if necessary.
+* tests/thread_leak_test.c: Don't unconditionally define
+GC_LINUX_THREADS.
+
+* Makefile.am: Remove extra_ldflags_libgc definition.
+
+* include/private/gc_priv.h: Define AO_REQUIRE_CAS.
+
+* finalize.c (GC_unreachable_finalize_mark_proc): Don't return void
+value.
+
+
+[7.0alpha9] 2007-05-15
+======================
+
+* Some gc6.9 changes.
+* Change FindTopOfStack decl in darwin_stop_world.c.
+* Move some static tests from misc.c to gcconfig.h.  Use #error.
+* Add GC_print_free_list() function.
+* Add GC_GNU_THREADS support on HURD.
+* __GNUC__ was misspelled as __GNUC in thread_local_alloc.h.
+* Integrated various MacOSX patches and tried to reconcile them.
+* Added some casts to powerpc.h in libatomic_ops to silence warnings.
+
+* Makefile.am: Include NT_STSTIC_THREADS_MAKEFILE in dist.
+* include/private/gc_locks.h: GC_compare_and_exchange, GC_atomic_add:
+remove. NUMERIC_THREAD_ID, THREAD_EQUAL: New.  GC_lock_holder: now
+unsigned long.  I_DONT_HOLD_LOCK, I_HOLD_LOCK: Update.
+* pthread_stop_world.c, pthread_support.c, win32_threads.c: Use
+NUMERIC_THREAD_ID, THREAD_EQUAL.
+* include/private/gcconfig.h: GENERIC_COMPARE_AND_SWAP: Remove.
+* include/private/thread_local_alloc.h: Don't USE_COMPILER_TLS on
+ARM.
+
+* dbg_mlc.c, include/gc.h, finalize.c: Merge Alexandre Oliva's
+GC_debug_register_finalizer_unreachable() patch from gcc tree.
+* thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Add assertions
+to check GC has been initialized.
+
+* include/gc_cpp.h: Documentation updates.
+* include/gc_config_macros.h: Don't check for __ppc__ to set
+DARWIN_THREADS.
+* Makefile.am: Include configure_atomic_ops.sh in dist.
+
+* Makefile.am: Don't distribute copied atomic_ops files.  Include
+libatomic_ops with "make dist".
+* configure.ac: Enable THREAD_LOCAL_ALLOC for Cygwin with threads.
+* win32_threads.c: Report error for Cygwin + GC_DLL.
+
+* Makefile.direct: Update THREAD_LOCAL_ALLOC documentation.
+* cord/de_win.c: Rename and move AboutBox.  Call GC_INIT.  Remove
+MakeProcInstance anachronism.
+* doc/README.macros: Officially remove elif prohibition.
+Remove documentation for defunct SRC_M3 support.
+* include/gc.h: Remove more SRC_M3 references.
+* include/private/gcconfig.h: Remove still more SRC_M3 references.
+GC_SOLARIS_THREADS no longer needs to be checked separately.
+
+* thread_local_alloc.c, include/private/thread_local_alloc.h:
+Spell __declspec correctly.
+* NT_STATIC_THREADS_MAKEFILE: Enable thread-local allocation.
+
+* doc/README.win32: Adjust GC_win32_dll_threads rules again.
+
+* mark.c (GC_mark_some wrapper): Restructure for readability, handle
+GC_started_thread_while_stopped.
+* misc.c (Win32 GC_write): Lock GC_write_cs only if needed.
+* win32_threads.c: (client_has_run): remove,
+GC_started_thread_while_stopped, GC_attached_thread: add.
+(GC_push_all_stacks): Add verbose output.
+(DllMain): Avoid initializing collector or the like.
+Never update both thread tables.
+* doc/README.win32: Adjust GC_win32_dll_threads rules.
+
+* pthread_stop_world.c (GC_push_all_stacks): Print thread count with
+GC_PRINT_VERBOSE_STATS.
+
+* configure.ac: Comment out redundant
+AC_DEFINE(NO_EXECUTE_PERMISSION).
+* sparc_mach_dep.S: Remove single quote in comment.
+* include/private/gcconfig.h: Fix DATAEND for NONSTOP.
+* win32_threads.c: Include stdint.h for Mingw.  Add GC_API for DllMain.
+(GC_use_DllMain): Fix assertion.
+
+* configure.ac: Introduce extra_ldflags_libgc. Use it for Darwin.
+* Makefile.am (libgc_la_LDFLAGS): Use extra_ldflags_libgc.
+* include/private/gcconfig.h: Enable MPROTECT_VDB for all Darwin
+targets. Remove comments.
+Prepare ppc64 support for Darwin.
+
+* darwin_stop_world.c (GC_push_all_stacks): Fix compiler warnings.
+Make i unsigned.
+(GC_stop_world): Likewise. Remove unused GC_thread p.
+(GC_start_world): Likewise.
+
+* os_dep.c: Define GC_darwin_register_mach_handler_thread extern.
+Remove double SIG_HNDLR_PTR definition.
+(GC_forward_exception): Fix compiler warnings, make i unsigned.
+Initialize thread_state to NULL.
+(catch_exception_raise): Fix compiler warnings, make i unsigned.
+
+* include/private/gc_priv.h (NEED_FIND_LIMIT, FREEBSD variant):
+also define for X86_64.
+* configure.ac: Move generic gnu (Hurd) case to below kfreebsd case.
+* README.changes: Point to ChangeLog.
+
+* darwin_stop_world.c: Move THREAD_FLD defines to ...
+* include/private/gc_priv.h: ... here.
+Fix THREAD_STATE definitions for ppc64.
+* os_dep.c (catch_exception_raise): Use THREAD_FLD for exc_state member
+access.
+
+* configure.ac (i586-darwin): Replaced HAS_I386_THREAD_STATE_* with
+HAS_X86_THREAD_STATE32_*.
+(x86_64-*-darwin*): Extended the above check for x86_64-*-darwin* with
+HAS_X86_THREAD_STATE64_*.
+Added value 1 in the above AC_DEFINE's. Important for the upcoming
+Leopard.
+* include/private/gcconfig.h: Modified X86_64 define for Darwin.
+Removed __x86_64__ check in POWERPC section. Added base definitions
+for the X86_64 Darwin port.
+* include/private/gc_priv.h: Added GC_MACH_HEADER and GC_MACH_SECTION
+to distinguish between 32 and 64-bit applications. Added definitions
+for X86_64 Darwin.
+* darwin_stop_world.c: Added HAS_X86_THREAD_STATE64___RAX. And
+replaced HAS_I386_THREAD_STATE___EAX with HAS_X86_THREAD_STATE32___EAX.
+(GC_push_all_stacks): Added code for X86_64 Darwin. Even for the
+!DARWIN_DONT_PARSE_STACK. Maybe obsolete.
+* dyn_load.c (GC_dyld_name_for_hdr): Use GC_MACH_HEADER.
+(GC_dyld_image_add): Use GC_MACH_HEADER and GC_MACH_SECTION.
+Distinguish between getsectbynamefromheader_64 and
+getsectbynamefromheader.
+* os_dep.c (catch_exception_raise): Introduce exception definition for
+X86_64 Darwin. Replaced old i386_EXCEPTION_STATE_* definition with
+x86_EXCEPTION_STATE32_*. Add X86_64 for exc_state.faultvaddr.
+
+
+[7.0alpha7] 2006-09-19
+======================
+
+* More 6.7 changes.
+* Declare GC_dump() in gc.h.
+* Add --enable-large-config, which just defines the LARGE_CONFIG macro.
+* Make GlobalAlloc address alignment a bit more intuitive.
+* Use #elif in the definitions of GET_MEM.
+* Overhaul porting.html.  Remove corresponding text from README.
+* Fix typo in DARWIN section of gcconfig.h.
+* Fix Darwin thread memory leak.
+* Update x86 AO_test_and_set implementation to use "=q".
+* Add $(EXEEXT) to many tests in tests/tests.am.  (Corresponds to a
+6.7 fix, which no longer applied.)
+* Fix Darwin/PPC port.
+* Fix Cygwin/threads port.
+* Fix gcj malloc support.
+* For GNU-style make, don't build libatomic_ops unless threads are requested.
+This should allow single-threaded builds on platforms which do not
+currently support libatomic_ops.
+* Clean up and hopefully fix the CFLAGS calculation for GNU build.
+(Substantially improves things on HP/UX.)
+* Integrated Andrei Polushin's Visual C++ patches.  These provide for
+stack traces, better C++ debug support, and better log file handling.
+Note that these change the location of the log file to a the path of the
+executable with a .log extension.  To get the old behavior back, define
+OLD_WIN32_LOG_FILE.  For the time being, I'm checking his project
+files and the like into a windows-untested subdirectory.  They
+are almost certainly already out of date, but better than what we had
+before.
+* Fixed some win32 threads bugs, and added support for _beginthreadex.
+* Fix zero size thread local allocation so that explicit deallocation
+works correctly.
+* Removed serious bug in GC_malloc_uncollectable(large size).
+* Do not try to do thread-local gcj allocation in incremental mode.  There
+are races in setting up the descriptor.
+* Add GC_INIT() to middle.c, fix some more GC_printfn calls.
+* Some assertions erroneously used I_HOLD_LOCK() negatively, even though
+it can now spuriously return TRUE.
+* Rename SUNOS5 macro and OS name to SOLARIS and SUNOS5DL to SOLARISDL.
+* On Linux and some Un*x variants, allocate memory by first trying sbrk,
+and then switching to mmap if that fails.
+* Fixed /proc/x/maps reading to deal with asynchronous deletions.
+* Fix REDIRECT_MALLOC with threads on Linux.  It now usually seems to work
+with ugly hacks that include having calloc behave differently when it is
+called from ld.so or the pthreads library.  A reasonable amount of
+infrastructure was added to support some of this.
+* Import various updated build scripts.
+* Add GC_register_has_static_roots_callback.
+* Fix serious bugs in GC_malloc_atomic_uncollectable().
+* Return GC_SUCCESS form GC_get_stack_base().
+* Fix several atomic_ops problems on IA64 with HP Compiler.
+* Update to atomic_ops-1.2.
+* Fix hb_n_marks description and reclaim.c assertion.
+* Various additional win32 threads fixes.
+* Enable GC_ASSERTIONS for Debug build with NT_THREADS_MAKEFILE.
+
+
+[7.0alpha5]
+===========
+
+* More 6.6, 6.7 changes.
+* Some Solaris fixes, including some more general changes in how
+the assembly pieces of mach_dep.c are handled.
+* Removed a lot of SOLARIS_THREADS-specific code that was only
+needed with the old implementation.  This included many (mostly no-op)
+versions of GC_is_fresh.
+* Don't use atomic_ops in gc_locks.h unless we need threads.
+* Fixed USE_MARK_BITS, which is once again the default without PARALLEL_MARK.
+* Removed Solaris GC_INIT hack.  It's a workaround for a long dead bug,
+and it seemed to be wrong anyway.
+* Changed win32_threads.c to require preprocessor-based interception
+of thread routines by default.  A client call to GC_use_DllMain is
+now required to get the old behavior in which DllMain is used to implicitly
+register threads.  This was done for uniformity with other platforms, and
+because the DllMain solution seemed to require very tricky code which,
+at least in the past, imposed hard bounds on the number of threads.
+* Many small changes to make thread support work again on Cygwin.
+* Moved definition of allocator lock etc. to pthread_support.c and
+win32_threads.c for those two cases.
+* Got rid of the FASTLOCK() machinery.  It doesn't seem useful on modern
+platforms.
+* Cleaned up the uncollectable allocation routines, speeding up the
+slower paths.  The code did enough unnecessary work off the critical path
+that the underlying logic was getting hard to extract.
+* No longer turn off THREAD_LOCAL_ALLOC with DBG_HDRS_ALL.  Indications
+are it just works, and I think the reasons for it not working disappeared
+a while ago.
+* Fixed bugs in hb_n_marks calculation and assertion.
+* Don't use __builtin_expect for pre-3.0 gcc.
+* Define GWW_VDB only for recent Microsoft tool chains.
+* Add overview.html to doc directory.
+* Fix NT_STATIC_THREADS_MAKEFILE, various compiler warnings.
+* Made thread local allocation sort of work with Cygwin.  The code should
+be there to deal with other Windows variants, But non-Cygwin Windows
+threads need more bug fixes.
+
+
+[7.0alpha4]
+===========
+
+* Various 6.5, 6.6 changes.
+* Removed GC_brief_async_signal_safe_sleep and used atomic_ops instead.
+* Integrated build patches from David Angelocola and Petter Urkedal.
+* Fix dynamic-linker-based pthread call redirection.
+* Renamed RS6000 to POWERPC/AIX.
+* Allow recovery from SIGSEGV in marker on Linux.  This works around
+a race in thread stack marking if /proc is used to find roots.  We do
+that by default with malloc redirection and threads.  This involved
+moving some GC_find_limit and SETJMP related declarations to gc_priv.h.
+* Added doc/porting.html file.
+* Added ADD_HEAP_GUARD_PAGES for sbrk/*nix platforms to debug extreme
+memory overwrite errors.
+* Added trivial NO_INCREMENTAL flag to facilitate debugging.
+* Added GC_getattr_np-based GC_get_stack_base (untested).
+* Separated thread local allocation into a separate file and added the
+beginning of win32 support for that.
+
+
+[7.0alpha3]
+===========
+
+* Added support for dlopen-based interception of pthread functions.
+This is only half done.  The gc.h redefinitions currently interfere.
+* Integrated major automake overhaul from Petter Urkedal.
+
+
+[7.0alpha2]
+===========
+
+* GC_bytes_allocd was incremented by a possibly uninitialized variable
+in GC_generic_malloc_inner.  (Bug introduced in gc7.0alpha1.)
+* Win32 fixes.
+* Integrated Ben Hutchings' GetWriteWatch-based virtual dirty bit
+implementation for win32.
+* Removed pc_gc.tar and floppy targets in Makefile.direct.  Removed
+pc_excludes file.
+* No longer include GC_bytes_wasted when evaluating allocation progress.
+Since we are now counting live memory, it no longer makes sense.
+* Applied Davide Angelocola's configure patch.  There are now separate
+Makefile.am's in the cord and tests subdirectory, more tests, etc.
+* Renamed configure.in to configure.ac.
+* Merged a very small number of Nathanael Nerode's configure.ac
+cleanups from the gcc tree.  Unfortunately, that file is a bit
+different from ours.
+* Changed EINTR handling in sem_wait slightly.
+* Restructure the root marking code.  Remove all traces of
+USE_GENERIC_PUSH_REGS, and effectively make it the default.
+Make it easier to pass a context pointer to the mark routine, in
+case we ever want to do precise stack marking.
+* Replace GC_start_blocking() and GC_end_blocking() with GC_do_blocking().
+This remains undocumented, and only implemented for pthreads.  But it
+removes an otherwise unavoidable race with stores of callee-save
+registers.
+* Fix GC_n_mark_bits for the default MARK_BIT_PER_GRANULE case.  This
+resulted in bogus complaints in heap dumps.
+* Upgrade to libatomic_ops-1.0, and update build structure to match.
+* Remove SRC_M3 support. Clean up lock initialization code in misc.c.
+* Removed gc_local_alloc.h.  If THREAD_LOCAL_ALLOC is defined, the
+thread local allocation routines are now called automatically.
+* Renamed gc_inl.h back to gc_inline.h.  Changed the interface appreciably
+since locking has turned into a dominant issue, and in-line allocation
+only makes sense if it's no worse than thread-local allocation.
+Gc_inline.h is now also used to implement thread-local allocation.
+* Finished replacing stubborn allocation with manual write barrier.
+Untested.
+* Use thread-local allocation code by default.
+* Added GC_register_my_thread and friends for Posix and win32.
+* Patch for GWW_VDB from Ben Hutchings.
+* Removed explicit THREAD_LOCAL_ALLOC tests, since that now always
+redefines GC_malloc.
+* Removed now unused AIX memory allocation code.
+* Various minor fixes for bugs introduced in 7.0alpha1.
+
+
+[7.0alpha1]
+===========
+
+* Remove GC_PROTO, VOLATILE, GC_PTR, and GC_CONST.  Assume ANSI C compiler
+and use ANSI constructs unconditionally.
+* Introduce #elif and #error in some of the appropriate places.
+* Remove GC_printf cruft. Use stdargs.
+* Remove separate Solaris threads support.  Use the more generic Posix
+implementation.
+* Use atomic_ops for atomic operations and memory barriers.
+* Clean up MPROTECT_VDB implementation.  Use SA_SIGINFO wherever
+possible.
+* Remove broken SIGNALS stuff.
+* Use size_t instead of word, where appropriate.
+* Add .S.o rule to Makefile.am.
+* Officially discontinue SunOS4, several old flavors of M68K (SunOS4,
+A/UX, HP), IBM PC/RTs and RISCOS/Irix4.  (I doubt the old code worked.
+If anyone cares, these should be easy to resurrect.)
+* Add EXPECT() in some critical places.
+* Redefined hb_sz and hb_body to deal with bytes rather than words.
+This affected a great deal of code.  I would like to consistently use
+byte offsets and sizes where there's not a convincing reason to do
+otherwise.
+* Redefined several other variables (GC_mem_found, GC_words_allocd)
+etc. to use units of bytes.  Most of these were also renamed to
+reflect that fact.
+* Killed as many "register" declarations as possible.
+* Partially replaced stubborn allocation with manual write barrier.
+It's currently broken.
+* Restructured mark code, to allow mark bits to be kept either on
+a per allocation granule or per object basis.  The emphasis is
+now on the -DUSE_MARK_BYTES option, since individual bits perform
+quite badly on hyper-threaded P4s, and are probably suboptimal on
+other architectures.  -DUSE_MARK_BITS is currently broken, and may
+be resurrected only for the single-threaded case.  This significantly
+reduced the cache footprint required by auxiliary GC data structures.
+It also reduces space overhead for small heaps.  It probably slows
+things down slightly if interior pointers are very common.
+* As part of the above, we now maintain an approximate count of set
+mark bits in each heap block.
+* As part of the above, the semantics of hb_map changed drastically.
+For MARK_BIT_PER_OBJ, it doesn't exist.  For MARK_BIT_PER_GRANULE,
+it is purely a way to replace a mod instruction with a table lookup.
+(Somewhat to my surprise, this still wins on modern hardware.)
+* Removed PRINTSTATS, GATHERSTATS, and SILENT macros.  Everything is
+now controlled by GC_print_stats variable and GC_PRINT_STATS
+and new GC_PRINT_VERBOSE_STATS environment variables.
+* Add GC_log_printf and use it consistently for logging output.
+* Unconditionally count the objects we reclaim in the sweep phase.
+For thread local allocation, we need that anyway, and we expect
+that's increasingly the only case that matters.  And it simplifies
+the code.  In general expect minor performance hacks that benefit
+only the single-threaded case to disappear.
+* Remove GC_quiet from gc.h and elsewhere.
+* Changed the heap expansion heuristic, and the definition of
+GC_free_space_divisor, to refer to live data size, instead of total
+heap size.  I believe this is much more robust.  It wasn't previously
+possible, because we didn't have access to live data size.
+* Thread local allocation added the extra byte in twice: Once in
+thread_local_alloc, and once in malloc_many.
+* Removed GC_malloc_words_small and GC_gcj_fast_malloc.  A new
+mechanism based on the thread local allocation data structures
+is expected to be added instead.  This should allow inlined code
+that is both fast and doesn't rely on collector internals.
+* Changed both free lists and reclaim lists to be indexed by granules
+instead of words, norming halving their size.
+* MERGE_SIZE is now the only option, and the macro was removed.
+(Without it, we need a memory reference to GC_all_interior_pointers
+anyway.  Thus it costs us nothing.)
+* Change GC_size_map to map to granules instead of words.  Make sure
+that every possible size up to TINY_FREELISTS is present.
+* Split of macros need for fast inline allocation into gc_tiny_fl.h
+in anticipation of a new inline allocator that doesn't rely on GC
+internals.
+* Changed thread local allocation to use GRANULE_BYTES and TINY_FREELISTS
+in anticipation of a merge with the inline allocation code.
+* Removed ALIGN_DOUBLE.  This is mostly handled by GRANULE_BYTES.
+* Make locking on most platforms conditional on GC_need_to_lock.
+
+
+[6.9]
+=====
+
+* Fix typo in PREFETCH implementation for X86_64.
+* Fix M68K LINUX port.
+* __GNUC__ was misspelled as __GNUC in new_gc_alloc.h.
+* Integrated Allan Hsu's patch for OS X VM deallocation problems.
+* Applied FreeBSD/X86_64 patch.
+
+
+[6.8]
+=====
+
+* Added some support for Dragonfly BSD.
+* Improvements to the HP/UX section of configure.in/configure.ac.
+* GC_unix_get_mem could neglect to release the malloc lock on Irix, under
+extremely unlikely circumstances.
+* Added support for kFreeBSD + glibc
+* Fix more MacOS threads memory leaks
+* Added initial Solaris/X86-64 support
+
+
+[6.7]
+=====
+
+* Add "int" to Solaris "end" and "etext" declaration in gc.h.  Declared
+the symbols with underscores and as arrays, since that's what's actually
+used.  Perhaps this could all just be removed.
+* Fixed ARM GC_test_and_set code.
+* Added casts for assignments to hb_last_reclaimed, which truncate the
+value.  Added a cast to GC_adj_words_allocd.  Use GetModuleHandleA
+when retrieving a handle to kernel32.dll under win32.
+* Added Tandem S-Series support.
+* Remove spurious gc:: qualifier for operator delete[] in gc_cpp.h.
+* Changed a test for LINUX in config_macros.h to one for __linux__.
+* Add prototypes for GC_finalizer_notifier and GC_thr_init.
+* Use ld instead of nonexistent ldz instruction in Darwin FindTopOfStack.
+* Add support for Darwin/X86.
+* Merge in some recent gcc fixes.  Add ppc64 asm code.
+* Scan MEM_PRIVATE sections under Windows ME and predecessors.
+* Interior pointers with some largish offsets into large objects could
+be ignored, if GC_all_interior_pointers was set.  (Oddly this worked
+correctly for stack references if it was not set.  Otherwise it failed
+for both stack and heap references.)
+* Integrated Tatsuya Bizenn's NETBSD threads support, with some
+untested changes.
+* Added GC_strdup and friends to make leak detection work correctly
+for strdup clients.  Fixed the existing strdup
+with malloc redirection to handle a null malloc return correctly.
+
+
+[6.6]
+=====
+
+* Fix CPU count detection for Irix and FreeBSD.
+* Integrate Dan Bonachea's patch for the IBM XLC compiler on Darwin.
+* Integrated Andreas Tobler's FreeBSD/PowerPC patch.
+* Don't access the GC thread structure from the restart handler.  It's
+unsafe, since the handler may run too late.
+* Applied Christian Thalinger's patch to change comment syntax in
+alpha_mach_dep.S.
+* Added test for GC_no_dls in GC_dyld_image_add for DARWIN.
+* Use LINUX_STACKBOTTOM for Linux/SH and LINUX/ARM.
+* Rewrote GC_parse_map_entry.  This assumed a fixed column layout of
+/proc/self/maps on Linux.  This ceased to be true about 2 years ago.
+The old code is probably quite problematic with -DREDIRECT_MALLOC.  It
+is also used by default for IA64, though I haven't seen actual failures
+there.
+* More consistently define HBLKSIZE to 4096 on 64 bit architectures with
+4K pages.
+* With win32 threads, GC_stop_world needs to acquire GC_write_cs.
+* Move up struct callinfo declaration to make gcc 4.0.2. happy.
+
+
+[6.5]
+=====
+
+* Integrated Paolo Molaro's patch to deal with EINTR in sem_wait.
+* Make GC_approx_sp() write to dummy location to ensure that stack
+is grown here, when sp looks reasonable, rather than later, when
+it might look like a bad memory reference.  (Problem was never
+observed that I know of.  But on rereading the code it seemed
+dubious.)
+* Separate out GC_with_callee_saves_pushed and sometimes call
+it from GC_suspend_handler in pthread_stop_world.c.  Callee-save
+register values sometimes failed to get traced under HP/UX on
+PA-RISC.  Linux/IA64 had the same problem, though non-stacked
+callee-save registers seem to be so rarely used there that nobody
+ever noticed.
+* Integrated an ancient Darwin powerpc_darwin_machine_dep.s patch
+from Andreas Tobler, which I had lost.
+* Fix compare_and_exchange implementation for gcc/IA64 to deal with
+pickier compiler versions.
+* Fixed Itanium 32-bit ABI support (HP/UX).  In particular, the
+compare_and_exchange implementation didn't consider that possibility.
+* Undefine GC_pthread_detach in win32_threads.c.
+* Fixed inclusion of frame.h for NETBSD in os_dep.c.
+* Applied Dan Bonachea's patch to use mmap on AIX.
+* Several fixes to resurrect the Irix port on recent OS versions.
+* Change ALPHA to use LINUX_STACKBOTTOM.
+* Change SPARC64/LINUX to also use LINUX_STACKBOTTOM.  Deal with potential
+bad values of __libc_stack_end on that platform.
+* Relax gctest to allow larger heap if ALIGN_DOUBLE isn't set.
+(Unnecessary in 7.0)
+* Force a define of __STDC__=0 for the IBM compiler on AIX, so that
+we get prototypes.  (Unnecessary in 7.0)
+* GC_INIT definition for AIX and CYGWIN referred to DATASTART and DATAEND
+which are only defined in private include files.
+* Integrated some small gcconfig.h patches from Dan Bonachea.  Also
+relaxed assertion about FreeBSD stack size in pthread_support.c.
+* Integrated Andrew Begel's darwin_stop_world.c patch for 64-bit
+support.  This may need additional work.
+* Avoided potentially infinite recursion in GC_save_callers if
+the system backtrace calls malloc.  The workaround currently requires
+__thread support if this code is used with threads.
+* Avoided another similar infinite recursion by conditionally
+invoking GC_save_callers in alloc.c.
+* Removed all traces of aix_irix_threads.c.  AIX and Irix now use
+pthread_support.c and pthread_stop_world.c.  The old code appeared
+to be unreliable for AIX, and was not regularly maintained.
+* On Irix, ignore segments with MA_FETCHOP or MA_NOTCACHED attributed;
+they're not always safe to read.
+* Fixed a previously vacuous assertion (diagnosed by the SGI compiler)
+in GC_remove_from_fl.
+* Fix stack_size assertion in GC_pthread_create.
+* Fix assertion in GC_steal_mark_stack.
+
+
+[6.4]
+=====
+
+* Merge gcconfig.h changes from gcc tree.
+* Unconditionally include gc_priv.h in solaris_pthreads.c, win32_threads.h,
+aix_irix_threads.c, and solaris_threads.c to get thread definitions.
+* Start marker threads in GC_thr_init, so that they get started even
+if no other threads are ever started.  (Oddly enough, the parallel
+collector worked correctly, though not well, with no helper threads.)
+* Go ahead and split large blocks in GC_allochblk_nth if GC_dont_gc
+is set.
+* GC_PRINT_BACK_HEIGHT would deadlock with thread support.
+* Let in_progress_space in backgraph.s grow dynamically.
+* Fix README.solaris2.  The GC_thr_init() hack doesn't work anymore.
+* Convert GC_finalizer_mem_freed to bytes in allchblk.c.
+* Add missing declaration for GC_generic_malloc_words_small_inner.
+Without it, s390x breaks.
+* Applied several MacOSX patches to support older tool chains.
+* Bug fix for NetBSD/amd64.  Add NetBSD/sh3 support.
+* Fixed an uninitialized variable in cordprnt.c.
+* Eliminated some, but not all, gcc -Wall warnings.
+* Changed some old style casts to reinterpret_cast in new_gc_alloc.h.
+* GC_extend_size_map shouldn't adjust for GC_all_interior_pointers if
+GC_DONT_ADD_BYTE_AT_END is set.
+* Changed some (long) casts to (word) in preparation for win64.
+* Changed "int stack_size" declaration in pthread_support.c to use
+size_t.  (Only mattered with GC_ASSERTIONS enabled.)
+* Added CRIS (etrax) support.
+* Removed GC_IGNORE_FB frame buffer recognition, and replaced
+it with a check that the mapping type is MEM_IMAGE.
+In theory, this should work much better, but it is a high
+risk change for win32.
+* GC_allochblk_nth incremented GC_words_wasted by bytes rather than
+words.
+* Consider GC_words_wasted in GC_adj_words_allocd only if it is within
+reason.  (A hack to avoid some extremely unlikely scenarios in which
+we manage to allocate only "wasted" space.  7.0 has a better fix.)
+* Changed PowerPC GC_clear implementation to use lwsync instead of
+eieio, since the documentation recommends against eieio, and
+it seems to be incorrect if the preceding memory op is a load.
+* Fixed print_block_list to print the correct kind number for
+STUBBORN.
+* Have configure.in generate an error if it is asked to support
+pthreads, but doesn't know how to.
+* Added Kazuhiro Inaoka's patch for Renesas M32R support.
+* Have the GNU build mechanism link with -ldl.  Rename THREADLIBS
+to THREADDLLIBS to reflect this.
+* Added Hannes Mehnert's patch for FreeBSD/SPARC support.
+* Merged some FreeBSD specific patches to threadlibs.c and dyn_load.c.
+* Define MPROTECT_VDB on MACOSX only if threads are being used, since the
+dirty page tracking mechanism uses threads.  (This avoids an undefined
+reference to _GC_darwin_register_mach_handler_thread.)
+* By popular demand, use __libc symbols only if we are built with
+USE_LIBC_PRIVATES, which is off by default, and not otherwise documented.
+* Ignore GC_enable_incremental() requests when KEEP_BACK_PTRS is set.
+The GC itself will dirty lots of pages in this cases, probably making
+it counterproductive on all platforms.  And the DARWIN port crashes.
+
+
+[6.3]
+=====
+
+* Compile test_cpp.cc with CXXCOMPILE instead of COMPILE.
+* Very large allocations could cause a collector hang.  Correct
+calculation of GC_collect_at_heapsize.
+* GC_print_hblkfreelist printed some bogus results if USE_MUNMAP
+was defined.
+* Include gc_config_macros.h in threadlibs.c.
+* Correct MacOSX thread stop code.
+* SMALL_OBJ definition was off by one.  This could cause crashes
+at startup.
+* Integrate Paolo Molara's patch to deal with a race in the Darwin
+thread stopping code.
+* Changed X86_64 implementation to use SA_SIGINFO in the MPROTECT_VDB
+implementation.  The old approach appears to have been broken by
+recent kernels.
+* Added GC_ATTR_UNUSED to eliminate a warning in gc_allocator.h.
+* Fix GC_task_self declaration in os_dep.c.
+* Increase INITIAL_BUF_SZ in os_dep.c for Solaris /proc reads.
+
+
+[6.3alpha6]
+===========
+
+* Define USE_GENERIC_PUSH_REGS for NetBSD/M68K.
+* Fixed the X86_64 PREFETCH macros to correctly handle ia32e (which uses
+different prefetch instructions from AMD64).
+* GC_config_macros.h did not correctly define GC_WIN32_THREADS from
+GC_THREADS.
+* Added simple_example.html.
+* Merged Andrew Gray's patch to correctly restore signal handlers on
+FreeBSD.
+* Merged a patch from Andreas Jaeger to deal with prefetch-related warnings
+on x86-64.  Added some other casts so that the PREFETCH macros
+always get a ptr_t argument.  Removed some casts in the PREFETCH
+implementations.
+* Added a header guard for gc_allocator.h
+and changed GC_debug_free to clobber contents of deallocated object.
+* The signal masking code in pthread_stop_world.c contained some errors.
+In particular SIGSEGV was masked in the handler, in spite of the fact that
+it wrote to the heap.  This could lead to an uncaught SIGSEGV, which
+apparently became much more likely in Linux 2.6.  Also fixed some
+typos, and reduced code duplication in the same area.
+* Remove ltconfig, clean up configure messages for DGUX.
+* Integrated NetBSD/OpenBSD patches from Marc Recht and Matthias Drochner.
+
+
+[6.3alpha5]
+===========
+
+* Fix & vs && typo in GC_generic_malloc and
+GC_generic_malloc_ignore_off_page.  (Propagated from the gcc tree.)
+* Removed SA_NODEFER hack from NetBSD and Solaris write-protect handler.
+(According to Christian Limpach, the NetBSD problem is fixed.
+Presumably so is the Solaris 2.3 problem.)
+* Removed placement delete from gc_cpp.h for the SGI compiler.
+* Changed semantics of the GC_IGNORE_FB environment variable.
+We still need help in identifying win32
+graphics memory mappings.  The current "solution" is a hack.
+* Removed "MAKEOVERRIDES =" from Makefile.am and thus Makefile.in.
+It probably made more sense in the gcc context.
+* Explicitly ensure that NEED_FIND_LIMIT is defined for {Open,Net}BSD/ELF.
+* Replaced USE_HPUX_TLS macro by USE_COMPILER_TLS, since gcc often
+supports the same extension on various platforms.
+* Added some basic (completely untested) defines for win64, in support
+of future work.
+* Declared GC_jmp_buf in os_dep.s as JMP_BUF instead of jmp_buf, fixing
+a memory overwrite bug on Solaris and perhaps other platforms.
+* Added 0 != __libc_stack_end test to GC_linux_stack_base.
+Otherwise pre-linking could cause the collector to fail.
+* Changed default thread local storage implementation to USE_PTHREAD_SPECIFIC
+for HP/UX with gcc.  The compiler-based implementation appears to work
+only with the vendor compiler.
+* Export GC_debug_header_size and GC_USR_PTR_FROM_BASE from gc_mark.h,
+making client mark code cleaner and less dependent on GC version.
+* Export several new procedures and GC_generic_malloc from gc_mark.h
+to support user-defined kinds.  Use the new procedures to replace existing
+code in gcj_mlc.c and typd_mlc.c.
+* Added support for GC_BACKTRACES.
+* Fixed a remaining problem in CORD_str with signed characters.
+* Removed supposedly redundant, but very buggy, definitions of finalizer
+macros from javaxfc.h.  Fortunately this file probably has no users.
+The correct declarations were already in gc.h.
+* Also need to set GC_in_thread_creation while waiting for GC during
+thread termination, since it is also possible to collect from an
+unregistered thread in that case.
+* Define NO_GETENV for Windows CE, since getenv doesn't appear to exist.
+Plus some other minor WinCE fixes.
+* Added GC_register_describe_type_fn.
+* Arrange for debugging finalizer registration to ignore non-heap
+registrations, since the regular version of the routine also behaves
+that way.
+* GC_gcj_malloc and friends need to check for finalizers waiting to be run.
+One of the more obscure allocation routines with missing a LOCK() call.
+* Fixed cvtres invocations in NT_MAKEFILE and NT_STATIC_THREADS_MAKEFILE
+to work with VS.NET.
+* Cleaned up GC_INIT calls in test.  Updated gc.man to encourage GC_INIT
+use in portable code.
+* Taught the GC to use libunwind if --enable-full-debug is specified on
+IA64 and libunwind is present.
+* The USE_MUNMAP code could get confused about the age of a block and
+prematurely unmap it.  GC_unmap_old had a bug related to wrapping of
+GC_gc_no.  GC_freehblk and GC_merge_unmapped didn't maintain
+hb_last_reclaimed reasonably when blocks were merged.  The code was
+fixed to reflect original intent, but that may not always be an
+improvement.
+
+
+[6.3alpha4]
+===========
+
+* USE_MMAP was broken by confusion in the code dealing with USE_MMAP_ANON.
+* Darwin support was broken in alpha3 as a result of my mis-integration of
+Andrew Begel's patches.  Fixed with another patch from Andrew Begel.
+* A new sanity check in pthread_stop_world.c:GC_push_all_stacks() was
+overly aggressive.  We may collect from an unregistered thread during
+thread creation.  Fixed by explicitly checking for that case.  (Added
+GC_in_thread_creation.)
+
+
+[6.3alpha3]
+===========
+
+* Removed -DSMALL_CONFIG from BCC_MAKEFILE.
+* Changed macros to test for an ARM processor (Patch from Richard Earnshaw.)
+* Mostly applied a DJGPP patch from Doug Kaufman.  Especially Makefile.dj
+had suffered from serious bit rot.
+* Rewrote GC_apply_to_maps, eliminating an off-by-one subscript error,
+and a call to alloca (for lcc compatibility).
+* Changed USE_MUNMAP behavior on POSIX platforms to immediately remap
+the memory with PROT_NONE instead of unmapping it.  The latter risks
+an intervening mmap grabbing the address space out from underneath us.
+Updated this code to reflect a cleaner patch from Ulrich Drepper.
+* Replaced _T with _Tp in new_gc_alloc.h to avoid a MACOS X conflict.
+(Patch from Andrew Begel.)
+* Dynamically choose whether or not lock should spin on win32.
+This may be a significant performance improvement for win32.
+* Fix Makefile.direct to actually include NT_STATIC_THREADS_MAKEFILE
+in the distribution.
+* Maybe_install_looping_handler() was accidentally exported, violating
+our name space convention.
+* Made os_dep.c use sigsetjmp and SA_NODEFER for NetBSD.
+* Integrated Andrew Begel's Darwin threads patch, adjusted according to
+some of Fergus Hendersons's comments.  (Patch didn't apply cleanly,
+errors are possible.)
+* Added another test or two for the Intel 8.0 compiler to avoid
+confusing it with gcc.  The single-threaded collector should now build
+with icc, at least on ia64.
+
+
+[6.3alpha2]
+===========
+
+* Re-enabled I_HOLD_LOCK assertion in aix_irix_threads.h.
+* Put back the WINABI qualifier for GC_CreateThread.
+* Sometimes explicitly define __private_extern__ before DARWIN dyld.h
+include.
+* Included signal.h from pthread_support.c.  Removed GC_looping_handler,
+which was dead code.
+* GC_find_start was misdeclared by gc_pmark.h if PRINT_BLACK_LIST was
+defined.
+Changed GC_find_start to never just return 0.  According to its
+comment it doesn't, and it's unclear that's correct.
+* GC_alloc_large had several largely compensating bugs in the
+computation of GC_words_wasted.  (It was confused about bytes vs.
+words in two places.)
+* Integrated Slava Sysoltev's patch to support more recent versions of
+the Intel compiler on IA64/Linux.
+* Changed win32 spinlock initialization to conditionally set a spin count.
+(Emmanual Stumpf pointed out that enabling this makes a large performance
+difference on win32 multiprocessors.)  Also cleaned up the win32 spinlock
+initialization code a bit.
+* Fixed thread support for HP/UX/IA64.  The register backing store base for
+the main thread was sometimes not set correctly.
+* Added -DEMPTY_GETENV_RESULTS flag to work around Wine problem.
+* Declare GC_stack_alloc and GC_stack_free in solaris_threads.h to
+avoid 64-bit size mismatches.
+* Fixed GC_generic_push_regs to avoid a potential and very unfortunate
+tail call optimization.  This could lead to prematurely reclaimed
+objects on configurations that used the generic routine and the new
+build infrastructure (which potentially optimizes mach_dep.c).
+This was a serious bug, but it's unclear whether it has resulted in
+any real failures.
+* Fixed CORD_str to deal with signed characters.
+* Merged a couple of NOSYS/ECOS tests into os_dep.c from gcj.
+* Partially merged a win32 patch from Ben Hutchings, and substantially
+revised other parts of win32_threads.c.  It had several problems.
+Under MinGW with a statically linked library, the main thread was
+not registered.  Cygwin detached threads leaked thread descriptors.
+There were several race conditions.  For now, unfortunately the
+static threads limit remains, though we increased it, and made table
+traversal cost depend on the actual thread count.
+There is also still some code duplication with pthread_support.c.
+(Thread descriptors did become much smaller, since Ben Hutchings
+removed the thread context from them.)
+* Integrated a Solaris configure.in patch from Rainer Orth.
+* Added GC_IGNORE_FB and associated warning to very partially address
+the issue of the collector treating a mapped frame buffer as part
+of the root set.
+
+
+[6.3alpha1]
+===========
+
+* Integrated some NetBSD patches forwarded to me by Marc Recht.  These
+were already in the NetBSD package.
+* GC_pthread_create waited for the semaphore even if pthread_create failed.
+Applied the analogous fix for aix_irix_threads.c.
+* Added Rainer Orth's Tru64 fixes.
+* The check for exceeding the thread table size in win32 threadDetach
+was incorrect.
+* Applied Andrew Begel's patch to correct some reentrancy issues
+with dynamic loading on Darwin.
+* GC_CreateThread() was neglecting to duplicate the thread handle in
+the table.
+* Pass +ESdbgasm only on PA-RISC machines with vendor compiler.
+* Applied more AIX threads patches from Scott Ananian.
+
+
+[6.2]
+=====
+
+* Integrated a second round of Irix/AIX patches from Dan Bonachea.
+Renamed mips_sgi_mach_dep.S back to mips_sgi_mach_dep.s, since it requires
+the Irix assembler to do the C preprocessing; gcc -E doesn't work.
+* Fixed Makefile.direct for DARWIN.
+* There was a race between GC_pthread_detach and thread exit that could
+result in a thread structure being deallocated by GC_pthread_detach
+even though it was still needed by the thread exit code.
+* Fixed version parsing for non-alpha versions in acinclude.m4 and
+version checking in version.h.
+
+
+[6.2alpha6]
+===========
+
+* There was an extra underscore in the name of GC_save_registers_in_stack
+for NetBSD/SPARC.
+* Integrated Brian Alliet's patch for Darwin.  This restructured the
+linuxthreads/pthreads support to separate generic pthreads support
+from more the system-dependent thread-stopping code.  I believe this
+should make it easier to eliminate the code duplication between
+pthreads platforms in the future.  The patch included some other
+code cleanups.
+* Integrated Dan Bonachea's patch to support AIX threads.  This required
+substantial manual integration, mostly due to conflicts with other
+recent threads changes.  It may take another iteration to
+get it to work.
+* Removed HPUX/PA-RISC support from aix_irix_threads.c.  It wasn't used
+anyway and it cluttered up the code.  And anything we can do to migrate
+towards generic pthreads support is a good thing.
+* Added a more explicit test for tracing of function arguments to test.c.
+* Added Akira Tagoh's PowerPC64 patch.
+* Fixed some bit rot in the Cygwin port.
+gc.h now includes just windows.h, not winbase.h.
+* Declared GC_save_regs_in_stack() in gc_priv.h.  Remove other declarations.
+* Changed --enable-cplusplus to use automake consistently.  The old way
+confused libtool.  "Make install" didn't work correctly for the old version.
+Previously --enable-cplusplus was broken on cygwin.
+* Changed the C version of GC_push_regs to fail at compile time if it is
+generated with an empty body.  This seems to have been the cause of one
+or two subtle failures on unusual platforms.  Those failures should
+now occur at build time and be easily fixable.
+
+
+[6.2alpha5]
+===========
+
+* GC_invoke_finalizers could, under rare conditions, set
+GC_finalizer_mem_freed to an essentially random value.  This could
+possibly cause unbounded heap growth for long-running applications
+under some conditions.  (The bug was introduced in 6.1alpha5, and
+is not in gcc3.3.)
+* Attempted to sanitize the various DLL macros.  GC_USE_DLL disappeared.
+GC_DLL is used instead.  All internal tests are now on GC_DLL.
+README.macros is now more precise about the intended meaning.
+* Include DllMain in the multithreaded win32 version only if the
+collector is actually built as a dll.
+* Hide the cygwin threadAttach/Detach functions.  They were violating our
+namespace rules.
+* Fixed an assertion in GC_check_heap_proc.  Added GC_STATIC_ASSERT.
+* Removed some obsolete definitions for Linux/PowerPC in gcconfig.h.
+* CORD_cat was not rebalancing unbalanced trees in some cases, violating
+a CORD invariant.  Also tweaked the re-balancing rule for
+CORD_cat_char_star.
+* Added hand-coded structured exception handling support to mark.c.
+This should enable support of dynamic libraries under win32 with
+gcc-compiled code.
+Turned on dynamic library scanning for win32/gcc.
+* Removed some remnants of read wrapping.
+GC_USE_LD_WRAP ws probably broken in recent versions.
+* The build could fail on some platforms since gcconfig.h could include
+declarations mentioning ptr_t, which was not defined, e.g. when if_mach
+was built.  Also
+cleaned up tests for GC_PRIVATE_H in gcconfig.h a bit.
+* The GC_LOOP_ON_ABORT environment variable interfered with incremental
+collection, since the write fault handler was erroneously overridden.
+Handlers are now set up in the correct order.
+* It used to be possible to call GC_mark_thread_local_free_lists() while
+the world was not stopped during an incremental GC.  This was not safe.
+Fortunately, it was also unnecessary.  Added GC_world_stopped flag
+to avoid it.  (This caused occasional crashes in GC_set_fl_marks
+with thread local allocation and incremental GC.  This probably happened
+primarily on old, slow multiprocessors.)
+* Allowed overriding of MAX_THREADS in win32_threads.c from the build
+command line.
+* Taught the IA64/linux code to determine the register backing store base from
+/proc/self/maps after checking the __libc symbol, but before guessing.
+(__libc symbols are on the endangered list, and the guess is likely to not
+always be right for 2.6 kernels.)  Restructured the code to read and parse
+/proc/self/maps so it only exists in one place (all platforms).
+* The -DUSE_PROC_FOR_LIBRARIES code was broken on Linux.  It claimed that it
+also registered the main data segment, but didn't actually do so.  (I don't
+think anyone actually uses this configuration, but ...)
+* Made another attempt to get --enablecplusplus to do the right thing.
+Since there are unavoidable problems with C programs linking against a
+dynamic library that includes C++ code, I separated out the c++ code into
+libgccpp.
+
+
+[6.2alpha4]
+===========
+
+* Use LINUX_STACKBOTTOM for >= glibc2.2 on Linux/MIPS.  (See Debian bug
+# 177204)
+* Integrated Jeff Sturm and Jesse Rosenstock's MACOSX threads patches.
+* Integrated Grzegorz Jakacki's substantial GNU build patch.  "Make dist"
+should now work for the GNU build process.  Documentation files
+are installed under share/gc.
+* Tweaked gc_cpp.h to again support the Borland compiler.
+* Updated BCC_MAKEFILE.
+* Added GC_ASSERT check for minimum thread stack size.
+* Added --enable-gc-assertions.
+* Added some web documentation to the distribution.  Updated it in the
+process.
+* Separate gc_conf_macros.h from gc.h.
+* Added generic GC_THREADS client-defined macro to set the appropriate
+GC_XXX_THREADS internal macro.  (gc_config_macros.h.)
+* Add debugging versions of _ignore_off_page allocation primitves.
+* Moved declarations of GC_make_closure and GC_debug_invoke_finalizer
+from gc.h to gc_priv.h.
+* Reset GC_fail_count even if only a small allocation succeeds.
+* Integrated Brian Alliet's patch for dynamic library support on Darwin.
+* gc_cpp.h's gc_cleanup destructor called GC_REGISTER_FINALIZER_IGNORE_SELF
+when it should have called the lower case version, since it was
+explicitly computing a base pointer.
+
+
+[6.2alpha3]
+===========
+
+* Don't include execinfo.h in os_dep.c when it's not needed, and may not
+exist.
+
+
+[6.2alpha2]
+===========
+
+* Fixed the completely broken FreeBSD code in 6.2alpha1.
+* Changed IRIX reference in dbg_mlc.c to IRIX5.
+* Attempted to work around the problems with .S filenames and the SGI
+compiler.  (Untested.)
+* Worked around an HP/UX make issue with the GNU-style build process.
+* Fixed the --enable-cplusplus build machinery to allow builds without
+a C++ compiler.  (That was always the intent ...)
+* Changed the debugging allocation macros to explicitly pass the return
+address for Linux and XXXBSD on hardware for which we can't get stack
+traces.  Use __builtin_return_address(0) to generate it when possible.
+Some of the configuration work was cleaned up (good) and moved to gc.h
+(bad, but necessary).  This should make leak detection more useful
+on a number of platforms.
+* Fixed compilation problems in dbg_mlc.c with GC_ADD_CALLER.
+* Bumped revision number for dynamic library.
+
+
+[6.2alpha1]
+===========
+
+* Guard the test for GC_DUMP_REGULARLY in misc.c with
+"#ifndef NO_DEBUGGING".  Otherwise it fails to build with NO_DEBUGGING
+defined.
+* Message about retrying suspend signals was incorrectly generated even when
+flag was not set.
+* Cleaned up MACOSX/NEXT root registration code.  There was apparently a
+separate ifdef case in GC_register_data_segments() for no reason.
+* Removed MPROTECT_VDB for MACOSX port, based on one negative report.
+* Arrange for gc.h and friends to be correctly installed with GNU-style
+"make install".
+* Enable the GNU-style build facility include C++ support in the library
+with --enable-cplusplus.
+* Mark from GC_thread_key in linux_threads.c, in case that's allocated
+from the garbage collected heap, as it is with our own thread-specific
+storage implementation.
+* Mark all free list header blocks if they are heap allocated.  This avoids
+some unnecessary tracing.  And it remains correct if we clear the
+root set.
+* Improved S390/Linux support.  Add S390/Linux 64-bit support.
+* Corrected the spelling of GC_{M,C}ALLOC_EXPLICTLY_TYPED to
+GC_{M,C}ALLOC_EXPLICITLY_TYPED in gc_typed.h.  This is technically
+an interface change.  Based on the fact that nobody reported this,
+I suspect/hope there were no clients.
+* Cleaned up gc_typed.h so that (1) it adds an extern "C" declaration
+when appropriate, (2) doesn't generate references to undefined internal
+macros, and (3) allows easier manual construction of descriptors.
+* Close the file descriptor used by GC_print_address_map().
+* Set the "close-on-exec" bit for various file descriptors maintained
+for the collector's internal use.
+* Added a hack to find memory segments owned by the system allocator
+under win32.  Based on my tests, this tends to eventually find all
+segments, though it may take a while.  There appear to be cleaner,
+but slower solutions under NT/XP.  But they rely on an API that's
+unsupported under 9X.
+* Changed Linux PowerPC stack finding to LINUX_STACKBOTTOM.
+* Added GC_set_free_space_divisor to avoid some Windows dll issues.
+* Added FIXUP_POINTER, POINTER_SHIFT, POINTER_MASK to allow preprocessing
+of candidate pointers for tagging, etc.
+* Always lock around GC_notify_full_gc().  Simplified code for
+invoking GC_notify_full_gc().
+* Changed the way DATASTART is defined on FreeBSD to be robust against
+an unmapped page after etext.
+* Made GC_enable() and GC_disable() official.  Deprecated direct update
+of GC_dont_gc.  Changed GC_gcollect to be a noop when garbage collection
+is disabled.
+* Call GC_register_dynamic_libraries before stopping the world on Linux,
+in order to avoid a potential deadlock due to the dl_iterate_phdr lock.
+* Introduced a more general mechanism for platform-dependent code to
+decide whether the main data segment should be handled separately
+from dynamic libraries, or registered by GC_register_dynamic_libraries.
+The latter is more reliable and easier on Linux with dl_iterate_phdr.
+
+
+[6.1]
+=====
+
+* Added GC_MAXIMUM_HEAP_SIZE environment variable.
+* Fix configure.in for MIPS/LINUX.
+* Double page hash table size for -DLARGE_CONFIG.
+* Integrated Bo Thorsen's X86-64 support.
+* STACKBOTTOM definition for LINUX/MIPS was partially changed back.
+* Replaced all occurrences of LINUX_DATA_START in gcconfig.h with
+SEARCH_FOR_DATA_START.  It doesn't hurt to falll back to a search.
+And __data_start doesn't seem to get defined correctly of the GC
+library is loaded with LD_PRELOAD, e.g. for leak detection.
+* If the GC_find_leak environment variable is set, do a
+atexit(GC_gcollect) to give us at least one chance to detect leaks.
+This may report some very benign leaks, but ...
+* Addeded REDIRECT_FREE.  It's necessary if we want leak detection with
+LD_PRELOAD.
+* Defer printing of leaked objects, as for smashed objects.
+* Fixed process and descriptor leak in GC_print_callers.  Try for
+line number even if we got function name.)
+* Ported parallel GC support and thread local allocation to Alpha.
+Not yet well-tested.
+* Added GC_DUMP_REGULARLY and added finalization statistics to GC_dump().
+* Fixed Makefile.am to mention alpha_mach_dep.S instead of the defunct
+alpha_mach_dep.s.
+* Incorporated a change to new_gc_alloc.h,
+which should make it work with gcc3.1.
+* Use alpha_mach_dep.S only on Linux.  (It's not clear that this is
+optimal, but it otherwise didn't build on Tru64.)
+* Added ifdef to guard free() in os_dep.c.  Otherwise we get a
+compilation error on Irix.
+* Added an experimental version of GC_memalign to mallocx.c.  This can't
+always work, since we don't handle alignment requests in the hblk-level
+allocator, and we can't handle arbitrary pointer displacements unless
+GC_all_interior_pointers is enabled.  But it should work for alignment
+requests up to HBLKSIZE.  This is not yet documented in the standard
+places.
+* Finally debugged the OSF1/Tru64 thread support.  This needs more testing,
+since I needed to add a somewhat unconvincing workaround for signal
+delivery issues that I don't yet completely understand.  But it does
+pass my tests, even in parallel GC mode.  Incremental GC support is
+disabled if thread support is enabled, due to the signal issues.
+* Eliminated name-space-incorrect definition of _cdecl from gc_cpp.h.
+* Added GC_debug_malloc_replacement and GC_debug_realloc_replacement
+declarations to gc.h.  On IA64, this is required for REDIRECT_MALLOC
+to work correctly with these.
+* Fixed Linux USE_PROC_FOR_LIBRARIES to work with a 64-bit /proc format.
+
+
+[6.1alpha5]
+===========
+
+* 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
+infinitely.
+* 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.
+* Integrated Loren James Rittle's Alpha FreeBSD patches.  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.
+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.
+* 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.
+* Fixed Linux and Solaris/64 SPARC configuration.
+* Fixed a typo in strdup definition.
+* 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.
+* Don't ever override strdup if it's already macro defined.
+* 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.
+* Integrated cygwin pthreads support from Dan Bonachea.
+* Turn on DYNAMIC_LOADING for NetBSD.
+* 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.
+* Renamed "SUSPENDED" flag for Solaris threads support to avoid a conflict
+with a system header.
+* Cause win32_threads.c to handle an out of range stack pointer correctly,
+though currently with a warning.
+
+
+[6.1alpha4]
+===========
+
+* 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.
+* 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.
+* Change GC_test_and_set so that it consistently has one argument.
+Add spaces to ::: in powerpc assembly code in gc_locks.h.
+* Fixed a formatting error in dbg_mlc.c.  Added prototype to GC_abort()
+declaration.
+* 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.
+* 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.
+* 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.
+* Upgraded libtool, cinfigure.in and some related files to hopefully
+support NetBSD/SPARC.  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.
+* 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.
+* 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.
+* 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.
+* 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.
+* Force 64 bit alignment with GCJ support.
+* Refined the choice of sa_handler vs. sa_sigaction in GC_dirty_init
+to accommodate some glibc5 systems.
+* 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.
+
+
+[6.1alpha3]
+===========
+
+* Minor cleanup on the gcconfig.h section for SPARC.
+* Minor fix to support Intel compiler for I386/Linux.
+* Added SPARC V9 (64-bit) support.
+* 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, pointer-free objects are not protected.
+Added GC_incremental_protection_needs() to determine ahead of time whether
+pointer-free 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().
+
+
+[6.1alpha2]
+===========
+
+* No longer wrap read by default in multi-threaded 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
+broken with incremental collection.  It's possible to turn this back on
+if you make sure that read calls don't block (e.g. by calling select
+first).
+* Fix ifdef in Solaris_threads.h to refer to GC_SOLARIS_THREADS.
+* Added check for environment variable GC_IGNORE_GCJ_INFO.
+* 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.
+* 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.
+* Integrated port to NEC EWS4800 (MIPS-based workstation, with somewhat
+different address-space layout). This may help for other machines with
+holes in the data segment.
+* 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 recover if those overflow the mark stack.
+* Some minor cleanups to mostly support the Intel compiler on Linux/IA64.
+
+
+[6.1alpha1]
+===========
+
+* Non-debug, atomic allocations could result in bogus smashed object
+reports with debugging on.
+* Fixed GC_get_register_stack_base (Itanium only) to work around a glibc
+2.2.4 bug.
+* Initial port to HP/UX on Itanium.  Thread support and both 32 and 64
+bit ABIs appear to work.  Parallel mark support doesn't yet, due to
+some inline assembly code issues.  Thread local allocation does appear
+to work.
+* ifdef'ed out glibc2.1/Itanium workaround.  I suspect nobody is using
+that combination anymore.
+* Added a patch to make new_gc_alloc.h usable with gcc3.0.
+* Debugged 64-bit support on HP/UX PA-RISC.
+* Turned on dynamic loading support for FreeBSD/ELF.
+* Unregistering of finalizers with debugging allocation was broken.
+* Old finalizers were not returned correctly from GC_debug_register_finalizer.
+* Disabled MPROTECT_VDB for Linux/M68K based on a report that it doesn't work.
+* Cleaned up some statistics gathering code in reclaim.c.
+* Added some support for OpenBSD/ELF/Linux.
+* Added Jakub Jelinek's patch to use dl_iterate_phdr for dynamic library
+traversal to dyn_load.c.  Changed it to weakly reference dl_iterate_phdr,
+so that the old code is stilll used with old versions of glibc.
+* Cleaned up feature test macros for various threads packages and
+integrated (partially functional) FreeBSD threads code from Loren Rittle.
+It's likely that the cleanup broke something, since it touched lots of
+code.  It's also likelly that it fixed some unreported bugs in the
+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.
+
+
+[6.0]
+=====
+
+* Two more bug fixes for KEEP_BACK_PTRS and DBG_HDRS_ALL.
+* Fixed a stack clearing problem that resulted in SIGILL with a
+misaligned stack pointer for multi-threaded SPARC builds.
+* Integrated another HURD patch.
+
+
+[6.0alpha9]
+===========
+
+* added README.macros.
+* Made gc.mak a symbolic link to work around winzip's tendency to ignore
+hard links.
+* Simplified the setting of NEED_FIND_LIMIT in os_dep.c, possibly breaking
+it on untested platforms.
+* Integrated initial GNU HURD port.
+* A few more fixes for Digital Mars compiler (Walter Bright).
+* Fixed gcc version recognition.  Renamed OPERATOR_NEW_ARRAY to
+GC_OPERATOR_NEW_ARRAY.  Changed GC_OPERATOR_NEW_ARRAY to be the default.
+It can be overridden with -DGC_NO_OPERATOR_NEW_ARRAY.
+* Changed the byte size to free-list mapping in thread local allocation
+so that size 0 allocations are handled correctly.
+* Fixed Linux/MIPS stackbottom for new toolchain.
+* Changed finalization registration to invoke GC_oom_fn when it runs out
+of memory.
+* Removed lvalue cast in finalize.c.  This caused some debug configurations
+not to build with some non-gcc compilers.
+
+
+[6.0alpha8]
+===========
+
+* Changed GC_debug_malloc_replacement and GC_debug_realloc_replacement
+so that they compile under Irix.
+* Updated powerpc_macosx_mach_dep.s so that it works if the collector
+is in a dynamic library.
+* Transformed README.debugging into debugging.html, updating and
+expanding it in the process.  Added gcdescr.html and tree.html
+from the web site to the GC distribution.
+* Fixed several problems related to PRINT_BLACK_LIST. This involved
+restructuring some of the marker macros.
+* Fixed some problems with the sizing of objects with debug information.
+Finalization was broken KEEP_BACK_PTRS or PRINT_BLACK_LIST.  Reduced the
+object size with SHORT_DEBUG_HDRS by another word.
+* The "Needed to allocate blacklisted ..." warning had inadvertently
+been turned off by default, due to a buggy test in allchblk.c.  Turned
+it back on.
+* Removed the marker macros to deal with 2 pointers in interleaved fashion.
+They were messy and the performance improvement seemed minimal.  We'll
+leave such scheduling issues to the compiler.
+* Changed Linux/PowerPC test to also check for __powerpc__ in response
+to a discussion on the gcc mailing list.
+* Removed the "static" from the jmp_buf
+declaration in GC_generic_push_regs.  This was causing problems in
+systems that register all of their own roots.  It looks far more correct
+to me without the "static" anyway.
+* Fixed several problems with thread local allocation of pointer-free or
+typed objects.  The collector was reclaiming thread-local free lists, since
+it wasn't following the link fields.
+* There was apparently a long-standing race condition related to
+multi-threaded incremental collection.  A collection could be started and
+a thread stopped between the memory unprotect system call and the setting of
+the corresponding dirt bit.  I believe this did not affect Solaris or PCR,
+which use a different dirty-bit implementation.  Fixed this by installing
+signal handlers with sigaction instead of signal, and disabling the thread
+suspend signal while in the write-protect handler.  (It is unclear
+whether this scenario ever actually occurred.  I found it while tracking
+down the following:)
+* Incremental collection did not cooperate correctly with the PARALLEL_MARK
+implementation of GC_malloc_many or the local_malloc primitives.  It still
+doesn't work well, but it shouldn't lose memory anymore.
+* Integrated some changes from the gcc source tree that I had previously
+missed.
+* Added Makefile.direct as a copy of the default Makefile, which would
+normally be overwritten if configure is run.
+* Changed the gc.tar target in Makefile.direct to embed the version number
+in the gc directory name.  This will affect future tar file distributions.
+* Changed the Irix dynamic library finding code to no longer try to
+eliminate writable text segments under Irix6.x, since that is probably no
+longer necessary, and can apparently be unsafe on occasion.
+* GC_cleanup with GC_DEBUG enabled passed a real object base address to
+GC_debug_register_finalizer_ignore_self, which expected a pointer past the
+debug header.  Call GC_register_finalizer_ignore_self instead, even with
+debugging enabled.
+* The collector didn't build with call chain saving enabled but NARGS=0.
+* Fixed up the GNU-style build files enough so that they work in some
+obvious cases.
+* Added initial port to Digital Mars compiler for win32.
+
+
+[6.0alpha7]
+===========
+
+* Added GC_finalizer_notifier.  Fixed GC_finalize_on_demand.  (The variable
+actually wasn't being tested at the right points.  The build-time flag
+was.)
+* Added Tom Tromey's S390 Linux patch.
+* Added code to push GC_finalize_now in GC_push_finalizer_structures.
+* Added GC_push_gc_structures() to push all GC internal roots.
+* Integrated some FreeBSD changes from Matthew Flatt.
+* It looks like USRSTACK is not always correctly defined under Solaris.
+Hacked gcconfig.h to attempt to work around the problem.  The result
+is not well tested.
+* Added Ji-Yong Chung's win32 threads and C++ fixes.
+* Arranged for hpux_test_and_clear.s to no longer be needed or built.
+It was causing build problems with gas, and it's not clear this is
+better than the pthreads alternative on this platform.
+* Some MINGW32 fixes from Hubert Garavel.
+* Added Initial Hitachi SH4 port from Kaz Kojima.
+* Ported thread-local allocation and parallel mark code to HP/UX on PA_RISC.
+* Made include/gc_mark.h more public and separated out the really private
+pieces.  This is probably still not quite sufficient for clients that
+want to supply their own kind of type information.  But it's a start.
+This involved lots of identifier renaming to make it namespace clean.
+* Added GC_dont_precollect for clients that need complete control over
+the root set.
+* GC_is_visible didn't do the right thing with gcj objects.  (Not that
+many people are likely to care, but ...)
+* Don't redefine read with GC_USE_LD_WRAP.
+* Initial port to LINUX/HP_PA.  Incremental collection and threads are not
+yet supported.  (Incremental collection should work if you have the
+right kernel.  Threads may work with a sufficiently patched pthread
+library.)
+* Changed gcconfig.h to recognize __i386__ as an alternative to i386 in
+many places.
+* Made win32_threads.c more tolerant of detaching a thread that it didn't
+know about.
+* Added Makefile.am and configure.in from gcc to the distribution, with
+minimal changes.  For the moment, those are just placeholders.  In the
+future, we're planning to switch to a GNU-style build environment for
+Un*x-like systems, though the old Makefile will remain as a backup.
+* Turned off STUBBORN_ALLOC by default, and added it back as a Makefile
+option.
+* Redistributed some functions between malloc.c and mallocx.c, so that
+simple statically linked apps no longer pull in mallocx.o.
+* Changed large object allocation to clear the first and last few words
+of each block before releasing the lock.  Otherwise the marker could see
+objects with nonsensical type descriptors.
+* Fixed a couple of subtle problems that could result in not recognizing
+interior pointers from the stack.  (I believe these were introduced
+in 6.0alpha6.)
+* GC_debug_free_inner called GC_free, which tried to reacquire the
+allocator lock, and hence deadlocked.  (DBG_HDRS_ALL probably never worked
+with threads.)
+* Fixed several problems with back traces.  Accidental references to a free
+list could cause the free list pointer to be overwritten by a back pointer.
+There seemed to be some problems with the encoding of root and finalizer
+references.
+
+
+[6.0alpha6]
+===========
+
+* Changed the definition of DATASTART on ALPHA and IA64, where data_start
+and __data_start are not defined by earlier versions of glibc.  This might
+need to be fixed on other platforms as well.
+* Changed the way the stack base and backing store base are found on IA64.
+This should now remain reliable on future kernels.  But since it relies
+on /proc, it will no longer work in the simulated NUE environment.
+* Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent
+on the OS.  On non-Unix systems, rand() should be used instead.  Handled
+small RAND_MAX.
+* Fixed the cord make rules to create the cord subdirectory, if necessary.
+* Changed fo_object_size calculation in finalize.c.  Turned finalization
+of non-heap object into a no-op.  Removed anachronism from GC_size()
+implementation.
+* Changed GC_push_dirty call in solaris_threads.c to GC_push_selected.
+It was missed in a previous renaming.
+* Arranged to not not mask SIGABRT in linux_threads.c.
+* Added GC_no_dls hook for applications that want to register their own
+roots.
+* Integrated Kjetil Matheussen's Amiga changes.
+* Added FREEBSD_STACKBOTTOM.  Changed the X86/FreeBSD port to use it.
+* Added pthread_detach interception for platforms supported by linux_threads.c
+and irix_threads.c.
+* Changed the USE_MMAP code to check for the case in which we got the
+high end of the address space, i.e. mem_ptr + mem_sz == 0.  It appears
+that this can happen under Solaris 7.  It seems to be allowed by what
+I would claim is an oversight in the mmap specification.
+* Cleanup of linux_threads.c.  Some code was originally cloned from
+irix_threads.c and now unnecessary.  Some comments were obviously wrong.
+* (Mostly) fixed a longstanding problem with setting of dirty bits from
+a signal handler.  In the presence of threads, dirty bits could get lost,
+since the etting of a bit in the bit vector was not atomic with respect
+to other updates.  The fix is 100% correct only for platforms for which
+GC_test_and_set is defined.  The goal is to make that all platforms with
+thread support.  Matters only if incremental GC and threads are both
+enabled.
+* made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an
+initialization time, instead of build-time option.  This is a
+nontrivial, high risk change.  It should slow down the code measurably
+only if MERGE_SIZES is not defined, which is a very nonstandard
+configuration.
+* Added doc/README.environment, and implemented what it describes.  This
+allows a number of additional configuration options to be set through
+the environment.  It documents a few previously undocumented options.
+* Integrated Eric Benson's leak testing improvements.
+* Removed the option to throw away the beginning of each page (DISCARD_WORDS).
+This became less and less useful as processors enforce stricter alignment.
+And it hadn't been tested in ages, and was thus probably broken anyway.
+
+
+[6.0alpha5]
+===========
+
+* Changed the definition of GC_pause in linux_threads.c to use a volatile
+asm.  Some versions of gcc apparently optimize away writes to local volatile
+variables.  This caused poor locking behavior starting at about
+4 processors.
+* Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep
+to linux_threads.c.
+The first two calls could be used to generally avoid sending GC signals to
+blocked threads, avoiding both premature wakeups and unnecessary overhead.
+* Fixed a serious bug in thread-local allocation.  At thread termination,
+GC_free could get called on small integers.  Changed the code for thread
+termination to more efficiently return left-over free-lists.
+* Integrated Kjetil Matheussen's BeOS support.
+* Rearranged the directory structure to create the doc and tests
+subdirectories.
+* Sort of integrated Eric Benson's patch for OSF1.  This provided basic
+OSF1 thread support by suitably extending hpux_irix_threads.c.  Based
+on earlier email conversations with David Butenhof, I suspect that it
+will be more reliable in the long run to base this on linux_threads.c
+instead.  Thus I attempted to patch up linux_threads.c based on Eric's code.
+The result is almost certainly broken, but hopefully close enough that
+someone with access to a machine can pick it up.
+* Integrated lots of minor changes from the NetBSD distribution.  (These
+were supplied by David Brownlee.  I'm not sure about the original
+authors.)
+* Hacked a bit more on the HP/UX thread-support in linux_threads.c.  It
+now appears to work in the absence of incremental collection.  Renamed
+hpux_irix_threads.c back to irix_threads.c, and removed the attempt to
+support HPUX there.
+* Changed gc.h to define _REENTRANT in cases in which it should already
+have been defined. It is still safer to also define it on the command
+line.
+
+
+[6.0alpha4]
+===========
+
+* Moved up the detection of mostly full blocks to the initiation of the
+sweep phase.  This eliminates some lock contention in the PARALLEL_MARK case,
+as multiple threads try to look at mostly full blocks concurrently.
+* Restored the code in GC_malloc_many that grabs a prefix of the global
+free list.  This avoids the case in which every GC_malloc_many call
+tries and fails to allocate a new heap block, and the returns a single
+object from the global free list.
+* Some minor fixes in new_hblk.c.  (Attempted to build free lists in order
+of increasing addresses instead of decreasing addresses for cache performance
+reasons.  But this seems to be only a very minor gain with -DEAGER_SWEEP,
+and a loss in other cases.  So the change was backed out.)
+* Fixed some of the documentation.
+* Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform
+large numbers of mmaps.  Also fixed that code to
+deal with short reads.
+* Added GC_get_total_bytes().
+* Fixed leak detection mode to avoid spurious messages under linuxthreads.
+(This should also now be easy for the other supported threads packages.
+But the code is tricky enough that I'm hesitant to do it without being able
+to test.  Everything allocated in the GC thread support itself should be
+explicitly deallocated.)
+* Made it possible (with luck) to redirect malloc to GC_local_malloc.
+
+
+[6.0alpha3]
+===========
+
+* Fixed the /proc/self/maps code to not seek, since that apparently is not
+reliable across all interesting kernels.
+* Fixed some compilation problems in the absence of PARALLEL_MARK
+(introduced in alpha2).
+* Fixed an algorithmic problem with PARALLEL_MARK.  If work needs to
+be given back to the main mark "stack", the BOTTOM entries of the local
+stack should be given away, not the top ones.  This has substantial
+performance impact, especially for > 2 processors, from what I can tell.
+* Extracted gc_lock.h from gc_priv.h.  This should eventually make it a
+bit easier to avoid including gc_priv.h in clients.
+* Moved all include files to include/ and removed duplicate links to the
+same file.  The old scheme was a bad idea because it was too easy to get the
+copies out of sync, and many systems don't support hard links.
+Unfortunately, it's likely that I broke some of the non-Unix Makefiles in
+the process, although I tried to update them appropriately.
+* Removed the partial support for a copied nursery.  It's not clear that
+this would be a tremendous win, since we don't consistently lose to
+generational copying collectors.  And it would significantly complicate
+many things.  May be reintroduced if/when it really turns out to win.
+* Removed references to IRIX_JDK_THREADS, since I believe there never
+were and never will be any clients.
+* Added some code to linux_threads.c to possibly support HPUX threads
+using the Linux code.  Unfortunately, it doesn't work yet, and is
+currently disabled.
+* Added support under Linux/X86 for saving the call chain, both in (debug)
+objects for client debugging, and in GC_arrays._last_stack for GC
+debugging.  This was previously supported only under Solaris.  It is
+not enabled by default under X86, since it requires that code be compiled
+to explicitly gave frame pointers on the call stack.  (With gcc this
+currently happens by default, but is often turned off explicitly.)
+To turn it on, define SAVE_CALL_CHAIN.
+
+
+[6.0alpha2]
+===========
+
+* Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms
+for which that's expensive.
+* Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems.
+* Added a missing volatile to OR_WORD and renamed the parameter to
+GC_compare_and_swap so it's not a C++ reserved word.
+* Changed Linux dynamic library registration code to look at /proc/self/maps
+instead of the rld data structures when REDIRECT_MALLOC is defined.
+Otherwise some of the rld data data structures may be prematurely garbage
+collected.
+* Fixed USE_LD_WRAP a bit more, so it should now work without threads.
+* Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness.
+Temporarily added some backward compatibility definitions.  Renamed
+USE_LD_WRAP to GC_USE_LD_WRAP.
+* Many MACOSX POWERPC changes, some additions to the gctest output, and
+a few minor generic bug fixes.
+
+
+[6.0alpha1]
+===========
+
+* Added HP/PA prefetch support.
+* Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve
+the reliability of generating pointer backtrace information, e.g. in
+the Bigloo environment.
+* Added parallel marking support (-DPARALLEL_MARK).  This currently
+works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt
+to other platforms.  This is intended to be a lighter-weight (less
+new code, probably not as scalable) solution than the work by Toshio Endo
+et al, at the University of Tokyo.  A number of their ideas were
+reused, though the code wasn't, and the underlying data structure
+is significantly different.  In particular, we keep the global mark
+stack as a single shared data structure, but most of the work is done
+on smaller thread-local mark stacks.
+* Changed GC_malloc_many to be cheaper, and to require less mutual exclusion
+with -DPARALLEL_MARK.
+* Added full support for thread local allocation under Linux
+(-DTHREAD_LOCAL_ALLOC).  This is a thin veneer on GC_malloc_many, and
+should be easily portable to other platforms, especially those that
+support pthreads.
+* CLEAR_DOUBLE was not always getting invoked when it should have been.
+* GC_gcj_malloc and friends used different out of memory handling than
+everything else, probably because I forgot about one when I implemented
+the other.  They now both call GC_oom_fn(), not GC_oom_action().
+* Integrated Jakub Jelinek's fixes for Linux/SPARC.
+* Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of
+GC_arrays, and separately registered the first two as excluded roots.
+This makes code compiled with gc_inl.h less dependent on the
+collector version.  (It would be nice to remove the inclusion of
+gc_priv.h by gc_inl.h completely, but we're not there yet.  The
+locking definitions in gc_priv.h are still referenced.)
+This change was later conditioned on SEPARATE_GLOBALS, which
+is not defined by default, since it involves a performance hit.
+* Register GC_obj_kinds separately as an excluded root region.  The
+attempt to register it with GC_arrays was usually failing.  (This wasn't
+serious, but seemed to generate some confusion.)
+* Moved backptr.h to gc_backptr.h.
+
+
+[5.4]
+=====
+
+* Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH.
+* Fixed GC_is_thread_stack in solaris_threads.c.  It forgot to return a value
+in the common case.
+* Fixed another silly syntax problem in GC_double_descr.
+* Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice.
+
+
+[5.3]
+=====
+
+* Fixed _end declaration for OSF1.
+* There were lots of spurious leak reports in leak detection mode, caused
+by the fact that some pages were not being swept, and hence unmarked
+objects weren't making it onto free lists.  (This bug dated back to 5.0.)
+* Fixed a typo in the liblinuxgc.so Makefile rule.
+* Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work
+around a Windows 95 GetOpenFileName problem.
+
+
+[5.2]
+=====
+
+* dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it
+was defined as a macro.  This prevented the collector from building on
+Irix.
+* We quietly assumed that indirect mark descriptors were never 0.
+Our own typed allocation interface violated that.  This could result
+in segmentation faults in the marker with typed allocation.
+* Fixed a _DUSE_MUNMAP bug in the heap block allocation code.
+* Taught the collector about VC++ handling array operator new.
+* The two copies of gc_hdrs.h had diverged.  Made one a link to the other
+again.
+
+
+[5.1]
+=====
+
+* Fixed a gc.h header bug which showed up under Irix.
+* Fixed a typo in GC_double_descr in typd_mlc.c.
+This probably could result in objects described by array descriptors not
+getting traced correctly.
+* 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.
+
+
+[5.0]
+=====
+
+* Fixed threadlibs.c for linux threads.  -DUSE_LD_WRAP was broken and
+-ldl was omitted.  Fixed Linux stack finding code to handle
+-DUSE_LD_WRAP correctly.
+* Added MSWIN32 exception handler around marker, so that the collector
+can recover from root segments that are unmapped during the collection.
+This caused occasional failures under Windows 98, and may also be
+an issue under Windows NT/2000.
+
+
+[5.0alpha7]
+===========
+
+* -DREDIRECT_MALLOC was broken in alpha6. Fixed.
+* Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to
+accept it.
+* Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be
+linked into every executable.
+* Added PREFETCH to bitmap marker.  Changed it to use the header cache.
+* GC_push_marked sometimes pushed one object too many, resulting in a
+segmentation fault in GC_mark_from_mark_stack.  This was probably an old
+bug.  It finally showed up in gctest on win32.
+* Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE
+when SMALL_CONFIG was defined.  This was no doubt a major performance bug for
+the default win32 configuration.
+* Removed -DSMALL_CONFIG from NT_MAKEFILE.  It seemed like an anachronism now
+that the average PC has 64MB or so.
+* Integrated Bryce McKinley's patches for linux threads and dynamic loading
+from the libgcj tree.  Turned on dynamic loading support for Linux/PPC.
+* Changed the stack finding code to use environ on HP/UX.  This should
+probably be done on other platforms, too.  Since I can't test those, that'll
+wait until after 5.0.
+
+
+[5.0alpha6]
+===========
+
+* GC_malloc_explicitly_typed and friends sometimes failed to
+initialize first word.
+* Added allocation routines and support in the marker for mark descriptors
+in a type structure referenced by the first word of an object.  This was
+introduced to support gcj, but hopefully in a way that makes it
+generically useful.
+* Added GC_requested_heapsize, and inhibited collections in non-incremental
+mode if the actual used heap size is less than what was explicitly
+requested.
+* The Solaris pthreads version of GC_pthread_create didn't handle a NULL
+attribute pointer.  Solaris thread support used the wrong default thread
+stack size.
+* Changed PUSH_CONTENTS macro to no longer modify first parameter.
+This usually doesn't matter, but it was certainly an accident waiting
+to happen ...
+* Added GC_register_finalizer_no_order and friends to gc.h.  They're
+needed by Java implementations.
+* Integrated a fix for a win32 deadlock resulting from clock() calling
+malloc.
+* Integrated Hiroshi Kawashima's port to Linux/MIPS.  This was designed
+for a handheld platform, and may or may not be sufficient for other
+machines.
+* Fixed a va_arg problem with the %c specifier in cordprnt.c.  It appears
+that this was always broken, but recent versions of gcc are the first to
+report the (statically detectable) bug.
+* Added an attempt at a more general solution to dlopen races/deadlocks.
+GC_dlopen now temporarily disables collection.  Still not ideal, but ...
+* Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64
+prefetch instructions.  May improve performance measurably, but I'm not
+sure the code will run correctly on processors that don't support the
+instruction.  Won't build except with very recent gcc.
+* Added caching for header lookups in the marker.  This seems to result
+in a barely measurable performance gain.  Added support for interleaved
+lookups of two pointers, but unconfigured that since the performance
+gain is currently near zero, and it adds to code size.
+* Changed Linux DATA_START definition to check both data_start and
+__data_start, since nothing else seems to be portable.
+* Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function
+wrapping mechanism.  Probably currently useful only on Linux.
+* Moved some variables for the scratch allocator into GC_arrays.
+* Fixed a win32 threads bug that caused the collector to not look for
+interior pointers from one of the thread stacks without
+ALL_INTERIOR_POINTERS.
+* Added Mingw32 support.
+* Changed the alpha port to use the generic register scanning code instead
+of alpha_mach_dep.s.  Alpha_mach_dep.s doesn't look for pointers in fp
+registers, but gcc sometimes spills pointers there.  Changed the IA64 code to
+do something similar for similar reasons.
+
+
+[5.0alpha4]
+===========
+
+* Added protection fault handling patch for Linux/M68K from Fergus
+Henderson and Roman Hodek.
+* Removed the tests for SGI_SOURCE in new_gc_alloc.h.  This was causing that
+interface to fail on nonSGI platforms.
+* Changed the Linux stack finding code to use /proc, after changing it
+to use HEURISTIC1.
+* Added HP/UX incremental GC support and HP/UX 11 thread support.
+Thread support is currently still flakey.
+* Added basic Linux/IA64 support.
+* Integrated Anthony Green's PicoJava support.
+* Integrated Scott Ananian's StrongARM/NetBSD support.
+* Fixed some fairly serious performance bugs in the incremental
+collector.  These have probably been there essentially forever.
+(Mark bits were sometimes set before scanning dirty pages.
+The reclaim phase unnecessarily dirtied full small object pages.)
+* Changed the reclaim phase to ignore nearly full pages to avoid
+touching them.
+* Limited GC_black_list_spacing to roughly the heap growth increment.
+* Changed full collection triggering heuristic to decrease full GC
+frequency by default, but to explicitly trigger full GCs during
+heap growth.  This doesn't always improve things, but on average it's
+probably a win.
+* GC_debug_free(0, ...) failed.
+
+
+[5.0alpha3]
+===========
+
+* Added some highly incomplete code to support a copied young generation.
+Comments on nursery.h are appreciated.
+* Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND,
+so the same effect could be obtained with a runtime switch.   This is
+a step towards standardizing on a single dynamic GC library.
+* Significantly changed the way leak detection is handled, as a consequence
+of the above.
+
+
+[5.0alpha2]
+===========
+
+* Fixed bugs introduced in alpha1 (OpenBSD & large block initialization).
+* Added -DKEEP_BACK_PTRS and backptr.h interface.  (The implementation
+idea came from Al Demers.)
+
+
+[5.0alpha1]
+===========
+
+* Reworked large block allocator.  Now uses multiple doubly linked free
+lists to approximate best fit.
+* Changed heap expansion heuristic.  Entirely free blocks are no longer
+counted towards the heap size.  This seems to have a major impact on
+heap size stability; the old version could expand the heap way too
+much in the presence of large block fragmentation.
+* added -DGC_ASSERTIONS and some simple assertions inside the collector.
+This is mainlyt for collector debugging.
+* added -DUSE_MUNMAP to allow the heap to shrink.  Supported on only
+a few UNIX-like platforms for now.
+* added GC_dump_regions() for debugging of fragmentation issues.
+* Changed PowerPC pointer alignment under Linux to 4.
+* Changed the Linux/Alpha port to walk the data segment backwards until
+it encounters a SIGSEGV.  The old way to find the start of the data
+segment broke with a recent release.
+* cordxtra.c needed to call GC_REGISTER_FINALIZER instead of
+GC_register_finalizer, so that it would continue to work with GC_DEBUG.
+* allochblk sometimes cleared the wrong block for debugging purposes
+when it dropped blacklisted blocks.  This could result in spurious
+error reports with GC_DEBUG.
+* added MACOS X Server support.
+* Changed the Solaris threads code to ignore stack limits > 8 MB with
+a warning.  Empirically, it is not safe to access arbitrary pages
+in such large stacks.  And the dirty bit implementation does not
+guarantee that none of them will be accessed.
+* Integrated Martin Tauchmann's Amiga changes.
+* Integrated James Dominy's OpenBSD/SPARC port.
+
+
+[4.14]
+======
+
+* changed STACKBOTTOM for DJGPP.
+
+
+[4.14alpha2]
+============
+
+* -DSMALL_CONFIG did not work reliably with large (> 4K) pages.
+Recycling the mark stack during expansion could result in a size
+zero heap segment, which confused things.  (This was probably also an
+issue with the normal config and huge pages.)
+* Did more work to make sure that callee-save registers were scanned
+completely, even with the setjmp-based code.  Added USE_GENERIC_PUSH_REGS
+macro to facilitate testing on machines I have access to.
+* Added code to explicitly push register contents for win32 threads.
+This seems to be necessary.
+
+
+[4.14alpha1]
+============
+
+* Fixed GC_print_source_ptr to not use a prototype.
+* generalized CYGWIN test.
+* gc::new did the wrong thing with PointerFreeGC placement.
+* In the ALL_INTERIOR_POINTERS (default) case, some callee-save register
+values could fail to be scanned if the register was saved and
+reused in a GC frame.  This showed up in verbose mode with gctest
+compiled with an unreleased SGI compiler.  I vaguely recall an old
+bug report that may have been related.  The bug was probably quite old.
+(The problem was that the stack scanning could be deferred until
+after the relevant frame was overwritten, and the new save location
+might be outside the scanned area.  Fixed by more eager stack scanning.)
+* PRINT_BLACK_LIST had some problems.  A few source addresses were garbage.
+* Replaced Makefile.dj and added -I flags to cord make targets.
+* GC_try_to_collect was broken with the non-incremental collector.
+* gc_cleanup destructors could pass the wrong address to
+GC_register_finalizer_ignore_self in the presence of multiple
+inheritance.
+* Changed PowerPC Linux stack finding code.
+
+
+[4.13]
+======
+
+* Fixed a crucial bug in the Watcom port.  There was a redundant declaration
+of GC_push_one in gc_priv.h.
+* Added FINALIZE_ON_DEMAND.
+* Fixed some pre-ANSI cc problems in test.c.
+* Removed getpagesize() use for Solaris.  It seems to be missing in one
+or two versions.
+* Fixed bool handling for SPARCCompiler version 4.2.
+* Fixed some files in include that had gotten unlinked from the main
+copy.
+* Some RS/6000 fixes (missing casts).
+* Fixed several problems in GC_debug_realloc, affecting mostly the
+FIND_LEAK case.
+* GC_exclude_static_roots contained a buggy unsigned comparison to
+terminate a loop.
+* CORD_str failed if the substring occurred at the last possible position.
+(Only affects cord users.)
+* Fixed Linux code to deal with RedHat 5.0 and integrated Peter Bigot's
+os_dep.c code for dealing with various Linux versions.
+* Added workaround for Irix pthreads sigaction bug and possible signal
+misdirection problems.
+Since alpha1:
+* Changed RS6000 STACKBOTTOM.
+* Integrated Patrick Beard's Mac changes.
+* Alpha1 didn't compile on Irix m.n, m < 6.
+* Replaced Makefile.dj with a new one from Gary Leavens.
+* Added Andrew Stitcher's changes to support SCO OpenServer.
+* Added PRINT_BLACK_LIST, to allow debugging of high densities of false
+pointers.
+* Added code to debug allocator to keep track of return address
+in GC_malloc caller, thus giving a bit more context.
+* Changed default behavior of large block allocator to more
+aggressively avoid fragmentation.  This is likely to slow down the
+collector when it succeeds at reducing space cost.
+* Integrated Fergus Henderson's CYGWIN32 changes.  They are untested,
+but needed for newer versions.
+* USE_MMAP had some serious bugs.  This caused the collector to fail
+consistently on Solaris with -DSMALL_CONFIG.
+* Added Linux threads support.
+* Fixed more Linux threads problems.
+* Changed default GC_free_space_divisor to 3 with new large block allocation.
+* More CYGWIN32 fixes.
+* Integrated Tyson-Dowd's Linux-M68K port.
+* Minor HP PA and DEC UNIX fixes from Fergus Henderson.
+* Integrated Christoffe Raffali's Linux-SPARC changes.
+* Allowed for one more GC fixup iteration after a full GC in incremental
+mode.  Some quick measurements suggested that this significantly
+reduces pause times even with smaller GC_RATE values.
+* Moved some more GC data structures into GC_arrays.  This decreases
+pause times and GC overhead, but makes debugging slightly less convenient.
+* Fixed namespace pollution problem ("excl_table").
+* Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking
+that slightly.
+* Added some win32 threads fixes.
+* Integrated Ivan Demakov and David Stes' Watcom fixes.
+* Various other minor fixes contributed by many people.
+* Renamed config.h to gcconfig.h, since config.h tends to be used for
+many other things.
+* Integrated Matthew Flatt's support for 68K MacOS "far globals".
+* Fixed up some of the dynamic library Makefile targets for consistency
+across platforms.
+* Fixed a USE_MMAP typo that caused out-of-memory handling to fail
+on Solaris.
+* Added code to test.c to test thread creation a bit more.
+* Integrated GC_win32_free_heap.
+* Fixed Solaris 2.7 stack base finding problem.  (This may actually
+have been done in an earlier alpha release.)
+Since alpha3:
+* Fixed MSWIN32 recognition test, which interfered with cygwin.
+* Removed unnecessary gc_watcom.asm from distribution.  Removed
+some obsolete README.win32 text.
+* Added Alpha Linux incremental GC support.
+Changed Linux signal handler context argument to be a pointer.
+* Took care of some new warnings generated by the 7.3 SGI compiler.
+* Integrated Phillip Musumeci's FreeBSD/ELF fixes.
+* -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h>
+
+
+[4.12]
+======
+
+* Fixed ElfW definition in dyn_load.c.
+This prevented the dynamic library support from compiling on some
+older ELF Linux systems.
+* Fixed UTS4 port (which I apparently mangled during the integration)
+* "Make C++" failed on Suns with SC4.0, due to a problem with "bool".
+Fixed in gc_priv.h.
+* Added more pieces for GNU win32.
+The current state of things should suffice for at least some
+applications.
+* Changed the out of memory retry count handling.  (This matters only
+if GC_max_retries > 0, which is no longer the default.)
+* If a /proc read failed repeatedly, GC_written_pages was not updated
+correctly.
+* Under unlikely circumstances, the allocator could infinite loop in
+an out of memory situation.
+* Fixed a syntactic error in the DJGPP code.  Also fixed a test program
+problem with DJGPP.
+* Atomic uncollectable objects were not treated correctly by the
+incremental collector.  This resulted in weird log statistics and
+occasional performance problems.
+* Fixed some problems resulting from compilers that don't define
+__STDC__.  In this case void * and char * were used inconsistently
+in some cases.  (Void * should not have been used at all.  If
+you have an ANSI superset compiler that does not define __STDC__,
+please compile with -D__STDC__=0.)
+* Fixed a compilation problem on Irix with -n32 and -DIRIX_THREADS.
+Also fixed some other IRIX_THREADS problems which may or may not have
+had observable symptoms.
+* Fixed an HP PA compilation problem in dyn_load.c.
+* SEGV fault handlers sometimes did not get reset correctly.
+* Added a fix for SOLARIS_THREADS on Intel.
+This probably needs more work to become functional.
+* Fixed struct sigcontext_struct in os_dep.c for compilation under
+Linux 2.1.X.
+* Changed the DJGPP STACKBOTTOM and DATASTART values to those ones suggested.
+These may still not be right, but it is
+it is likely to work more often than what was there before.  They may
+even be exactly right.
+* Added a #include <string.h> to test_cpp.cc.  This appears to help
+with HP/UX and gcc.
+* Version 4.11 failed to run in incremental mode on recent 64-bit Irix
+kernels.  This was a problem related to page unaligned heap segments.
+Changed the code to page align heap sections on all platforms.
+(I had mistakenly identified this as a kernel problem earlier.
+It was not.)
+* Version 4.11 did not make allocated storage executable, except on
+one or two platforms, due to a bug in a #if test.
+* Added sparc_sunos4_mach_dep.s to support Sun's compilers under SunOS4.
+* Added GC_exclude_static_roots.
+* Fixed the object size mapping algorithm.  This shouldn't matter,
+but the old code was ugly.
+* Heap checking code could die if one of the allocated objects was
+larger than its base address.  (Unsigned underflow problem.)
+* Added RS6000 (AIX) dynamic library support and fixed STACK_BOTTOM.
+* Added Fergus Henderson's patches for improved robustness with large
+heaps and lots of blacklisting.
+* Added Peter Chubb's changes to support Solaris Pthreads, to support
+MMAP allocation in Solaris, to allow Solaris to find dynamic libraries
+through /proc, to add malloc_typed_ignore_off_page, and a few other
+minor features and bug fixes.
+* The Solaris 2 port should not use sbrk.  I received confirmation from
+Sun that the use of sbrk and malloc in the same program is not
+supported.  The collector now defines USE_MMAP by default on Solaris.
+* Replaced the djgpp makefile with Gary Leavens' version.
+* Fixed MSWIN32 detection test.
+* Added Fergus Henderson's patches to allow putting the collector into
+a DLL under GNU win32.
+* Added Ivan V. Demakov's port to Watcom C on X86.
+* Added Ian Piumarta's Linux/PowerPC port.
+* Added PointerFreeGC to the placement
+options in gc_cpp.h.  This is of course unsafe, and may be controversial.
+On the other hand, it seems to be needed often enough that it's worth
+adding as a standard facility.
+
+
+[4.11]
+======
+
+* Rationalized (hopefully) GC_try_to_collect in an incremental collection
+environment.  It appeared to not handle a call while a collection was in
+progress, and was otherwise too conservative.
+* Merged GC_reclaim_or_delete_all into GC_reclaim_all to get rid of some
+code.
+* Added Patrick Beard's Mac fixes, with substantial completely untested
+modifications.
+* Fixed the MPROTECT_VDB code to deal with large pages and imprecise
+fault addresses (as on an UltraSPARC running Solaris 2.5).  Note that this
+was not a problem in the default configuration, which uses PROC_VDB.
+* The DEC Alpha assembly code needed to restore $gp between calls.
+* The write command for "de" was completely broken for large files.
+I used the easiest portable fix, which involved changing the semantics
+so that f.new is written instead of overwriting f.  That's safer anyway.
+* Added README.solaris2 with a discussion of the possible problems of
+mixing the collector's sbrk allocation with malloc/realloc.
+* Changed the data segment starting address for SGI machines.  The
+old code failed under IRIX6.
+* Required double word alignment for MIPS.
+* Various minor fixes to remove warnings.
+* Attempted to fix some Solaris threads problems.
+In particular, the collector could try to fork a thread with the
+world stopped as part of GC_thr_init.  It also failed to deal with
+the case in which the original thread terminated before the whole
+process did.
+* Added -DNO_EXECUTE_PERMISSION.  This has a major performance impact
+on the incremental collector under Irix, and perhaps under other
+operating systems.
+* Added some code to support allocating the heap with mmap.  This may
+be preferable under some circumstances.
+* Integrated dynamic library support for HP.
+* Integrated James Clark's win32 threads support, and made a number
+of changes to it. This is still not 100% solid.
+* Integrated Alistair Crooks' support for UTS4 running on an Amdahl
+370-class machine.
+* Fixed a serious bug in explicitly typed allocation.  Objects requiring
+large descriptors where handled in a way that usually resulted in
+a segmentation fault in the marker.
+* Added partial support for GNU win32 development.
+* Added optional support for Java-style finalization semantics.
+This is recommended only for Java implementations.
+* GC_malloc_uncollectable faulted instead of returning 0 when out of
+memory.
+* Calls to GC_base before the collector was initialized failed on a
+DEC Alpha.
+* Added base pointer checking to GC_REGISTER_FINALIZER in debugging mode.
+* GC_debug_realloc failed for uncollectable objects.
+* Explicitly typed allocation could crash if it ran out of memory.
+* Added minimal support for a DEC Alpha running Linux.
+* Fixed a problem with allocation of objects whose size overflowed
+ptrdiff_t.  (This now fails unconditionally, as it should.)
+* Added the beginning of Irix pthread support.
+* Integrated Xiaokun Zhu's fixes for djgpp 2.01.
+* Added SGI-style STL allocator support (gc_alloc.h).
+* Fixed a serious bug in README.solaris2.
+Multi-threaded programs must include
+gc.h with SOLARIS_THREADS defined.
+* Changed GC_free so it actually deallocates uncollectable objects.
+* Added Linux ELF support for dynamic libraries.
+* Changed the Borland cc configuration so that the assembler is not
+required.
+* Fixed a bug in the C++ test that caused it to fail in 64-bit
+environments.
+
+
+[4.10]
+======
+
+* Fixed a typo around a call to GC_collect_or_expand in alloc.c.  It broke
+handling of out of memory.
+
+
+[4.9]
+=====
+
+* More README.debugging fixes.
+* Objects ready for finalization, but not finalized in the same GC
+cycle, could be prematurely collected.  This occasionally happened
+in test_cpp.
+* Too little memory was obtained from the system for very large
+objects.  That could cause a heap explosion if these objects were
+not contiguous (e.g. under PCR), and too much of them was blacklisted.
+* Due to an improper initialization, the collector was too hesitant to
+allocate blacklisted objects immediately after system startup.
+* Moved GC_arrays from the data into the bss segment by not explicitly
+initializing it to zero.  This significantly
+reduces the size of executables, and probably avoids some disk accesses
+on program startup.  It's conceivable that it might break a port that I
+didn't test.
+* Fixed EMX_MAKEFILE to reflect the gc_c++.h to gc_cpp.h renaming which
+occurred a while ago.
+
+
+[4.8]
+=====
+
+* Changed a "comment" in a MacOS specific part of mach_dep.c that caused
+gcc to fail on other platforms.
+
+
+[4.7]
+=====
+
+* Fixed some compilation problems with -DCHECKSUMS.
+* Updated some Mac specific files.
+* Fixed a serious bug for machines with non-word-aligned pointers.
+
+
+[4.6]
+=====
+
+* Added Linux ELF support.
+* GC_base crashed if it was called before any other GC_ routines.
+This could happen if a gc_cleanup object was allocated outside the heap
+before any heap allocation.
+* The heap expansion heuristic was not stable if all objects had finalization
+enabled.  Fixed finalize.c to count memory in finalization queue and
+avoid explicit deallocation.  Changed alloc.c to also consider this count.
+(This is still not recommended.  It's expensive if nothing else.)
+* GC_malloc_uncollectable(0) was broken.
+* The collector didn't compile under Linux 1.3.X.
+The current workaround is ugly, but expected to be temporary.
+* Fixed a formatting problem for SPARC stack traces.
+* Fixed some '=='s in os_dep.c that should have been assignments.
+Fortunately these were in code that should never be executed anyway.
+* Fixed the heap block allocator to only drop blacklisted blocks in small
+chunks.  Made BL_LIMIT self adjusting.  (Both of these were in response
+to heap growth observed by Paul Graham.)
+* Fixed the Metrowerks/68K Mac code to also mark from a6.
+* Significantly updated README.debugging.
+* Fixed some problems with longjmps out of signal handlers, especially under
+Solaris.  Added a workaround for the fact that siglongjmp doesn't appear to
+do the right thing with -lthread under Solaris.
+* Added MSDOS/djgpp port.
+* Added "make reserved_namespace" and "make user_namespace".  The
+first renames ALL "GC_xxx" identifiers as "_GC_xxx".  The second is the
+inverse transformation.  Note that doing this is guaranteed to break all
+clients written for the other names.
+* descriptor field for kind NORMAL in GC_obj_kinds with ADD_BYTE_AT_END
+defined should be -ALIGNMENT not WORDS_TO_BYTES(-1).  This is
+a serious bug on machines with pointer alignment of less than a word.
+* GC_ignore_self_finalize_mark_proc didn't handle pointers to very near the
+end of the object correctly.  Caused failures of the C++ test on a DEC Alpha
+with g++.
+* gc_inl.h still had problems.  Partially fixed.  Added warnings at the
+beginning to hopefully specify the remaining dangers.
+* Added DATAEND definition to config.h.
+* Fixed some of the .h file organization.  Fixed "make floppy".
+
+
+[4.5]
+=====
+
+* Fixed many minor and one major README bugs.
+* Fixed ALPHA/OSF/1 dynamic library support.
+* Added incremental GC support (MPROTECT_VDB) for Linux (with some
+help from Bruno Haible).
+* Altered SPARC recognition tests in gc.h and config.h.
+* Added basic incremental GC support for win32, as implemented by
+Windows NT and Windows 95.  GC_enable_incremental is a no-op
+under win32s, which doesn't implement enough of the VM interface.
+* Added -DLARGE_CONFIG.
+* Fixed GC_..._ignore_off_page to also function without
+-DALL_INTERIOR_POINTERS.
+* (Hopefully) fixed RS/6000 port.  (Only the test was broken.)
+* Fixed a performance bug in the non-incremental collector running
+on machines supporting incremental collection with MPROTECT_VDB
+(e.g. SunOS 4, DEC AXP).  This turned into a correctness bug under
+win32s with win32 incremental collection.  (Not all memory protection
+was disabled.)
+* Fixed some ppcr related bit rot.
+* Caused dynamic libraries to be unregistered before re-registering.
+The old way turned out to be a performance bug on some machines.
+* GC_root_size was not properly maintained under MSWIN32.
+* Added -DNO_DEBUGGING and GC_dump.
+* Fixed a couple of bugs arising with SOLARIS_THREADS +
+REDIRECT_MALLOC.
+* Added NetBSD/M68K port.
+* Fixed a serious realloc bug.  For certain object sizes, the collector
+wouldn't scan the expanded part of the object.
+
+
+[4.4]
+=====
+
+* ASM_CLEAR_CODE was erroneously defined for HP
+PA machines, resulting in a compile error.
+* Fixed OS/2 Makefile to create a library.
+* Gc_cleanup objects didn't work if they were created on
+the stack.  Fixed.
+* One copy of Gc_cpp.h in the distribution was out of
+synch, and failed to document some known compiler
+problems with explicit destructor invocation.  Partially
+fixed.  There are probably other compilers on which
+gc_cleanup is miscompiled.
+* Fixed Makefile to pass C compiler flags to C++ compiler.
+* Added Mac fixes.
+* Fixed os_dep.c to work around what appears to be
+a new and different VirtualQuery bug under newer
+versions of win32S.
+* GC_non_gc_bytes was not correctly maintained by
+GC_free.  Fixed.
+* Added GC_set_max_heap_size.
+* Changed allocation code to ignore blacklisting if it is preventing
+use of a very large block of memory.  This has the advantage
+that naive code allocating very large objects is much more
+likely to work.  The downside is you might no
+longer find out that such code should really use
+GC_malloc_ignore_off_page.
+* Changed GC_printf under win32 to close and reopen the file
+between calls.  FAT file systems otherwise make the log file
+useless for debugging.
+* Added GC_try_to_collect and GC_get_bytes_since_gc.  These
+allow starting an abortable collection during idle times.
+This facility does not require special OS support.
+* Added some support for the Borland development environment.
+* Removed a misfeature from checksums.c that caused unexpected
+heap growth.
+* Changed finalize.c to call WARN if it encounters a finalization cycle.
+WARN is defined in gc_priv.h to write a message, usually to stdout.
+In many environments, this may be inappropriate.
+* Renamed NO_PARAMS in gc.h to GC_NO_PARAMS, thus adhering to my own
+naming convention.
+* Added GC_set_warn_proc to intercept warnings.
+* Fixed Amiga port.
+* Fixed a bug in mark.c that could result in an access to unmapped
+memory from GC_mark_from_mark_stack on machines with unaligned
+pointers.
+* Fixed a win32 specific performance bug that could result in scanning of
+objects allocated with the system malloc.
+* Added REDIRECT_MALLOC.
+
+
+[4.3]
+=====
+
+* Fixed SPARC alignment problem with GC_DEBUG.
+* Fixed Solaris threads /proc workaround.  The real
+problem was an interaction with mprotect.
+* Incorporated fix from Patrick Beard for gc_c++.h (now gc_cpp.h).
+* Slightly improved allocator space utilization by
+fixing the GC_size_map mechanism.
+* Integrated some Sony News and MIPS RISCos 4.51
+patches.
+* Fixed HP_PA alignment problem.
+* Added GC_same_obj and friends.  Changed GC_base
+to return 0 for pointers past the end of large objects.
+Improved GC_base performance with ALL_INTERIOR_POINTERS
+on machines with a slow integer mod operation.
+Added GC_PTR_ADD, GC_PTR_STORE, etc. to prepare
+for preprocessor.
+* changed the default on most UNIX machines to be that
+signals are not disabled during critical GC operations.
+This is still ANSI-conforming, though somewhat dangerous
+in the presence of signal handlers. But the performance
+cost of the alternative is sometimes problematic.
+Can be changed back with a minor Makefile edit.
+* renamed IS_STRING in gc.h, to CORD_IS_STRING, thus
+following my own naming convention.  Added the function
+CORD_to_const_char_star.
+* Fixed a gross bug in GC_finalize.  Symptom: occasional
+address faults in that function.
+* Added port to ICL DRS6000 running DRS/NX.  Restructured
+things a bit to factor out common code, and remove obsolete
+code.  Collector should now run under SUNOS5 with either
+mprotect or /proc dirty bits.
+* More bug fixes and workarounds for Solaris 2.X.  (These were
+mostly related to putting the collector in a dynamic library,
+which didn't really work before.  Also SOLARIS_THREADS
+didn't interact well with dl_open.)
+* Fixed a serious performance bug on the DEC Alpha.  The text
+segment was getting registered as part of the root set.
+(Amazingly, the result was still fast enough that the bug
+was not conspicuous.) The fix works on OSF/1, version 1.3.
+Hopefully it also works on other versions of OSF/1 ...
+* Fixed a bug in GC_clear_roots.
+* Fixed a bug in GC_generic_malloc_words_small that broke
+gc_inl.h.
+* Fixed some problems with cord/de under Linux.
+* Fixed some cord problems, notably with CORD_riter4.
+* Added DG/UX port.
+* Added finalization registration routines with weaker ordering
+constraints.  (This is necessary for C++ finalization with
+multiple inheritance, since the compiler often adds self-cycles.)
+* Filled the holes in the SCO port.
+* John Ellis' additions to the C++ support:  From John:
+* I completely rewrote the documentation in the interface gc_c++.h
+(later renamed gc_cpp.h).  I've tried to make it both clearer and more
+precise.
+* The definition of accessibility now ignores pointers from an
+finalizable object (an object with a clean-up function) to itself.
+This allows objects with virtual base classes to be finalizable by the
+collector.  Compilers typically implement virtual base classes using
+pointers from an object to itself, which under the old definition of
+accessibility prevented objects with virtual base classes from ever
+being collected or finalized.
+* gc_cleanup now includes gc as a virtual base.  This was enabled by
+the change in the definition of accessibility.
+* I added support for operator new[].  Since most compilers
+don't yet support operator new[], it is conditionalized on
+-DOPERATOR_NEW_ARRAY.  The code is untested, but its trivial and looks
+correct.
+* The test program test_gc_c++ (later renamed test_cpp.cc)
+tries to test for the C++-specific functionality not tested by the
+other programs.
+* Added unistd.h include to misc.c.  (Needed for ppcr.)
+* Added PowerMac port.
+* Fixed "srcdir"-related Makefile problems.  Changed things so
+that all externally visible include files always appear in the
+include subdirectory of the source.  Made gc.h directly
+includable from C++ code.
+* Changed Intel code to also mark from ebp
+* Renamed C++ related files so they could live in a FAT
+file system.
+* Changed Windows NT Makefile to include C++ support in
+gc.lib.  Added C++ test as Makefile target.
+
+
+[4.2]
+=====
+
+* Multiple bug fixes/workarounds in the Solaris threads version.
+(It occasionally failed to locate some register contents for
+marking.  It also turns out that thr_suspend and friends are
+unreliable in Solaris 2.3.  Dirty bit reads appear
+to be unreliable under some weird
+circumstances.  My stack marking code
+contained a serious performance bug.  The new code is
+extremely defensive, and has not failed in several CPU
+hours of testing.  But no guarantees ...)
+* Added MacOS support.
+* Fixed several syntactic bugs in gc_c++.h and friends.  (These
+didn't bother g++, but did bother most other compilers.)
+Fixed gc_c++.h finalization interface.
+* 64 bit alignment for allocated objects was not guaranteed in a
+few cases in which it should have been.
+* Added GC_malloc_atomic_ignore_off_page.
+* Added GC_collect_a_little.
+* Added some prototypes to gc.h.
+* Some other minor bug fixes (notably in Makefile).
+* Fixed OS/2 / EMX port.
+* Fixed AmigaDOS port.
+* Fixed the DATASTART definition under Solaris.  There
+was a 1 in 16K chance of the collector missing the first
+64K of static data (and thus crashing).
+* Fixed some blatant anachronisms in the README file.
+* Fixed PCR-Makefile for upcoming PPCR release.
+
+
+[4.1]
+=====
+
+* Changed finalization implementation to guarantee that
+finalization procedures are called outside of the allocation
+lock, making direct use of the interface a little less dangerous.
+MAY BREAK EXISTING CLIENTS that assume finalizers
+are protected by a lock.  Since there seem to be few multi-threaded
+clients that use finalization, this is hopefully not much of
+a problem.
+* Fixed a gross bug in CORD_prev.
+* Fixed a bug in blacklst.c that could result in unbounded
+heap growth during startup on machines that do not clear
+memory obtained from the OS (e.g. win32S).
+* Ported de editor to win32/win32S.  (This is now the only
+version with a mouse-sensitive UI.)
+* Added GC_malloc_ignore_off_page to allocate large arrays
+in the presence of ALL_INTERIOR_POINTERS.
+* Changed GC_call_with_alloc_lock to not disable signals in
+the single-threaded case.
+* Reduced retry count in GC_collect_or_expand for garbage
+collecting when out of memory.
+* Made uncollectable allocations bypass black-listing, as they
+should.
+* Fixed a bug in typed_test in test.c that could cause (legitimate)
+GC crashes.
+* Fixed some potential synchronization problems in finalize.c
+* Fixed a real locking problem in typd_mlc.c.
+* Worked around an AIX 3.2 compiler feature that results in
+out of bounds memory references.
+* Partially worked around an IRIX5.2 beta problem (which may
+or may not persist to the final release).
+* Fixed a bug in the heap integrity checking code that could
+result in explicitly deallocated objects being identified as
+smashed.  Fixed a bug in the dbg_mlc stack saving code
+that caused old argument pointers to be considered live.
+* Fixed a bug in CORD_ncmp (and hence CORD_str).
+* Repaired the OS2 port, which had suffered from bit rot
+in 4.0.  Worked around what appears to be CSet/2 V1.0
+optimizer bug.
+* Fixed a Makefile bug for target "c++".
+
+
+[4.0]
+=====
+
+* Added support for Solaris threads (which was possible
+only by reimplementing some fraction of Solaris threads,
+since Sun doesn't currently make the thread debugging
+interface available).
+* Added non-threads win32 and win32S support.
+* (Grudgingly, with suitable muttering of obscenities) renamed
+files so that the collector distribution could live on a FAT
+file system.  Files that are guaranteed to be useless on
+a PC still have long names.  Gc_inline.h and gc_private.h
+still exist, but now just include  gc_inl.h and gc_priv.h.
+* Fixed a really obscure bug in finalization that could cause
+undetected mark stack overflows.  (I would be surprised if
+any real code ever tickled this one.)
+* Changed finalization code to dynamically resize the hash
+tables it maintains.  (This probably does not matter for well-
+-written code.  It no doubt does for C++ code that overuses
+destructors.)
+* Added typed allocation primitives.  Rewrote the marker to
+accommodate them with more reasonable efficiency.  This
+change should also speed up marking for GC_malloc allocated
+objects a little.  See gc_typed.h for new primitives.
+* Improved debugging facilities slightly.  Allocation time
+stack traces are now kept by default on SPARC/SUNOS4.
+* Added better support for small heap applications.
+* Significantly extended cord package.  Fixed a bug in the
+implementation of lazily read files.  Printf and friends now
+have cord variants.  Cord traversals are a bit faster.
+* Made ALL_INTERIOR_POINTERS recognition the default.
+* Fixed de so that it can run in constant space, independent
+of file size.  Added simple string searching to cords and de.
+* Added the Hull-Ellis C++ interface.
+* Added dynamic library support for OSF/1.
+* Changed argument to GC_expand_hp to be expressed
+in units of bytes instead of heap blocks.  (Necessary
+since the heap block size now varies depending on
+configuration.  The old version was never very clean.)
+* Added GC_get_heap_size().  The previous "equivalent"
+was broken.
+* Restructured the Makefile a bit.
+
+
+[3.7]
+=====
+
+* Added a workaround for an HP/UX compiler bug.
+* Fixed another stack clearing performance bug.  Reworked
+that code once more.
+
+
+[3.6]
+=====
+
+* fixed a bug in the mark stack growth code that was introduced
+in 3.4.
+* fixed Makefile to work around DEC AXP compiler tail recursion
+bug.
+
+
+[3.5]
+=====
+
+* Minor collections now mark from roots only once, if that
+doesn't cause an excessive pause.
+* The stack clearing heuristic was refined to prevent anomalies
+with very heavily recursive programs and sparse stacks.
+* Fixed a bug that prevented mark stack growth in some cases.
+GC_objects_are_marked should be set to TRUE after a call
+to GC_push_roots and as part of GC_push_marked, since
+both can now set mark bits.  I think this is only a performance
+bug, but I wouldn't bet on it.  It's certainly very hard to argue
+that the old version was correct.
+* Fixed an incremental collection bug that prevented it from
+working at all when HBLKSIZE != getpagesize()
+* Changed dynamic_loading.c to include gc_priv.h before testing
+DYNAMIC_LOADING.  SunOS dynamic library scanning
+must have been broken in 3.4.
+* Object size rounding now adapts to program behavior.
+* Added a workaround (provided by Manuel Serrano and
+colleagues) to a long-standing SunOS 4.X (and 3.X) ld bug
+that I had incorrectly assumed to have been squished.
+The collector was broken if the text segment size was within
+32 bytes of a multiple of 8K bytes, and if the beginning of
+the data segment contained interesting roots.  The workaround
+assumes a demand-loadable executable.  The original may have
+have "worked" in some other cases.
+* Added dynamic library support under IRIX5.
+* Added support for EMX under OS/2.
+
+
+[3.4]
+=====
+
+* Fixed a performance bug in GC_realloc.
+* Updated the amiga port.
+* Added NetBSD and 386BSD ports.
+* Added cord library.
+* Added trivial performance enhancement for
+ALL_INTERIOR_POINTERS.  (Don't scan last word.)
+
+
+[3.3]
+=====
+
+* PCR-specific bugs.
+* Missing locking in GC_free, redundant FASTUNLOCK
+in GC_malloc_stubborn, and 2 bugs in
+GC_unregister_disappearing_link.
+* Common symbols allocated by the SunOS4.X dynamic loader
+were not included in the root set.
+* Bug in GC_finalize
+* Merged Amiga port from Jesper Peterson (untested)
+* Merged NeXT port from Thomas Funke (significantly
+modified and untested)
+
+
+[3.2]
+=====
+
+Fixed a serious and not entirely repeatable bug in
+the incremental collector.  It appeared only when dirty bit info
+on the roots was available, which is normally only under Solaris.
+It also added GC_general_register_disappearing_link, and some
+testing code.  Interface.c disappeared.
+
+
+[3.1]
+=====
+
+* A workaround for a SunOS 4.X SPARC C compiler
+misfeature that caused problems when the collector was turned into
+a dynamic library.
+* A fix for a bug in GC_base that could result in a memory fault.
+* A fix for a performance bug (and several other misfeatures) pointed
+out by Dave Detlefs and Al Dosser.
+* Use of dirty bit information for static data under Solaris 2.X.
+* DEC Alpha/OSF1 support.
+* Incremental collection on more platforms.
+* A more refined heap expansion policy.  Less space usage by default.
+* Various minor enhancements to reduce space usage, and to reduce
+the amount of memory scanned by the collector.
+* Uncollectable allocation without per object overhead.
+* More conscientious handling of out-of-memory conditions.
+* Fixed a bug in debugging stubborn allocation.
+* Fixed a bug that resulted in occasional erroneous reporting of smashed
+objects with debugging allocation.
+* Fixed bogus leak reports of size 4096 blocks with FIND_LEAK.
+
+
+[3.0]
+=====
+
+Added generational/incremental collection and stubborn objects.
+
+
+[2.5]
+=====
+
+* Removed an explicit call to exit(1)
+* Fixed calls to GC_printf and GC_err_printf, so the correct number of
+arguments are always supplied.  The OS/2 C compiler gets confused if
+the number of actuals and the number of formals differ.  (ANSI C
+doesn't require this to work.  The ANSI sanctioned way of doing things
+causes too many compatibility problems.)
+
+
+[2.4]
+=====
+
+Added GC_free_space_divisor as a tuning knob, added
+support for OS/2 and linux, and fixed the following bugs:
+* On machines with unaligned pointers (e.g. Sun 3), every 128th word could
+fail to be considered for marking.
+* Dynamic_load.c erroneously added 4 bytes to the length of the data and
+bss sections of the dynamic library.  This could result in a bad memory
+reference if the actual length was a multiple of a page.  (Observed on
+Sun 3.  Can probably also happen on a Sun 4.)
+(Dynamic library handling is still broken on Sun 3s
+under 4.1.1U1, but apparently not 4.1.1.  If you have such a machine,
+use -Bstatic.)
+
+
+[2.3]
+=====
+
+* Added ALL_INTERIOR_POINTERS.
+* Missing declaration of etext in the A/UX version.
+* Some PCR root-finding problems.
+* Blacklisting was not 100% effective, because the plausible future
+heap bounds were being miscalculated.
+* GC_realloc didn't handle out-of-memory correctly.
+* GC_base could return a nonzero value for addresses inside free blocks.
+* test.c wasn't really thread safe, and could erroneously report failure
+in a multi-threaded environment.  (The locking primitives need to be
+replaced for other threads packages.)
+* GC_CONS was thoroughly broken.
+* On a SPARC with dynamic linking, signals stayed disabled while the
+client code was running.
+
+
+[2.2]
+=====
+
+* GC_realloc could fail to extend the size of the object for certain large
+object sizes.
+* A blatant subscript range error in GC_printf, which unfortunately
+wasn't exercised on machines with sufficient stack alignment constraints.
+* GC_register_displacement did the wrong thing if it was called after
+any allocation had taken place.
+* The leak finding code would eventually break after 2048 byte
+byte objects leaked.
+* interface.c didn't compile.
+* The heap size remained much too small for large stacks.
+* The stack clearing code behaved badly for large stacks, and perhaps
+on HP/PA machines.
+
+
+[2.1]
+=====
+
+* The first stable version since 1.9.
+* Added support for PPCR.
+
+
+[2.0]
+=====
+
+* Introduced a consistent naming convention for collector
+routines and added support for registering dynamic library data segments
+in the standard mark_roots.c.  Most of the data structures were revamped.
+The treatment of interior pointers was completely changed.  Finalization
+was added.  Support for locking was added.  Object kinds were added.
+We added a black listing facility to avoid allocating at addresses known
+to occur as integers somewhere in the address space.  Much of this
+was accomplished by adapting ideas and code from the PCR collector.
+The test program was changed and expanded.
 
-       * thread_local_alloc.c, include/private/thread_local_alloc.h:
-       Spell __declspec correctly.
-       * NT_STATIC_THREADS_MAKEFILE: Enable thread-local allocation.
 
-2007-05-07  Hans Boehm <Hans.Boehm@hp.com>
-
-       * doc/README.win32: Adjust GC_win32_dll_threads rules again.
-
-2007-05-07  Hans Boehm <Hans.Boehm@hp.com>
-
-       * mark.c (GC_mark_some wrapper): Restructure for readability, handle
-       GC_started_thread_while_stopped.
-       * misc.c (Win32 GC_write): Lock GC_write_cs only if needed.
-       * win32_threads.c: (client_has_run): remove,
-       GC_started_thread_while_stopped, GC_attached_thread: add.
-       (GC_push_all_stacks): Add verbose output.
-       (DllMain): Avoid initializing collector or the like.
-       Never update both thread tables.
-       * doc/README.win32: Adjust GC_win32_dll_threads rules.
+[1.9]
+=====
 
-2007-05-07  Hans Boehm <Hans.Boehm@hp.com>
+* fixed a major bug in gc_realloc.
 
-       * pthread_stop_world.c (GC_push_all_stacks): Print thread count with
-       GC_PRINT_VERBOSE_STATS.
 
-2007-05-01  Hans Boehm <Hans.Boehm@hp.com>
-               (and Manuel Serrano, Craig McDaniel)
+[1.8]
+=====
 
-       * configure.ac: Comment out redundant
-         AC_DEFINE(NO_EXECUTE_PERMISSION).
-       * configure: Regenerate.
-       * sparc_mach_dep.S: Remove single quote in comment.
-       * include/private/gcconfig.h: Fix DATAEND for NONSTOP.
-       * win32_threads.c: Include stdint.h for Mingw.  Add GC_API for DllMain.
-       (GC_use_DllMain): Fix assertion.
+* added ULTRIX support in gc_private.h.
 
-2007-02-14  Andreas Tobler <a.tobler@schweiz.org>
 
-       * configure.ac: Introduce extra_ldflags_libgc. Use it for Darwin.
-       * configure: Regenerate.
-       * Makefile.am (libgc_la_LDFLAGS): Use extra_ldflags_libgc.
-       * Makefile.in: Regenerate.
-       * include/private/gcconfig.h: Enable MPROTECT_VDB for all Darwin
-       targets. Remove comments.
-       Prepare ppc64 support for Darwin.
-
-2007-01-29  Andreas Tobler <a.tobler@schweiz.org>
-
-       * darwin_stop_world.c: Clean up and reformat code.
-
-2007-01-28  Andreas Tobler <a.tobler@schweiz.org>
-
-       * darwin_stop_world.c (GC_push_all_stacks): Fix compiler warnings.
-       Make i unsigned.
-       (GC_stop_world): Likewise. Remove unused GC_thread p.
-       (GC_start_world): Likewise.
-
-       * os_dep.c: Define GC_darwin_register_mach_handler_thread extern.
-       Remove double SIG_HNDLR_PTR definition.
-       (GC_forward_exception): Fix compiler warnings, make i unsigned.
-       Initialize thread_state to NULL.
-       (catch_exception_raise): Fix compiler warnings, make i unsigned.
+[1.5]
+=====
 
-2007-01-25  Petr Salinger and Hans Boehm <Hans.Boehm@hp.com>
-
-       * include/private/gc_priv.h (NEED_FIND_LIMIT, FREEBSD variant):
-       also define for X86_64.
-       * configure.ac: Move generic gnu (Hurd) case to below kfreebsd case.
-       * configure: Regenerate.
-       * README.changes: Point to ChangeLog.
-
-2007-01-25  Andreas Tobler <a.tobler@schweiz.org>
-
-       * darwin_stop_world.c: Move THREAD_FLD defines to ...
-       * include/private/gc_priv.h: ... here.
-       Fix THREAD_STATE definitions for ppc64.
-       * os_dep.c (catch_exception_raise): Use THREAD_FLD for exc_state member
-       access.
-
-2007-01-18  Andreas Tobler <a.tobler@schweiz.org>
-
-       * os_dep.c (if defined(MPROTECT_VDB) && defined(DARWIN)): Clean up and
-       reformat code.
-       Correct email reference.
-
-2007-01-11  Andreas Tobler <a.tobler@schweiz.org>
+* ensure 8 byte alignment for objects allocated on a sparc based machine.
 
-       * configure.ac (i?86*-*-darwin*): Replaced HAS_I386_THREAD_STATE_* with
-       HAS_X86_THREAD_STATE32_*.
-       (x86_64-*-darwin*): Extended the above check for x86_64-*-darwin* with
-       HAS_X86_THREAD_STATE64_*.
-       Added value 1 in the above AC_DEFINE's. Important for the upcoming
-       Leopard.
-       * configure: Regenerated.
-       * include/private/gcconfig.h: Modified X86_64 define for Darwin.
-       Removed __x86_64__ check in POWERPC section. Added base definitions
-       for the X86_64 Darwin port.
-       * include/private/gc_priv.h: Added GC_MACH_HEADER and GC_MACH_SECTION
-       to distinguish between 32 and 64-bit applications. Added definitions
-       for X86_64 Darwin.
-       * darwin_stop_world.c: Added HAS_X86_THREAD_STATE64___RAX. And
-       replaced HAS_I386_THREAD_STATE___EAX with HAS_X86_THREAD_STATE32___EAX.
-       (GC_push_all_stacks): Added code for X86_64 Darwin. Even for the
-       !DARWIN_DONT_PARSE_STACK. Maybe obsolete.
-       * dyn_load.c (GC_dyld_name_for_hdr): Use GC_MACH_HEADER.
-       (GC_dyld_image_add): Use GC_MACH_HEADER and GC_MACH_SECTION.
-       Distinguish between getsectbynamefromheader_64 and
-       getsectbynamefromheader.
-       * os_dep.c (catch_exception_raise): Introduce exception definition for
-       X86_64 Darwin. Replaced old i386_EXCEPTION_STATE_* definition with
-       x86_EXCEPTION_STATE32_*. Add X86_64 for exc_state.faultvaddr.
-
-2007-01-09  Andreas Tobler <a.tobler@schweiz.org>
-
-       * libtool.m4: Update to version from libtool-1.5.22.
-       * ltmain.sh: Likewise.
-       * ChangeLog: Created.
-
--------------------------
 
-Contents of README.changes for earlier changes:
-This is a rough history of garbage collector bugs and versions.
-
-This has been maintained with varying diligence over the years.
-
-I made an attempt to include recent contributors here.  I apologize for any
-omissions.
-
-RECENT UPDATES ARE RECORDED above INSTEAD TO CONFORM TO
-MORE COMMON CONVENTIONS.
-
-
-  Version 1.3 and immediately preceding versions contained spurious
-assembly language assignments to TMP_SP.  Only the assignment in the PC/RT
-code is necessary.  On other machines, with certain compiler options,
-the assignments can lead to an unsaved register being overwritten.
-Known to cause problems under SunOS 3.5 WITHOUT the -O option.  (With
--O the compiler recognizes it as dead code.  It probably shouldn't,
-but that's another story.)
+[1.4]
+=====
 
-  Version 1.4 and earlier versions used compile time determined values
+* Does not use compile time determined values
 for the stack base.  This no longer works on Sun 3s, since Sun 3/80s use
 a different stack base.  We now use a straightforward heuristic on all
 machines on which it is known to work (incl. Sun 3s) and compile-time
 determined values for the rest.  There should really be library calls
 to determine such values.
 
-  Version 1.5 and earlier did not ensure 8 byte alignment for objects
-allocated on a sparc based machine.
-
-  Version 1.8 added ULTRIX support in gc_private.h.
-
-  Version 1.9 fixed a major bug in gc_realloc.
-
-  Version 2.0 introduced a consistent naming convention for collector
-routines and added support for registering dynamic library data segments
-in the standard mark_roots.c.  Most of the data structures were revamped.
-The treatment of interior pointers was completely changed.  Finalization
-was added.  Support for locking was added.  Object kinds were added.
-We added a black listing facility to avoid allocating at addresses known
-to occur as integers somewhere in the address space.  Much of this
-was accomplished by adapting ideas and code from the PCR collector.
-The test program was changed and expanded.
-
-  Version 2.1 was the first stable version since 1.9, and added support
-for PPCR.
-
-  Version 2.2 added debugging allocation, and fixed various bugs.  Among them:
-- GC_realloc could fail to extend the size of the object for certain large object sizes.
-- A blatant subscript range error in GC_printf, which unfortunately
-  wasn't exercised on machines with sufficient stack alignment constraints.
-- GC_register_displacement did the wrong thing if it was called after
-  any allocation had taken place.
-- The leak finding code would eventually break after 2048 byte
-  byte objects leaked.
-- interface.c didn't compile.
-- The heap size remained much too small for large stacks.
-- The stack clearing code behaved badly for large stacks, and perhaps
-  on HP/PA machines.
-
-  Version 2.3 added ALL_INTERIOR_POINTERS and fixed the following bugs:
-- Missing declaration of etext in the A/UX version.
-- Some PCR root-finding problems.
-- Blacklisting was not 100% effective, because the plausible future
-  heap bounds were being miscalculated.
-- GC_realloc didn't handle out-of-memory correctly.
-- GC_base could return a nonzero value for addresses inside free blocks.
-- test.c wasn't really thread safe, and could erroneously report failure
-  in a multithreaded environment.  (The locking primitives need to be
-  replaced for other threads packages.)
-- GC_CONS was thoroughly broken.
-- On a SPARC with dynamic linking, signals stayed diabled while the
-  client code was running.
-  (Thanks to Manuel Serrano at INRIA for reporting the last two.)
-
-  Version 2.4 added GC_free_space_divisor as a tuning knob, added
-  support for OS/2 and linux, and fixed the following bugs:
-- On machines with unaligned pointers (e.g. Sun 3), every 128th word could
-  fail to be considered for marking.
-- Dynamic_load.c erroneously added 4 bytes to the length of the data and
-  bss sections of the dynamic library.  This could result in a bad memory
-  reference if the actual length was a multiple of a page.  (Observed on
-  Sun 3.  Can probably also happen on a Sun 4.)
-  (Thanks to Robert Brazile for pointing out that the Sun 3 version
-  was broken.  Dynamic library handling is still broken on Sun 3s
-  under 4.1.1U1, but apparently not 4.1.1.  If you have such a machine,
-  use -Bstatic.)
-
-  Version 2.5 fixed the following bugs:
-- Removed an explicit call to exit(1)
-- Fixed calls to GC_printf and GC_err_printf, so the correct number of
-  arguments are always supplied.  The OS/2 C compiler gets confused if
-  the number of actuals and the number of formals differ.  (ANSI C
-  doesn't require this to work.  The ANSI sanctioned way of doing things
-  causes too many compatibility problems.)
-
-  Version 3.0  added generational/incremental collection and stubborn
-  objects.
-
-  Version 3.1 added the following features:
-- A workaround for a SunOS 4.X SPARC C compiler
-  misfeature that caused problems when the collector was turned into
-  a dynamic library.
-- A fix for a bug in GC_base that could result in a memory fault.
-- A fix for a performance bug (and several other misfeatures) pointed
-  out by Dave Detlefs and Al Dosser.
-- Use of dirty bit information for static data under Solaris 2.X.
-- DEC Alpha/OSF1 support (thanks to Al Dosser).
-- Incremental collection on more platforms.
-- A more refined heap expansion policy.  Less space usage by default.
-- Various minor enhancements to reduce space usage, and to reduce
-  the amount of memory scanned by the collector.
-- Uncollectable allocation without per object overhead.
-- More conscientious handling of out-of-memory conditions.
-- Fixed a bug in debugging stubborn allocation.
-- Fixed a bug that resulted in occasional erroneous reporting of smashed
-  objects with debugging allocation.
-- Fixed bogus leak reports of size 4096 blocks with FIND_LEAK.
-
-  Version 3.2 fixed a serious and not entirely repeatable bug in
-  the incremental collector.  It appeared only when dirty bit info
-  on the roots was available, which is normally only under Solaris.
-  It also added GC_general_register_disappearing_link, and some
-  testing code.  Interface.c disappeared.
-
-  Version 3.3 fixes several bugs and adds new ports:
-- PCR-specific bugs.
-- Missing locking in GC_free, redundant FASTUNLOCK
-  in GC_malloc_stubborn, and 2 bugs in
-  GC_unregister_disappearing_link.
-  All of the above were pointed out by Neil Sharman
-  (neil@cs.mu.oz.au).
-- Common symbols allocated by the SunOS4.X dynamic loader
-  were not included in the root set.
-- Bug in GC_finalize (reported by Brian Beuning and Al Dosser)
-- Merged Amiga port from Jesper Peterson (untested)
-- Merged NeXT port from Thomas Funke (significantly
-  modified and untested)
-
-  Version 3.4:
-- Fixed a performance bug in GC_realloc.
-- Updated the amiga port.
-- Added NetBSD and 386BSD ports.
-- Added cord library.
-- Added trivial performance enhancement for
-  ALL_INTERIOR_POINTERS.  (Don't scan last word.)
-
-  Version 3.5
-- Minor collections now mark from roots only once, if that
-  doesn't cause an excessive pause.
-- The stack clearing heuristic was refined to prevent anomalies
-  with very heavily recursive programs and sparse stacks.
-- Fixed a bug that prevented mark stack growth in some cases.
-  GC_objects_are_marked should be set to TRUE after a call
-  to GC_push_roots and as part of GC_push_marked, since
-  both can now set mark bits.  I think this is only a performance
-  bug, but I wouldn't bet on it.  It's certainly very hard to argue
-  that the old version was correct.
-- Fixed an incremental collection bug that prevented it from
-  working at all when HBLKSIZE != getpagesize()
-- Changed dynamic_loading.c to include gc_priv.h before testing
-  DYNAMIC_LOADING.  SunOS dynamic library scanning
-  must have been broken in 3.4.
-- Object size rounding now adapts to program behavior.
-- Added a workaround (provided by Manuel Serrano and
-  colleagues) to a long-standing SunOS 4.X (and 3.X?) ld bug
-  that I had incorrectly assumed to have been squished.
-  The collector was broken if the text segment size was within
-  32 bytes of a multiple of 8K bytes, and if the beginning of
-  the data segment contained interesting roots.  The workaround
-  assumes a demand-loadable executable.  The original may have
-  have "worked" in some other cases.
-- Added dynamic library support under IRIX5.
-- Added support for EMX under OS/2 (thanks to Ari Huttunen).
-
-Version 3.6:
-- fixed a bug in the mark stack growth code that was introduced
-  in 3.4.
-- fixed Makefile to work around DEC AXP compiler tail recursion
-  bug.
-
-Version 3.7:
-- Added a workaround for an HP/UX compiler bug.
-- Fixed another stack clearing performance bug.  Reworked
-  that code once more.
-
-Version 4.0:
-- Added support for Solaris threads (which was possible
-  only by reimplementing some fraction of Solaris threads,
-  since Sun doesn't currently make the thread debugging
-  interface available).
-- Added non-threads win32 and win32S support.
-- (Grudgingly, with suitable muttering of obscenities) renamed
-  files so that the collector distribution could live on a FAT
-  file system.  Files that are guaranteed to be useless on
-  a PC still have long names.  Gc_inline.h and gc_private.h
-  still exist, but now just include  gc_inl.h and gc_priv.h.
-- Fixed a really obscure bug in finalization that could cause
-  undetected mark stack overflows.  (I would be surprised if
-  any real code ever tickled this one.)
-- Changed finalization code to dynamically resize the hash
-  tables it maintains.  (This probably does not matter for well-
-  -written code.  It no doubt does for C++ code that overuses
-  destructors.)
-- Added typed allocation primitives.  Rewrote the marker to
-  accommodate them with more reasonable efficiency.  This
-  change should also speed up marking for GC_malloc allocated
-  objects a little.  See gc_typed.h for new primitives.
-- Improved debugging facilities slightly.  Allocation time
-  stack traces are now kept by default on SPARC/SUNOS4.
-  (Thanks to Scott Schwartz.)
-- Added better support for small heap applications.
-- Significantly extended cord package.  Fixed a bug in the
-  implementation of lazily read files.  Printf and friends now
-  have cord variants.  Cord traversals are a bit faster.
-- Made ALL_INTERIOR_POINTERS recognition the default.
-- Fixed de so that it can run in constant space, independent
-  of file size.  Added simple string searching to cords and de.
-- Added the Hull-Ellis C++ interface.
-- Added dynamic library support for OSF/1.
-  (Thanks to Al Dosser and Tim Bingham at DEC.)
-- Changed argument to GC_expand_hp to be expressed
-  in units of bytes instead of heap blocks.  (Necessary
-  since the heap block size now varies depending on
-  configuration.  The old version was never very clean.)
-- Added GC_get_heap_size().  The previous "equivalent"
-  was broken.
-- Restructured the Makefile a bit.
-
-Since version 4.0:
-- Changed finalization implementation to guarantee that
-  finalization procedures are called outside of the allocation
-  lock, making direct use of the interface a little less dangerous.
-  MAY BREAK EXISTING CLIENTS that assume finalizers
-  are protected by a lock.  Since there seem to be few multithreaded
-  clients that use finalization, this is hopefully not much of
-  a problem.
-- Fixed a gross bug in CORD_prev.
-- Fixed a bug in blacklst.c that could result in unbounded
-  heap growth during startup on machines that do not clear
-  memory obtained from the OS (e.g. win32S).
-- Ported de editor to win32/win32S.  (This is now the only
-  version with a mouse-sensitive UI.)
-- Added GC_malloc_ignore_off_page to allocate large arrays
-  in the presence of ALL_INTERIOR_POINTERS.
-- Changed GC_call_with_alloc_lock to not disable signals in
-  the single-threaded case.
-- Reduced retry count in GC_collect_or_expand for garbage
-  collecting when out of memory.
-- Made uncollectable allocations bypass black-listing, as they
-  should.
-- Fixed a bug in typed_test in test.c that could cause (legitimate)
-  GC crashes.
-- Fixed some potential synchronization problems in finalize.c
-- Fixed a real locking problem in typd_mlc.c.
-- Worked around an AIX 3.2 compiler feature that results in
-  out of bounds memory references.
-- Partially worked around an IRIX5.2 beta problem (which may
-  or may not persist to the final release).
-- Fixed a bug in the heap integrity checking code that could
-  result in explicitly deallocated objects being identified as
-  smashed.  Fixed a bug in the dbg_mlc stack saving code
-  that caused old argument pointers to be considered live.
-- Fixed a bug in CORD_ncmp (and hence CORD_str).
-- Repaired the OS2 port, which had suffered from bit rot
-  in 4.0.  Worked around what appears to be CSet/2 V1.0
-  optimizer bug.
-- Fixed a Makefile bug for target "c++".
-
-Since version 4.1:
-- Multiple bug fixes/workarounds in the Solaris threads version.
-  (It occasionally failed to locate some register contents for
-  marking.  It also turns out that thr_suspend and friends are
-  unreliable in Solaris 2.3.  Dirty bit reads appear
-  to be unreliable under some weird
-  circumstances.  My stack marking code
-  contained a serious performance bug.  The new code is
-  extremely defensive, and has not failed in several cpu
-  hours of testing.  But  no guarantees ...)
-- Added MacOS support (thanks to Patrick Beard.)
-- Fixed several syntactic bugs in gc_c++.h and friends.  (These
-  didn't bother g++, but did bother most other compilers.)
-  Fixed gc_c++.h finalization interface.  (It didn't.)
-- 64 bit alignment for allocated objects was not guaranteed in a
-  few cases in which it should have been.
-- Added GC_malloc_atomic_ignore_off_page.
-- Added GC_collect_a_little.
-- Added some prototypes to gc.h.
-- Some other minor bug fixes (notably in Makefile).
-- Fixed OS/2 / EMX port (thanks to Ari Huttunen).
-- Fixed AmigaDOS port. (thanks to Michel Schinz).
-- Fixed the DATASTART definition under Solaris.  There
-  was a 1 in 16K chance of the collector missing the first
-  64K of static data (and thus crashing).
-- Fixed some blatant anachronisms in the README file.
-- Fixed PCR-Makefile for upcoming PPCR release.
-
-Since version 4.2:
-- Fixed SPARC alignment problem with GC_DEBUG.
-- Fixed Solaris threads /proc workaround.  The real
-  problem was an interaction with mprotect.
-- Incorporated fix from Patrick Beard for gc_c++.h (now gc_cpp.h).
-- Slightly improved allocator space utilization by
-  fixing the GC_size_map mechanism.
-- Integrated some Sony News and MIPS RISCos 4.51
-  patches.  (Thanks to Nobuyuki Hikichi of
-  Software Research Associates, Inc. Japan)
-- Fixed HP_PA alignment problem.  (Thanks to
-  xjam@cork.cs.berkeley.edu.)
-- Added GC_same_obj and friends.  Changed GC_base
-  to return 0 for pointers past the end of large objects.
-  Improved GC_base performance with ALL_INTERIOR_POINTERS
-  on machines with a slow integer mod operation.
-  Added GC_PTR_ADD, GC_PTR_STORE, etc. to prepare
-  for preprocessor.
-- changed the default on most UNIX machines to be that
-  signals are not disabled during critical GC operations.
-  This is still ANSI-conforming, though somewhat dangerous
-  in the presence of signal handlers. But the performance
-  cost of the alternative is sometimes problematic.
-  Can be changed back with a minor Makefile edit.
-- renamed IS_STRING in gc.h, to CORD_IS_STRING, thus
-  following my own naming convention.  Added the function
-  CORD_to_const_char_star.
-- Fixed a gross bug in GC_finalize.  Symptom: occasional
-  address faults in that function.  (Thanks to Anselm
-  Baird-Smith (Anselm.BairdSmith@inria.fr)
-- Added port to ICL DRS6000 running DRS/NX.  Restructured
-  things a bit to factor out common code, and remove obsolete
-  code.  Collector should now run under SUNOS5 with either
-  mprotect or /proc dirty bits.  (Thanks to Douglas Steel
-  (doug@wg.icl.co.uk)).
-- More bug fixes and workarounds for Solaris 2.X.  (These were
-  mostly related to putting the collector in a dynamic library,
-  which didn't really work before.  Also SOLARIS_THREADS
-  didn't interact well with dl_open.)  Thanks to btlewis@eng.sun.com.
-- Fixed a serious performance bug on the DEC Alpha.  The text
-  segment was getting registered as part of the root set.
-  (Amazingly, the result was still fast enough that the bug
-  was not conspicuous.) The fix works on OSF/1, version 1.3.
-  Hopefully it also works on other versions of OSF/1 ...
-- Fixed a bug in GC_clear_roots.
-- Fixed a bug in GC_generic_malloc_words_small that broke
-  gc_inl.h.  (Reported by Antoine de Maricourt.  I broke it
-  in trying to tweak the Mac port.)
-- Fixed some problems with cord/de under Linux.
-- Fixed some cord problems, notably with CORD_riter4.
-- Added DG/UX port.
-  Thanks to Ben A. Mesander (ben@piglet.cr.usgs.gov)
-- Added finalization registration routines with weaker ordering
-  constraints.  (This is necessary for C++ finalization with
-  multiple inheritance, since the compiler often adds self-cycles.)
-- Filled the holes in the SCO port. (Thanks to Michael Arnoldus
-  <chime@proinf.dk>.)
-- John Ellis' additions to the C++ support:  From John:
-
-* I completely rewrote the documentation in the interface gc_c++.h
-(later renamed gc_cpp.h).  I've tried to make it both clearer and more
-precise.
-
-* The definition of accessibility now ignores pointers from an
-finalizable object (an object with a clean-up function) to itself.
-This allows objects with virtual base classes to be finalizable by the
-collector.  Compilers typically implement virtual base classes using
-pointers from an object to itself, which under the old definition of
-accessibility prevented objects with virtual base classes from ever
-being collected or finalized.
-
-* gc_cleanup now includes gc as a virtual base.  This was enabled by
-the change in the definition of accessibility.
 
-* I added support for operator new[].  Since most (all?) compilers
-don't yet support operator new[], it is conditionalized on
--DOPERATOR_NEW_ARRAY.  The code is untested, but its trivial and looks
-correct.
+[1.3]
+=====
 
-* The test program test_gc_c++ (later renamed test_cpp.cc)
-tries to test for the C++-specific functionality not tested by the
-other programs.
-- Added <unistd.h> include to misc.c.  (Needed for ppcr.)
-- Added PowerMac port. (Thanks to Patrick Beard again.)
-- Fixed "srcdir"-related Makefile problems.  Changed things so
-  that all externally visible include files always appear in the
-  include subdirectory of the source.  Made gc.h directly
-  includable from C++ code.  (These were at Per
-  Bothner's suggestion.)
-- Changed Intel code to also mark from ebp (Kevin Warne's
-  suggestion).
-- Renamed C++ related files so they could live in a FAT
-  file system. (Charles Fiterman's suggestion.)
-- Changed Windows NT Makefile to include C++ support in
-  gc.lib.  Added C++ test as Makefile target.
-
-Since version 4.3:
- - ASM_CLEAR_CODE was erroneously defined for HP
-   PA machines, resulting in a compile error.
- - Fixed OS/2 Makefile to create a library.  (Thanks to
-   Mark Boulter (mboulter@vnet.ibm.com)).
- - Gc_cleanup objects didn't work if they were created on
-   the stack.  Fixed.
- - One copy of Gc_cpp.h in the distribution was out of
-   synch, and failed to document some known compiler
-   problems with explicit destructor invocation.  Partially
-   fixed.  There are probably other compilers on which
-   gc_cleanup is miscompiled.
- - Fixed Makefile to pass C compiler flags to C++ compiler.
- - Added Mac fixes.
- - Fixed os_dep.c to work around what appears to be
-   a new and different VirtualQuery bug under newer
-   versions of win32S.
- - GC_non_gc_bytes was not correctly maintained by
-   GC_free.  Fixed.  Thanks to James Clark (jjc@jclark.com).
- - Added GC_set_max_heap_size.
- - Changed allocation code to ignore blacklisting if it is preventing
-   use of a very large block of memory.  This has the advantage
-   that naive code allocating very large objects is much more
-   likely to work.  The downside is you might no
-   longer find out that such code should really use
-   GC_malloc_ignore_off_page.
- - Changed GC_printf under win32 to close and reopen the file
-   between calls.  FAT file systems otherwise make the log file
-   useless for debugging.
- - Added GC_try_to_collect and GC_get_bytes_since_gc.  These
-   allow starting an abortable collection during idle times.
-   This facility does not require special OS support.  (Thanks to
-   Michael Spertus of Geodesic Systems for suggesting this.  It was
-   actually an easy addition.  Kumar Srikantan previously added a similar
-   facility to a now ancient version of the collector.  At the time
-   this was much harder, and the result was less convincing.)
- - Added some support for the Borland development environment.  (Thanks
-   to John Ellis and Michael Spertus.)
- - Removed a misfeature from checksums.c that caused unexpected
-   heap growth.  (Thanks to Scott Schwartz.)
- - Changed finalize.c to call WARN if it encounters a finalization cycle.
-   WARN is defined in gc_priv.h to write a message, usually to stdout.
-   In many environments, this may be inappropriate.
- - Renamed NO_PARAMS in gc.h to GC_NO_PARAMS, thus adhering to my own
-   naming convention.
- - Added GC_set_warn_proc to intercept warnings.
- - Fixed Amiga port. (Thanks to Michel Schinz (schinz@alphanet.ch).)
- - Fixed a bug in mark.c that could result in an access to unmapped
-   memory from GC_mark_from_mark_stack on machines with unaligned
-   pointers.
- - Fixed a win32 specific performance bug that could result in scanning of
-   objects allocated with the system malloc.
- - Added REDIRECT_MALLOC.
-
-Since version 4.4:
- - Fixed many minor and one major README bugs. (Thanks to Franklin Chen
-   (chen@adi.com) for pointing out many of them.)
- - Fixed ALPHA/OSF/1 dynamic library support. (Thanks to Jonathan Bachrach
-   (jonathan@harlequin.com)).
- - Added incremental GC support (MPROTECT_VDB) for Linux (with some
-   help from Bruno Haible).
- - Altered SPARC recognition tests in gc.h and config.h (mostly as
-   suggested by Fergus Henderson).
- - Added basic incremental GC support for win32, as implemented by
-   Windows NT and Windows 95.  GC_enable_incremental is a noop
-   under win32s, which doesn't implement enough of the VM interface.
- - Added -DLARGE_CONFIG.
- - Fixed GC_..._ignore_off_page to also function without
-   -DALL_INTERIOR_POINTERS.
- - (Hopefully) fixed RS/6000 port.  (Only the test was broken.)
- - Fixed a performance bug in the nonincremental collector running
-   on machines supporting incremental collection with MPROTECT_VDB
-   (e.g. SunOS 4, DEC AXP).  This turned into a correctness bug under
-   win32s with win32 incremental collection.  (Not all memory protection
-   was disabled.)
- - Fixed some ppcr related bit rot.
- - Caused dynamic libraries to be unregistered before reregistering.
-   The old way turned out to be a performance bug on some machines.
- - GC_root_size was not properly maintained under MSWIN32.
- - Added -DNO_DEBUGGING and GC_dump.
- - Fixed a couple of bugs arising with SOLARIS_THREADS +
-   REDIRECT_MALLOC.
- - Added NetBSD/M68K port.  (Thanks to Peter Seebach
-   <seebs@taniemarie.solon.com>.)
- - Fixed a serious realloc bug.  For certain object sizes, the collector
-   wouldn't scan the expanded part of the object.  (Thanks to Clay Spence
-   (cds@peanut.sarnoff.com) for noticing the problem, and helping me to
-   track it down.)
-
-Since version 4.5:
- - Added Linux ELF support.  (Thanks to Arrigo Triulzi <arrigo@ic.ac.uk>.)
- - GC_base crashed if it was called before any other GC_ routines.
-   This could happen if a gc_cleanup object was allocated outside the heap
-   before any heap allocation.
- - The heap expansion heuristic was not stable if all objects had finalization
-   enabled.  Fixed finalize.c to count memory in finalization queue and
-   avoid explicit deallocation.  Changed alloc.c to also consider this count.
-   (This is still not recommended.  It's expensive if nothing else.)  Thanks
-   to John Ellis for pointing this out.
- - GC_malloc_uncollectable(0) was broken.  Thanks to Phong Vo for pointing
-   this out.
- - The collector didn't compile under Linux 1.3.X.  (Thanks to Fred Gilham for
-   pointing this out.)  The current workaround is ugly, but expected to be
-   temporary.
- - Fixed a formatting problem for SPARC stack traces.
- - Fixed some '=='s in os_dep.c that should have been assignments.
-   Fortunately these were in code that should never be executed anyway.
-   (Thanks to Fergus Henderson.)
- - Fixed the heap block allocator to only drop blacklisted blocks in small
-   chunks.  Made BL_LIMIT self adjusting.  (Both of these were in response
-   to heap growth observed by Paul Graham.)
- - Fixed the Metrowerks/68K Mac code to also mark from a6.  (Thanks
-   to Patrick Beard.)
- - Significantly updated README.debugging.
- - Fixed some problems with longjmps out of signal handlers, especially under
-   Solaris.  Added a workaround for the fact that siglongjmp doesn't appear to
-   do the right thing with -lthread under Solaris.
- - Added MSDOS/djgpp port.  (Thanks to Mitch Harris  (maharri@uiuc.edu).)
- - Added "make reserved_namespace" and "make user_namespace".  The
-   first renames ALL "GC_xxx" identifiers as "_GC_xxx".  The second is the
-   inverse transformation.  Note that doing this is guaranteed to break all
-   clients written for the other names.
- - descriptor field for kind NORMAL in GC_obj_kinds with ADD_BYTE_AT_END
-   defined should be -ALIGNMENT not WORDS_TO_BYTES(-1).  This is
-   a serious bug on machines with pointer alignment of less than a word.
- - GC_ignore_self_finalize_mark_proc didn't handle pointers to very near the
-   end of the object correctly.  Caused failures of the C++ test on a DEC Alpha
-   with g++.
- - gc_inl.h still had problems.  Partially fixed.  Added warnings at the
-   beginning to hopefully specify the remaining dangers.
- - Added DATAEND definition to config.h.
- - Fixed some of the .h file organization.  Fixed "make floppy".
-
-Since version 4.6:
- - Fixed some compilation problems with -DCHECKSUMS (thanks to Ian Searle)
- - Updated some Mac specific files to synchronize with Patrick Beard.
- - Fixed a serious bug for machines with non-word-aligned pointers.
-   (Thanks to Patrick Beard for pointing out the problem.  The collector
-   should fail almost any conceivable test immediately on such machines.)
-
-Since version 4.7:
- - Changed a "comment" in a MacOS specific part of mach-dep.c that caused
-   gcc to fail on other platforms.
-
-Since version 4.8
- - More README.debugging fixes.
- - Objects ready for finalization, but not finalized in the same GC
-   cycle, could be prematurely collected.  This occasionally happened
-   in test_cpp.
- - Too little memory was obtained from the system for very large
-   objects.  That could cause a heap explosion if these objects were
-   not contiguous (e.g. under PCR), and too much of them was blacklisted.
- - Due to an improper initialization, the collector was too hesitant to
-   allocate blacklisted objects immediately after system startup.
- - Moved GC_arrays from the data into the bss segment by not explicitly
-   initializing it to zero.  This significantly
-   reduces the size of executables, and probably avoids some disk accesses
-   on program startup.  It's conceivable that it might break a port that I
-   didn't test.
- - Fixed EMX_MAKEFILE to reflect the gc_c++.h to gc_cpp.h renaming which
-   occurred a while ago.
-
-Since 4.9:
- - Fixed a typo around a call to GC_collect_or_expand in alloc.c.  It broke
-   handling of out of memory.  (Thanks to Patrick Beard for noticing.)
-
-Since 4.10:
- - Rationalized (hopefully) GC_try_to_collect in an incremental collection
-   environment.  It appeared to not handle a call while a collection was in
-   progress, and was otherwise too conservative.
- - Merged GC_reclaim_or_delete_all into GC_reclaim_all to get rid of some
-   code.
- - Added Patrick Beard's Mac fixes, with substantial completely untested
-   modifications.
- - Fixed the MPROTECT_VDB code to deal with large pages and imprecise
-   fault addresses (as on an UltraSPARC running Solaris 2.5).  Note that this
-   was not a problem in the default configuration, which uses PROC_VDB.
- - The DEC Alpha assembly code needed to restore $gp between calls.
-   Thanks to Fergus Henderson for tracking this down and supplying a
-   patch.
- - The write command for "de" was completely broken for large files.
-   I used the easiest portable fix, which involved changing the semantics
-   so that f.new is written instead of overwriting f.  That's safer anyway.
- - Added README.solaris2 with a discussion of the possible problems of
-   mixing the collector's sbrk allocation with malloc/realloc.
- - Changed the data segment starting address for SGI machines.  The
-   old code failed under IRIX6.
- - Required double word alignment for MIPS.
- - Various minor fixes to remove warnings.
- - Attempted to fix some Solaris threads problems reported by Zhiying Chen.
-   In particular, the collector could try to fork a thread with the
-   world stopped as part of GC_thr_init.  It also failed to deal with
-   the case in which the original thread terminated before the whole
-   process did.
- - Added -DNO_EXECUTE_PERMISSION.  This has a major performance impact
-   on the incremental collector under Irix, and perhaps under other
-   operating systems.
- - Added some code to support allocating the heap with mmap.  This may
-   be preferable under some circumstances.
- - Integrated dynamic library support for HP.
-   (Thanks to Knut Tvedten <knuttv@ifi.uio.no>.)
- - Integrated James Clark's win32 threads support, and made a number
-   of changes to it, many of which were suggested by Pontus Rydin.
-   This is still not 100% solid.
- - Integrated Alistair Crooks' support for UTS4 running on an Amdahl
-   370-class machine.
- - Fixed a serious bug in explicitly typed allocation.  Objects requiring
-   large descriptors where handled in a way that usually resulted in
-   a segmentation fault in the marker.  (Thanks to Jeremy Fitzhardinge
-   for helping to track this down.)
- - Added partial support for GNU win32 development.  (Thanks to Fergus
-   Henderson.)
- - Added optional support for Java-style finalization semantics.  (Thanks
-   to Patrick Bridges.)  This is recommended only for Java implementations.
- - GC_malloc_uncollectable faulted instead of returning 0 when out of
-   memory.  (Thanks to dan@math.uiuc.edu for noticing.)
- - Calls to GC_base before the collector was initialized failed on a
-   DEC Alpha.  (Thanks to Matthew Flatt.)
- - Added base pointer checking to GC_REGISTER_FINALIZER in debugging
-   mode, at the suggestion of Jeremy Fitzhardinge.
- - GC_debug_realloc failed for uncollectable objects.  (Thanks to
-   Jeremy Fitzhardinge.)
- - Explicitly typed allocation could crash if it ran out of memory.
-   (Thanks to Jeremy Fitzhardinge.)
- - Added minimal support for a DEC Alpha running Linux.
- - Fixed a problem with allocation of objects whose size overflowed
-   ptrdiff_t.  (This now fails unconditionally, as it should.)
- - Added the beginning of Irix pthread support.
- - Integrated Xiaokun Zhu's fixes for djgpp 2.01.
- - Added SGI-style STL allocator support (gc_alloc.h).
- - Fixed a serious bug in README.solaris2.  Multithreaded programs must include
-   gc.h with SOLARIS_THREADS defined.
- - Changed GC_free so it actually deallocates uncollectable objects.
-   (Thanks to Peter Chubb for pointing out the problem.)
- - Added Linux ELF support for dynamic libararies.  (Thanks again to
-   Patrick Bridges.)
- - Changed the Borland cc configuration so that the assembler is not
-   required.
- - Fixed a bug in the C++ test that caused it to fail in 64-bit
-   environments.
-
-Since 4.11:
- - Fixed ElfW definition in dyn_load.c. (Thanks to Fergus Henderson.)
-   This prevented the dynamic library support from compiling on some
-   older ELF Linux systems.
- - Fixed UTS4 port (which I apparently mangled during the integration)
-   (Thanks to again to Alistair Crooks.)
- - "Make C++" failed on Suns with SC4.0, due to a problem with "bool".
-   Fixed in gc_priv.h.
- - Added more pieces for GNU win32.  (Thanks to Timothy N. Newsham.)
-   The current state of things should suffice for at least some
-   applications.
- - Changed the out of memory retry count handling as suggested by
-   Kenjiro Taura.  (This matters only if GC_max_retries > 0, which
-   is no longer the default.)
- - If a /proc read failed repeatedly, GC_written_pages was not updated
-   correctly.  (Thanks to Peter Chubb for diagnosing this.)
- - Under unlikely circumstances, the allocator could infinite loop in
-   an out of memory situation.  (Thanks again to Kenjiro Taura for
-   identifying the problem and supplying a fix.)
- - Fixed a syntactic error in the DJGPP code.  (Thanks to Fergus
-   Henderson for finding this by inspection.)  Also fixed a test program
-   problem with DJGPP (Thanks to Peter Monks.)
- - Atomic uncollectable objects were not treated correctly by the
-   incremental collector.  This resulted in weird log statistics and
-   occasional performance problems.  (Thanks to Peter Chubb for pointing
-   this out.)
- - Fixed some problems resulting from compilers that dont define
-   __STDC__.  In this case void * and char * were used inconsistently
-   in some cases.  (Void * should not have been used at all.  If
-   you have an ANSI superset compiler that does not define __STDC__,
-   please compile with -D__STDC__=0. Thanks to Manuel Serrano and others
-   for pointing out the problem.)
- - Fixed a compilation problem on Irix with -n32 and -DIRIX_THREADS.
-   Also fixed some other IRIX_THREADS problems which may or may not have
-   had observable symptoms.
- - Fixed an HP PA compilation problem in dyn_load.c.  (Thanks to
-   Philippe Queinnec.)
- - SEGV fault handlers sometimes did not get reset correctly.  (Thanks
-   to David Pickens.)
- - Added a fix for SOLARIS_THREADS on Intel.  (Thanks again to David
-   Pickens.)  This probably needs more work to become functional.
- - Fixed struct sigcontext_struct in os_dep.c for compilation under
-   Linux 2.1.X.        (Thanks to Fergus Henderson.)
- - Changed the DJGPP STACKBOTTOM and DATASTART values to those suggested
-   by Kristian Kristensen.  These may still not be right, but it is
-   it is likely to work more often than what was there before.  They may
-   even be exactly right.
- - Added a #include <string.h> to test_cpp.cc.  This appears to help
-   with HP/UX and gcc.  (Thanks to assar@sics.se.)
- - Version 4.11 failed to run in incremental mode on recent 64-bit Irix
-   kernels.  This was a problem related to page unaligned heap segments.
-   Changed the code to page align heap sections on all platforms.
-   (I had mistakenly identified this as a kernel problem earlier.
-   It was not.)
- - Version 4.11 did not make allocated storage executable, except on
-   one or two platforms, due to a bug in a #if test.  (Thanks to Dave
-   Grove for pointing this out.)
- - Added sparc_sunos4_mach_dep.s to support Sun's compilers under SunOS4.
- - Added GC_exclude_static_roots.
- - Fixed the object size mapping algorithm.  This shouldn't matter,
-   but the old code was ugly.
- - Heap checking code could die if one of the allocated objects was
-   larger than its base address.  (Unsigned underflow problem.  Thanks
-   to Clay Spence for isolating the problem.)
- - Added RS6000 (AIX) dynamic library support and fixed STACK_BOTTOM.
-   (Thanks to Fred Stearns.)
- - Added Fergus Henderson's patches for improved robustness with large
-   heaps and lots of blacklisting.
- - Added Peter Chubb's changes to support Solaris Pthreads, to support
-   MMAP allocation in Solaris, to allow Solaris to find dynamic libraries
-   through /proc, to add malloc_typed_ignore_off_page, and a few other
-   minor features and bug fixes.
- - The Solaris 2 port should not use sbrk.  I received confirmation from
-   Sun that the use of sbrk and malloc in the same program is not
-   supported.  The collector now defines USE_MMAP by default on Solaris.
- - Replaced the djgpp makefile with Gary Leavens' version.
- - Fixed MSWIN32 detection test.
- - Added Fergus Henderson's patches to allow putting the collector into
-   a DLL under GNU win32.
- - Added Ivan V. Demakov's port to Watcom C on X86.
- - Added Ian Piumarta's Linux/PowerPC port.
- - On Brian Burton's suggestion added PointerFreeGC to the placement
-   options in gc_cpp.h.  This is of course unsafe, and may be controversial.
-   On the other hand, it seems to be needed often enough that it's worth
-   adding as a standard facility.
-
-Since 4.12:
- - Fixed a crucial bug in the Watcom port.  There was a redundant decl
-   of GC_push_one in gc_priv.h.
- - Added FINALIZE_ON_DEMAND.
- - Fixed some pre-ANSI cc problems in test.c.
- - Removed getpagesize() use for Solaris.  It seems to be missing in one
-   or two versions.
- - Fixed bool handling for SPARCCompiler version 4.2.
- - Fixed some files in include that had gotten unlinked from the main
-   copy.
- - Some RS/6000 fixes (missing casts).  Thanks to Toralf Foerster.
- - Fixed several problems in GC_debug_realloc, affecting mostly the
-   FIND_LEAK case.
- - GC_exclude_static_roots contained a buggy unsigned comparison to
-   terminate a loop.  (Thanks to Wilson Ho.)
- - CORD_str failed if the substring occurred at the last possible position.
-   (Only affects cord users.)
- - Fixed Linux code to deal with RedHat 5.0 and integrated Peter Bigot's
-   os_dep.c code for dealing with various Linux versions.
- - Added workaround for Irix pthreads sigaction bug and possible signal
-   misdirection problems.
-Since alpha1:
- - Changed RS6000 STACKBOTTOM.
- - Integrated Patrick Beard's Mac changes.
- - Alpha1 didn't compile on Irix m.n, m < 6.
- - Replaced Makefile.dj with a new one from Gary Leavens.
- - Added Andrew Stitcher's changes to support SCO OpenServer.
- - Added PRINT_BLACK_LIST, to allow debugging of high densities of false
-   pointers.
- - Added code to debug allocator to keep track of return address
-   in GC_malloc caller, thus giving a bit more context.
- - Changed default behavior of large block allocator to more
-   aggressively avoid fragmentation.  This is likely to slow down the
-   collector when it succeeds at reducing space cost.
- - Integrated Fergus Henderson's CYGWIN32 changes.  They are untested,
-   but needed for newer versions.
- - USE_MMAP had some serious bugs.  This caused the collector to fail
-   consistently on Solaris with -DSMALL_CONFIG.
- - Added Linux threads support, thanks largely to Fergus Henderson.
-Since alpha2:
- - Fixed more Linux threads problems.
- - Changed default GC_free_space_divisor to 3 with new large block allocation.
-   (Thanks to Matthew Flatt for some measurements that suggest the old
-   value sometimes favors space too much over time.)
- - More CYGWIN32 fixes.
- - Integrated Tyson-Dowd's Linux-M68K port.
- - Minor HP PA and DEC UNIX fixes from Fergus Henderson.
- - Integrated Christoffe Raffali's Linux-SPARC changes.
- - Allowed for one more GC fixup iteration after a full GC in incremental
-   mode.  Some quick measurements suggested that this significantly
-   reduces pause times even with smaller GC_RATE values.
- - Moved some more GC data structures into GC_arrays.  This decreases
-   pause times and GC overhead, but makes debugging slightly less convenient.
- - Fixed namespace pollution problem ("excl_table").
- - Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking
-   that slightly.
- - Added some win32 threads fixes.
- - Integrated Ivan Demakov and David Stes' Watcom fixes.
- - Various other minor fixes contributed by many people.
- - Renamed config.h to gcconfig.h, since config.h tends to be used for
-   many other things.
- - Integrated Matthew Flatt's support for 68K MacOS "far globals".
- - Fixed up some of the dynamic library Makefile targets for consistency
-   across platforms.
- - Fixed a USE_MMAP typo that caused out-of-memory handling to fail
-   on Solaris.
- - Added code to test.c to test thread creation a bit more.
- - Integrated GC_win32_free_heap, as suggested by Ivan Demakov.
- - Fixed Solaris 2.7 stack base finding problem.  (This may actually
-   have been done in an earlier alpha release.)
-Since alpha3:
- - Fixed MSWIN32 recognition test, which interfered with cygwin.
- - Removed unnecessary gc_watcom.asm from distribution.  Removed
-   some obsolete README.win32 text.
- - Added Alpha Linux incremental GC support.  (Thanks to Philipp Tomsich
-   for code for retrieving the fault address in a signal handler.)
-   Changed Linux signal handler context argument to be a pointer.
- - Took care of some new warnings generated by the 7.3 SGI compiler.
- - Integrated Phillip Musumeci's FreeBSD/ELF fixes.
- - -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h>
-
-Since 4.13:
- - Fixed GC_print_source_ptr to not use a prototype.
- - generalized CYGWIN test.
- - gc::new did the wrong thing with PointerFreeGC placement.
-   (Thanks to Rauli Ruohonen.)
- - In the ALL_INTERIOR_POINTERS (default) case, some callee-save register
-   values could fail to be scanned if the register was saved and
-   reused in a GC frame.  This showed up in verbose mode with gctest
-   compiled with an unreleased SGI compiler.  I vaguely recall an old
-   bug report that may have been related.  The bug was probably quite old.
-   (The problem was that the stack scanning could be deferred until
-   after the relevant frame was overwritten, and the new save location
-   might be outside the scanned area.  Fixed by more eager stack scanning.)
- - PRINT_BLACK_LIST had some problems.  A few source addresses were garbage.
- - Replaced Makefile.dj and added -I flags to cord make targets.
-   (Thanks to Gary Leavens.)
- - GC_try_to_collect was broken with the nonincremental collector.
- - gc_cleanup destructors could pass the wrong address to
-   GC_register_finalizer_ignore_self in the presence of multiple
-   inheritance.  (Thanks to Darrell Schiebel.)
- - Changed PowerPC Linux stack finding code.
-
-Since 4.14alpha1
- - -DSMALL_CONFIG did not work reliably with large (> 4K) pages.
-   Recycling the mark stack during expansion could result in a size
-   zero heap segment, which confused things.  (This was probably also an
-   issue with the normal config and huge pages.)
- - Did more work to make sure that callee-save registers were scanned
-   completely, even with the setjmp-based code.  Added USE_GENERIC_PUSH_REGS
-   macro to facilitate testing on machines I have access to.
- - Added code to explicitly push register contents for win32 threads.
-   This seems to be necessary.  (Thanks to Pierre de Rop.)
-
-Since 4.14alpha2
- - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea).
-
-Since 4.14
- - Reworked large block allocator.  Now uses multiple doubly linked free
-   lists to approximate best fit.
- - Changed heap expansion heuristic.  Entirely free blocks are no longer
-   counted towards the heap size.  This seems to have a major impact on
-   heap size stability; the old version could expand the heap way too
-   much in the presence of large block fragmentation.
- - added -DGC_ASSERTIONS and some simple assertions inside the collector.
-   This is mainlyt for collector debugging.
- - added -DUSE_MUNMAP to allow the heap to shrink.  Suupported on only
-   a few UNIX-like platforms for now.
- - added GC_dump_regions() for debugging of fragmentation issues.
- - Changed PowerPC pointer alignment under Linux to 4.  (This needs
-   checking by someone who has one.  The suggestions came to me via a
-   rather circuitous path.)
- - Changed the Linux/Alpha port to walk the data segment backwards until
-   it encounters a SIGSEGV.  The old way to find the start of the data
-   segment broke with a recent release.
- - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of
-   GC_register_finalizer, so that it would continue to work with GC_DEBUG.
- - allochblk sometimes cleared the wrong block for debugging purposes
-   when it dropped blacklisted blocks.  This could result in spurious
-   error reports with GC_DEBUG.
- - added MACOS X Server support.  (Thanks to Andrew Stone.)
- - Changed the Solaris threads code to ignore stack limits > 8 MB with
-   a warning.  Empirically, it is not safe to access arbitrary pages
-   in such large stacks.  And the dirty bit implementation does not
-   guarantee that none of them will be accessed.
- - Integrated Martin Tauchmann's Amiga changes.
- - Integrated James Dominy's OpenBSD/SPARC port.
-
-Since 5.0alpha1
- - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization).
- - Added -DKEEP_BACK_PTRS and backptr.h interface.  (The implementation
-   idea came from Al Demers.)
-
-Since 5.0alpha2
- - Added some highly incomplete code to support a copied young generation.
-   Comments on nursery.h are appreciated.
- - Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND,
-   so the same effect could be obtained with a runtime switch.   This is
-   a step towards standardizing on a single dynamic GC library.
- - Significantly changed the way leak detection is handled, as a consequence
-   of the above.
-
-Since 5.0 alpha3
- - Added protection fault handling patch for Linux/M68K from Fergus
-   Henderson and Roman Hodek.
- - Removed the tests for SGI_SOURCE in new_gc_alloc.h.  This was causing that
-   interface to fail on nonSGI platforms.
- - Changed the Linux stack finding code to use /proc, after changing it
-   to use HEURISTIC1.  (Thanks to David Mossberger for pointing out the
-   /proc hook.)
- - Added HP/UX incremental GC support and HP/UX 11 thread support.
-   Thread support is currently still flakey.
- - Added basic Linux/IA64 support.
- - Integrated Anthony Green's PicoJava support.
- - Integrated Scott Ananian's StrongARM/NetBSD support.
- - Fixed some fairly serious performance bugs in the incremental
-   collector.  These have probably been there essentially forever.
-   (Mark bits were sometimes set before scanning dirty pages.
-   The reclaim phase unnecessarily dirtied full small object pages.)
- - Changed the reclaim phase to ignore nearly full pages to avoid
-   touching them.
- - Limited GC_black_list_spacing to roughly the heap growth increment.
- - Changed full collection triggering heuristic to decrease full GC
-   frequency by default, but to explicitly trigger full GCs during
-   heap growth.  This doesn't always improve things, but on average it's
-   probably a win.
- - GC_debug_free(0, ...) failed.  Thanks to Fergus Henderson for the
-   bug report and fix.
-
-Since 5.0 alpha4
- - GC_malloc_explicitly_typed and friends sometimes failed to
-   initialize first word.
- - Added allocation routines and support in the marker for mark descriptors
-   in a type structure referenced by the first word of an object.  This was
-   introduced to support gcj, but hopefully in a way that makes it
-   generically useful.
- - Added GC_requested_heapsize, and inhibited collections in nonincremental
-   mode if the actual used heap size is less than what was explicitly
-   requested.
- - The Solaris pthreads version of GC_pthread_create didn't handle a NULL
-   attribute pointer.  Solaris thread support used the wrong default thread
-   stack size.  (Thanks to Melissa O'Neill for the patch.)
- - Changed PUSH_CONTENTS macro to no longer modify first parameter.
-   This usually doesn't matter, but it was certainly an accident waiting
-   to happen ...
- - Added GC_register_finalizer_no_order and friends to gc.h.  They're
-   needed by Java implementations.
- - Integrated a fix for a win32 deadlock resulting from clock() calling
-   malloc.  (Thanks to Chris Dodd.)
- - Integrated Hiroshi Kawashima's port to Linux/MIPS.  This was designed
-   for a handheld platform, and may or may not be sufficient for other
-   machines.
- - Fixed a va_arg problem with the %c specifier in cordprnt.c.  It appears
-   that this was always broken, but recent versions of gcc are the first to
-   report the (statically detectable) bug.
- - Added an attempt at a more general solution to dlopen races/deadlocks.
-   GC_dlopen now temporarily disables collection.  Still not ideal, but ...
- - Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64
-   prefetch instructions.  May improve performance measurably, but I'm not
-   sure the code will run correctly on processors that don't support the
-   instruction.  Won't build except with very recent gcc.
- - Added caching for header lookups in the marker.  This seems to result
-   in a barely measurable performance gain.  Added support for interleaved
-   lookups of two pointers, but unconfigured that since the performance
-   gain is currently near zero, and it adds to code size.
- - Changed Linux DATA_START definition to check both data_start and
-   __data_start, since nothing else seems to be portable.
- - Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function
-   wrapping mechanism.  Probably currently useful only on Linux.
- - Moved some variables for the scratch allocator into GC_arrays, on
-   Martin Hirzel's suggestion.
- - Fixed a win32 threads bug that caused the collector to not look for
-   interior pointers from one of the thread stacks without
-   ALL_INTERIOR_POINTERS.  (Thanks to Jeff Sturm.)
- - Added Mingw32 support.  (Thanks again to Jeff Sturm for the patch.)
- - Changed the alpha port to use the generic register scanning code instead
-   of alpha_mach_dep.s.  Alpha_mach_dep.s doesn't look for pointers in fp
-   registers, but gcc sometimes spills pointers there.  (Thanks to Manuel
-   Serrano for helping me debug this by email.)  Changed the IA64 code to
-   do something similar for similar reasons.
-
-[5.0alpha5 doesn't really exist, but it may have escaped.]
-
-Since 5.0alpha6:
- - -DREDIRECT_MALLOC was broken in alpha6. Fixed.
- - Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to
-   accept it.
- - Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be
-   linked into every executable.
- - Added PREFETCH to bitmap marker.  Changed it to use the header cache.
- - GC_push_marked sometimes pushed one object too many, resulting in a
-   segmentation fault in GC_mark_from_mark_stack.  This was probably an old
-   bug.  It finally showed up in gctest on win32.
- - Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE
-   when SMALL_CONFIG was defined.  This was no doubt a major performance bug for
-   the default win32 configuration.
- - Removed -DSMALL_CONFIG from NT_MAKEFILE.  It seemed like an anchronism now
-   that the average PC has 64MB or so.
- - Integrated Bryce McKinley's patches for linux threads and dynamic loading
-   from the libgcj tree.  Turned on dynamic loading support for Linux/PPC.
- - Changed the stack finding code to use environ on HP/UX.  (Thanks
-   to Gustavo Rodriguez-Rivera for the suggestion.)  This should probably
-   be done on other platforms, too.  Since I can't test those, that'll
-   wait until after 5.0.
-
-Since 5.0alpha7:
- - Fixed threadlibs.c for linux threads.  -DUSE_LD_WRAP was broken and
-   -ldl was omitted.  Fixed Linux stack finding code to handle
-   -DUSE_LD_WRAP correctly.
- - Added MSWIN32 exception handler around marker, so that the collector
-   can recover from root segments that are unmapped during the collection.
-   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.
-   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.
-
-Since 5.1
- - dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it
-   was defined as a macro.  This prevented the collector from building on
-   Irix.
- - We quietly assumed that indirect mark descriptors were never 0.
-   Our own typed allocation interface violated that.  This could result
-   in segmentation faults in the marker with typed allocation.
- - Fixed a _DUSE_MUNMAP bug in the heap block allocation code.
-   (Thanks to Ben Hutchings for the patch.)
- - Taught the collector about VC++ handling array operator new.
-   (Thanks again to Ben Hutchings for the patch.)
- - The two copies of gc_hdrs.h had diverged.  Made one a link to the other
-   again.
-
-Since 5.2  (A few 5.2 patches are not in 6.0alpha1)
- - Fixed _end declaration for OSF1.
- - There were lots of spurious leak reports in leak detection mode, caused
-   by the fact that some pages were not being swept, and hence unmarked
-   objects weren't making it onto free lists.  (This bug dated back to 5.0.)
- - Fixed a typo in the liblinuxgc.so Makefile rule.
- - Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work
-   around a Windows 95 GetOpenFileName problem.  (Thanks to Jacob Navia.)
-
-Since 5.3
- - Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH.
-   (Thanks to Shawn Wagner for actually testing this.)
- - Fixed GC_is_thread_stack in solaris_threads.c.  It forgot to return a value
-   in the common case.  I wonder why nobody noticed?
- - Fixed another silly syntax problem in GC_double_descr.  (Thanks to
-   Fergus Henderson for finding it.)
- - Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice.
-
-Since 5.4  (A few 5.3 patches are not in 6.0alpha2)
- - Added HP/PA prefetch support.
- - Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve
-   the reliability of generating pointer backtrace information, e.g. in
-   the Bigloo environment.
- - Added parallel marking support (-DPARALLEL_MARK).  This currently
-   works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt
-   to other platforms.  This is intended to be a lighter-weight (less
-   new code, probably not as scalable) solution than the work by Toshio Endo
-   et al, at the University of Tokyo.  A number of their ideas were
-   reused, though the code wasn't, and the underlying data structure
-   is significantly different.  In particular, we keep the global mark
-   stack as a single shared data structure, but most of the work is done
-   on smaller thread-local mark stacks.
- - Changed GC_malloc_many to be cheaper, and to require less mutual exclusion
-   with -DPARALLEL_MARK.
- - Added full support for thread local allocation under Linux
-   (-DTHREAD_LOCAL_ALLOC).  This is a thin veneer on GC_malloc_many, and
-   should be easily portable to other platforms, especially those that
-   support pthreads.
- - CLEAR_DOUBLE was not always getting invoked when it should have been.
- - GC_gcj_malloc and friends used different out of memory handling than
-   everything else, probably because I forgot about one when I implemented
-   the other.  They now both call GC_oom_fn(), not GC_oom_action().
- - Integrated Jakub Jelinek's fixes for Linux/SPARC.
- - Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of
-   GC_arrays, and separately registered the first two as excluded roots.
-   This makes code compiled with gc_inl.h less dependent on the
-   collector version.  (It would be nice to remove the inclusion of
-   gc_priv.h by gc_inl.h completely, but we're not there yet.  The
-   locking definitions in gc_priv.h are still referenced.)
-   This change was later coniditoned on SEPARATE_GLOBALS, which
-   is not defined by default, since it involves a performance hit.
- - Register GC_obj_kinds separately as an excluded root region.  The
-   attempt to register it with GC_arrays was usually failing.  (This wasn't
-   serious, but seemed to generate some confusion.)
- - Moved backptr.h to gc_backptr.h.
-
-Since 6.0alpha1
- - Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms
-   for which that's expensive.
- - Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems.
- - Added a missing volatile to OR_WORD and renamed the parameter to
-   GC_compare_and_swap so it's not a C++ reserved word.  (Thanks to
-   Toshio Endo for pointing out both of those.)
- - Changed Linux dynamic library registration code to look at /proc/self/maps
-   instead of the rld data structures when REDIRECT_MALLOC is defined.
-   Otherwise some of the rld data data structures may be prematurely garbage
-   collected.  (Thanks to Eric Benson for helping to track this down.)
- - Fixed USE_LD_WRAP a bit more, so it should now work without threads.
- - Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness.
-   Tomporarily added some backward compatibility definitions.  Renamed
-   USE_LD_WRAP to GC_USE_LD_WRAP.
- - Many MACOSX POWERPC changes, some additions to the gctest output, and
-   a few minor generic bug fixes.  (Thanks to Dietmar Planitzer.)
-
-Since 6.0 alpha2
- - Fixed the /proc/self/maps code to not seek, since that apparently is not
-   reliable across all interesting kernels.
- - Fixed some compilation problems in the absence of PARALLEL_MARK
-   (introduced in alpha2).
- - Fixed an algorithmic problem with PARALLEL_MARK.  If work needs to
-   be given back to the main mark "stack", the BOTTOM entries of the local
-   stack should be given away, not the top ones.  This has substantial
-   performance impact, especially for > 2 processors, from what I can tell.
- - Extracted gc_lock.h from gc_priv.h.  This should eventually make it a
-   bit easier to avoid including gc_priv.h in clients.
- - Moved all include files to include/ and removed duplicate links to the
-   same file.  The old scheme was a bad idea because it was too easy to get the
-   copies out of sync, and many systems don't support hard links.
-   Unfortunately, it's likely that I broke some of the non-Unix Makefiles in
-   the process, although I tried to update them appropriately.
- - Removed the partial support for a copied nursery.  It's not clear that
-   this would be a tremendous win, since we don't consistently lose to
-   generational copying collectors.  And it would significantly complicate
-   many things.  May be reintroduced if/when it really turns out to win.
- - Removed references to IRIX_JDK_THREADS, since I believe there never
-   were and never will be any clients.
- - Added some code to linux_threads.c to possibly support HPUX threads
-   using the Linux code.  Unfortunately, it doesn't work yet, and is
-   currently disabled.
- - Added support under Linux/X86 for saving the call chain, both in (debug)
-   objects for client debugging, and in GC_arrays._last_stack for GC
-   debugging.  This was previously supported only under Solaris.  It is
-   not enabled by default under X86, since it requires that code be compiled
-   to explicitly dave frame pointers on the call stack.  (With gcc this
-   currently happens by default, but is often turned off explicitly.)
-   To turn it on, define SAVE_CALL_CHAIN.
-
-Since 6.0 alpha3
- - Moved up the detection of mostly full blocks to the initiatiation of the
-   sweep phase.  This eliminates some lock conention in the PARALLEL_MARK case,
-   as multiple threads try to look at mostly full blocks concurrently.
- - Restored the code in GC_malloc_many that grabs a prefix of the global
-   free list.  This avoids the case in which every GC_malloc_many call
-   tries and fails to allocate a new heap block, and the returns a single
-   object from the global free list.
- - Some minor fixes in new_hblk.c.  (Attempted to build free lists in order
-   of increasing addresses instead of decreasing addresses for cache performance
-   reasons.  But this seems to be only a very minor gain with -DEAGER_SWEEP,
-   and a loss in other cases.  So the change was backed out.)
- - Fixed some of the documentation.  (Thanks in large part to Fergus
-   Henderson.)
- - Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform
-   large numbers of mmaps.  (Thanks to Eric Benson.)  Also fixed that code to
-   deal with short reads.
- - Added GC_get_total_bytes().
- - Fixed leak detection mode to avoid spurious messages under linuxthreads.
-   (This should also now be easy for the other supported threads packages.
-   But the code is tricky enough that I'm hesitant to do it without being able
-   to test.  Everything allocated in the GC thread support itself should be
-   explicitly deallocated.)
- - Made it possible (with luck) to redirect malloc to GC_local_malloc.
-
-Since 6.0 alpha4
- - Changed the definition of GC_pause in linux_threads.c to use a volatile
-   asm.  Some versions of gcc apparently optimize away writes to local volatile
-   variables.  This caused poor locking behaviour starting at about
-   4 processors.
- - Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep
-   to linux_threads.c.
-   The first two calls could be used to generally avoid sending GC signals to
-   blocked threads, avoiding both premature wakeups and unnecessary overhead.
- - Fixed a serious bug in thread-local allocation.  At thread termination,
-   GC_free could get called on small integers.  Changed the code for thread
-   termination to more efficiently return left-over free-lists.
- - Integrated Kjetil Matheussen's BeOS support.
- - Rearranged the directory structure to create the doc and tests
-   subdirectories.
- - Sort of integrated Eric Benson's patch for OSF1.  This provided basic
-   OSF1 thread support by suitably extending hpux_irix_threads.c.  Based
-   on earlier email conversations with David Butenhof, I suspect that it
-   will be more reliable in the long run to base this on linux_threads.c
-   instead.  Thus I attempted to patch up linux_threads.c based on Eric's code.
-   The result is almost certainly broken, but hopefully close enough that
-   someone with access to a machine can pick it up.
- - Integrated lots of minor changes from the NetBSD distribution.  (These
-   were supplied by David Brownlee.  I'm not sure about the original
-   authors.)
- - Hacked a bit more on the HP/UX thread-support in linux_threads.c.  It
-   now appears to work in the absence of incremental collection.  Renamed
-   hpux_irix_threads.c back to irix_threads.c, and removed the attempt to
-   support HPUX there.
- - Changed gc.h to define _REENTRANT in cases in which it should already
-   have been defined. It is still safer to also define it on the command
-   line.
-
-Since 6.0alpha5:
- - Changed the definition of DATASTART on ALPHA and IA64, where data_start
-   and __data_start are not defined by earlier versions of glibc.  This might
-   need to be fixed on other platforms as well.
- - Changed the way the stack base and backing store base are found on IA64.
-   This should now remain reliable on future kernels.  But since it relies
-   on /proc, it will no longer work in the simulated NUE environment.
- - Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent
-   on the OS.  On non-Unix systems, rand() should be used instead.  Handled
-   small RAND_MAX.  (Thanks to Peter Ross for pointing this out.)
- - Fixed the cord make rules to create the cord subdirectory, if necessary.
-   (Thanks to Doug Moen.)
- - Changed fo_object_size calculation in finalize.c.  Turned finalization
-   of nonheap object into a no-op.  Removed anachronism from GC_size()
-   implementation.
- - Changed GC_push_dirty call in solaris_threads.c to GC_push_selected.
-   It was missed in a previous renaming. (Thanks to Vladimir Tsichevski
-   for pointing this out.)
- - Arranged to not not mask SIGABRT in linux_threads.c.  (Thanks to Bryce
-   McKinlay.)
- - Added GC_no_dls hook for applications that want to register their own
-   roots.
- - Integrated Kjetil Matheussen's Amiga changes.
- - Added FREEBSD_STACKBOTTOM.  Changed the X86/FreeBSD port to use it.
-   (Thanks to Matthew Flatt.)
- - Added pthread_detach interception for platforms supported by linux_threads.c
-   and irix_threads.c.  Should also be added for Solaris?
- - Changed the USE_MMAP code to check for the case in which we got the
-   high end of the address space, i.e. mem_ptr + mem_sz == 0.  It appears
-   that this can happen under Solaris 7.  It seems to be allowed by what
-   I would claim is an oversight in the mmap specification.  (Thanks to Toshio
-   Endo for pointing out the problem.)
- - Cleanup of linux_threads.c.  Some code was originally cloned from
-   irix_threads.c and now unnecessary.  Some comments were obviously wrong.
- - (Mostly) fixed a longstanding problem with setting of dirty bits from
-   a signal handler.  In the presence of threads, dirty bits could get lost,
-   since the etting of a bit in the bit vector was not atomic with respect
-   to other updates.  The fix is 100% correct only for platforms for which
-   GC_test_and_set is defined.  The goal is to make that all platforms with
-   thread support.  Matters only if incremental GC and threads are both
-   enabled.
- - made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an
-   initialization time, instead of build-time option.  This is a
-   nontrivial, high risk change.  It should slow down the code measurably
-   only if MERGE_SIZES is not defined, which is a very nonstandard
-   configuration.
- - Added doc/README.environment, and implemented what it describes.  This
-   allows a number of additional configuration options to be set through
-   the environment.  It documents a few previously undocumented options.
- - Integrated Eric Benson's leak testing improvements.
- - Removed the option to throw away the beginning of each page (DISCARD_WORDS).
-   This became less and less useful as processors enforce stricter alignment.
-   And it hadn't been tested in ages, and was thus probably broken anyway.
-
-Since 6.0alpha6:
- - Added GC_finalizer_notifier.  Fixed GC_finalize_on_demand.  (The variable
-   actually wasn't being tested at the right points.  The build-time flag
-   was.)
- - Added Tom Tromey's S390 Linux patch.
- - Added code to push GC_finalize_now in GC_push_finalizer_structures.
-   (Thanks to Matthew Flatt.)
- - Added GC_push_gc_structures() to push all GC internal roots.
- - Integrated some FreeBSD changes from Matthew Flatt.
- - It looks like USRSTACK is not always correctly defined under Solaris.
-   Hacked gcconfig.h to attempt to work around the problem.  The result
-   is not well tested.  (Thanks again to Matthew Flatt for pointing this
-   out.  The gross hack is mine. - HB)
- - Added Ji-Yong Chung's win32 threads and C++ fixes.
- - Arranged for hpux_test_and_clear.s to no longer be needed or built.
-   It was causing build problems with gas, and it's not clear this is
-   better than the pthreads alternative on this platform.
- - Some MINGW32 fixes from Hubert Garavel.
- - Added Initial Hitachi SH4 port from Kaz Kojima.
- - Ported thread-local allocation and parallel mark code to HP/UX on PA_RISC.
- - Made include/gc_mark.h more public and separated out the really private
-   pieces.  This is probably still not quite sufficient for clients that
-   want to supply their own kind of type information.  But it's a start.
-   This involved lots of identifier renaming to make it namespace clean.
- - Added GC_dont_precollect for clients that need complete control over
-   the root set.
- - GC_is_visible didn't do the right thing with gcj objects.  (Not that
-   many people are likely to care, but ...)
- - Don't redefine read with GC_USE_LD_WRAP.
- - Initial port to LINUX/HP_PA.  Incremental collection and threads are not
-   yet supported.  (Incremental collection should work if you have the
-   right kernel.  Threads may work with a sufficiently patched pthread
-   library.)
- - Changed gcconfig.h to recognize __i386__ as an alternative to i386 in
-   many places.  (Thanks to Benjamin Lerman.)
- - Made win32_threads.c more tolerant of detaching a thread that it didn't
-   know about.  (Thanks to Paul Nash.)
- - Added Makefile.am and configure.in from gcc to the distribution, with
-   minimal changes.  For the moment, those are just placeholders.  In the
-   future, we're planning to switch to a GNU-style build environment for
-   Un*x-like systems, though the old Makefile will remain as a backup.
- - Turned off STUBBORN_ALLOC by default, and added it back as a Makefile
-   option.
- - Redistributed some functions between malloc.c and mallocx.c, so that
-   simple statically linked apps no longer pull in mallocx.o.
- - Changed large object allocation to clear the first and last few words
-   of each block before releassing the lock.  Otherwise the marker could see
-   objects with nonsensical type descriptors.
- - Fixed a couple of subtle problems that could result in not recognizing
-   interior pointers from the stack.  (I believe these were introduced
-   in 6.0alpha6.)
- - GC_debug_free_inner called GC_free, which tried to reacquire the
-   allocator lock, and hence deadlocked.  (DBG_HDRS_ALL probably never worked
-   with threads?)
- - Fixed several problems with back traces.  Accidental references to a free
-   list could cause the free list pointer to be overwritten by a back pointer.
-   There seemed to be some problems with the encoding of root and finalizer
-   references.
-
-Since 6.0alpha7:
- - Changed GC_debug_malloc_replacement and GC_debug_realloc_replacement
-   so that they compile under Irix.  (Thanks to Dave Love.)
- - Updated powerpc_macosx_mach_dep.s so that it works if the collector
-   is in a dynamic library.  (Thanks to Andrew Begel.)
- - Transformed README.debugging into debugging.html, updating and
-   expanding it in the process.  Added gcdescr.html and tree.html
-   from the web site to the GC distribution.
- - Fixed several problems related to PRINT_BLACK_LIST. This involved
-   restructuring some of the marker macros.
- - Fixed some problems with the sizing of objects with debug information.
-   Finalization was broken KEEP_BACK_PTRS or PRINT_BLACK_LIST.  Reduced the
-   object size with SHORT_DEBUG_HDRS by another word.
- - The "Needed to allocate blacklisted ..." warning had inadvertently
-   been turned off by default, due to a buggy test in allchblk.c.  Turned
-   it back on.
- - Removed the marker macros to deal with 2 pointers in interleaved fashion.
-   They were messy and the performance improvement seemed minimal.  We'll
-   leave such scheduling issues to the compiler.
- - Changed Linux/PowerPC test to also check for __powerpc__ in response
-   to a discussion on the gcc mailing list.
- - On Matthew Flatt's suggestion removed the "static" from the jmp_buf
-   declaration in GC_generic_push_regs.  This was causing problems in
-   systems that register all of their own roots.  It looks far more correct
-   to me without the "static" anyway.
- - Fixed several problems with thread local allocation of pointerfree or
-   typed objects.  The collector was reclaiming thread-local free lists, since
-   it wasn't following the link fields.
- - There was apparently a long-standing race condition related to multithreaded
-   incremental collection.  A collection could be started and a thread stopped
-   between the memory unprotect system call and the setting of the
-   corresponding dirt bit.  I believe this did not affect Solaris or PCR, which
-   use a different dirty-bit implementation.  Fixed this by installing
-   signal handlers with sigaction instead of signal, and disabling the thread
-   suspend signal while in the write-protect handler.  (It is unclear
-   whether this scenario ever actually occurred.  I found it while tracking
-   down the following:)
- - Incremental collection did not cooperate correctly with the PARALLEL_MARK
-   implementation of GC_malloc_many or the local_malloc primitves.  It still
-   doesn't work well, but it shouldn't lose memory anymore.
- - Integrated some changes from the gcc source tree that I had previously
-   missed.  (Thanks to Bryce McKinley for the reminder/diff.)
- - Added Makefile.direct as a copy of the default Makefile, which would
-   normally be overwritten if configure is run.
- - Changed the gc.tar target in Makefile.direct to embed the version number
-   in the gc directory name.  This will affect future tar file distributions.
- - Changed the Irix dynamic library finding code to no longer try to
-   eliminate writable text segments under Irix6.x, since that is probably no
-   longer necessary, and can apparently be unsafe on occasion.  (Thanks to
-   Shiro Kawai for pointing this out.)
- - GC_cleanup with GC_DEBUG enabled passed a real object base address to
-   GC_debug_register_finalizer_ignore_self, which expected a pointer past the
-   debug header.  Call GC_register_finalizer_ignore_self instead, even with
-   debugging enabled.  (Thanks to Jean-Daniel Fekete for catching this.)
- - The collector didn't build with call chain saving enabled but NARGS=0.
-   (Thanks to Maarten Thibaut.)
- - Fixed up the GNU-style build files enough so that they work in some
-   obvious cases.
- - Added initial port to Digital Mars compiler for win32. (Thanks to Walter
-   Bright.)
-
-Since 6.0alpha8:
- - added README.macros.
- - Made gc.mak a symbolic link to work around winzip's tendency to ignore
-   hard links.
- - Simplified the setting of NEED_FIND_LIMIT in os_dep.c, possibly breaking
-   it on untested platforms.
- - Integrated initial GNU HURD port. (Thanks to Chris Lingard and Igor
-   Khavkine.)
- - A few more fixes for Digital Mars compiler (Walter Bright).
- - Fixed gcc version recognition.  Renamed OPERATOR_NEW_ARRAY to
-   GC_OPERATOR_NEW_ARRAY.  Changed GC_OPERATOR_NEW_ARRAY to be the default.
-   It can be overridden with -DGC_NO_OPERATOR_NEW_ARRAY.  (Thanks to
-   Cesar Eduardo Barros.)
- - Changed the byte size to free-list mapping in thread local allocation
-   so that size 0 allocations are handled correctly.
- - Fixed Linux/MIPS stackbottom for new toolchain. (Thanks to Ryan Murray.)
- - Changed finalization registration to invoke GC_oom_fn when it runs out
-   of memory.
- - Removed lvalue cast in finalize.c.  This caused some debug configurations
-   not to build with some non-gcc compilers.
-
-Since 6.0alpha9:
- - Two more bug fixes for KEEP_BACK_PTRS and DBG_HDRS_ALL.
- - Fixed a stack clearing problem that resulted in SIGILL with a
-   misaligned stack pointer for multithreaded SPARC builds.
- - Integrated another HURD patch (thanks to Igor Khavkine).
-
-Since 6.0:
- - Non-debug, atomic allocations could result in bogus smashed object
-   reports with debugging on.  (Thanks to Patrick Doyle for the small
-   test case.)
- - Fixed GC_get_register_stack_base (Itanium only) to work around a glibc
-   2.2.4 bug.
- - Initial port to HP/UX on Itanium.  Thread support and both 32 and 64
-   bit ABIs appear to work.  Parallel mark support doesn't yet, due to
-   some inline assembly code issues.  Thread local allocation does appear
-   to work.
- - ifdef'ed out glibc2.1/Itanium workaround.  I suspect nobody is using
-   that combination anymore.
- - Added a patch to make new_gc_alloc.h usable with gcc3.0.  (Thanks to
-   Dimitris Vyzovitis for the patch.)
- - Debugged 64-bit support on HP/UX PA-RISC.
- - Turned on dynamic loading support for FreeBSD/ELF.  (Thanks to Peter
-   Housel.)
- - Unregistering of finalizers with debugging allocation was broken.
-   (Thanks to Jani Kajala for the test case.)
- - Old finalizers were not returned correctly from GC_debug_register_finalizer.
- - Disabled MPROTECT_VDB for Linux/M68K based on a report that it doesn't work.
- - Cleaned up some statistics gathering code in reclaim.c (Thanks to Walter
-   Bright.)
- - Added some support for OpenBSD/ELF/Linux.  (Thanks to Suzuki Toshiya.)
- - Added Jakub Jelinek's patch to use dl_iterate_phdr for dynamic library
-   traversal to dyn_load.c.  Changed it to weakly reference dl_iterate_phdr,
-   so that the old code is stilll used with old versions of glibc.
- - Cleaned up feature test macros for various threads packages and
-   integrated (partially functional) FreeBSD threads code from Loren Rittle.
-   It's likely that the cleanup broke something, since it touched lots of
-   code.  It's also likelly that it fixed some unreported bugs in the
-   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.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
-   broken with incremental collection.  It's possible to turn this back on
-   if you make sure that read calls don't block (e.g. by calling select
-   first).
- - Fix ifdef in Solaris_threads.h to refer to GC_SOLARIS_THREADS.
- - Added check for environment variable GC_IGNORE_GCJ_INFO.
- - 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 (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
-   Jonathan Clark.)
- - Integrated port to NEC EWS4800 (MIPS-based workstation, with somewhat
-   different address-space layout). This may help for other machines with
-   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 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.)
- - Cause win32_threads.c to handle an out of range stack pointer correctly,
-   though currently with a warning.  (Thanks to Jonathan Clark for
-   observing that win32 applications may temporarily use the stack
-   pointer for other purposes, and suggesting a fix.  Unfortunately, it's
-   not clear that there is a complete solution to this problem.)
-
-Since 6.1alpha5:
- - Added GC_MAXIMUM_HEAP_SIZE environment variable.
- - Fix configure.in for MIPS/LINUX. (Thanks to H.J. Lu.)
- - Double page hash table size for -DLARGE_CONFIG.
- - Integrated Bo Thorsen's X86-64 support.
- - STACKBOTTOM definition for LINUX/MIPS was partially changed back.
-   (Thanks to H.J. Lu and Hiroshi Kawashima for resolving this.)
- - Replaced all occurrences of LINUX_DATA_START in gcconfig.h with
-   SEARCH_FOR_DATA_START.  It doesn't hurt to falll back to a search.
-   And __data_start doesn't seem to get defined correctly of the GC
-   library is loaded with LD_PRELOAD, e.g. for leak detection.
- - If the GC_find_leak environment variable is set, do a
-   atexit(GC_gcollect) to give us at least one chance to detect leaks.
-   This may report some very benign leaks, but ...
- - Addeded REDIRECT_FREE.  It's necessary if we want leak detection with
-   LD_PRELOAD.
- - Defer printing of leaked objects, as for smashed objects.
- - Fixed process and descriptor leak in GC_print_callers.  Try for
-   line number even if we got function name.)
- - Ported parallel GC support and thread local allocation to Alpha.
-   Not yet well-tested.
- - Added GC_DUMP_REGULARLY and added finalization statistics to GC_dump().
- - Fixed Makefile.am to mention alpha_mach_dep.S instead of the defunct
-   alpha_mach_dep.s.  (Thanks to Fergus Henderson.)
- - Incorporated a change to new_gc_alloc.h, suggested by Johannes Schmidt,
-   which should make it work with gcc3.1.  (I would still like to encourage
-   use of gc_allocator.h instead.)
- - Use alpha_mach_dep.S only on Linux.  (It's not clear that this is
-   optimal, but it otherwise didn't build on Tru64.  Thanks to Fergus
-   Henderson.)
- - Added ifdef to guard free() in os_dep.c.  Otherwise we get a
-   compilation error on Irix.  (Thanks to Dai Sato.)
- - Added an experimental version of GC_memalign to mallocx.c.  This can't
-   always work, since we don't handle alignment requests in the hblk-level
-   allocator, and we can't handle arbitrary pointer displacements unless
-   GC_all_interior_pointers is enabled.  But it should work for alignment
-   requests up to HBLKSIZE.  This is not yet documented in the standard
-   places.
- - Finally debugged the OSF1/Tru64 thread support.  This needs more testing,
-   since I needed to add a somewhat unconvincing workaround for signal
-   delivery issues that I don't yet completely understand.  But it does
-   pass my tests, even in parallel GC mode.  Incremental GC support is
-   disabled if thread support is enabled, due to the signal issues.
- - Eliminated name-space-incorrect definition of _cdecl from gc_cpp.h.
- - Added GC_debug_malloc_replacement and GC_debug_realloc_replacement
-   declarations to gc.h.  On IA64, this is required for REDIRECT_MALLOC
-   to work correctly with these.
- - Fixed Linux USE_PROC_FOR_LIBRARIES to work with a 64-bit /proc format.
-
-Since 6.1:
- - Guard the test for GC_DUMP_REGULARLY in misc.c with
-   "#ifndef NO_DEBUGGING".  Otherwise it fails to build with NO_DEBUGGING
-   defined.  (Thanks to Manuel Serrano.)
- - Message about retrying suspend signals was incorrectly generated even when
-   flag was not set.
- - Cleaned up MACOSX/NEXT root registration code.  There was apparently a
-   separate ifdef case in GC_register_data_segments() for no reason.
- - Removed MPROTECT_VDB for MACOSX port, based on one negative report.
- - Arrange for gc.h and friends to be correctly installed with GNU-style
-   "make install".
- - Enable the GNU-style build facility include C++ support in the library
-   with --enable-cplusplus. (Thanks to Thomas Maier for some of the patch.)
- - Mark from GC_thread_key in linux_threads.c, in case that's allocated
-   from the garbage collected heap, as it is with our own thread-specific
-   storage implementation.  (Thanks to Jeff Sturm.)
- - Mark all free list header blocks if they are heap allocated.  This avoids
-   some unnecessary tracing.  And it remains correct if we clear the
-   root set. (Thanks to Jeff Sturm for identifying the bug.)
- - Improved S390/Linux support.  Add S390/Linux 64-bit support.  (Thanks
-   to Ulrich Weigand.)
- - Corrected the spelling of GC_{M,C}ALLOC_EXPLICTLY_TYPED to
-   GC_{M,C}ALLOC_EXPLICITLY_TYPED in gc_typed.h.  This is technically
-   an interface change.  Based on the fact that nobody reported this,
-   I suspect/hope there were no clients.
- - Cleaned up gc_typed.h so that (1) it adds an extern "C" declaration
-   when appropriate, (2) doesn't generate references to undefined internal
-   macros, and (3) allows easier manual construction of descriptors.
- - Close the file descriptor used by GC_print_address_map().
- - Set the "close-on-exec" bit for various file descriptors maintained
-   for the collector's internal use.
- - Added a hack to find memory segments owned by the system allocator
-   under win32.  Based on my tests, this tends to eventually find all
-   segments, though it may take a while.  There appear to be cleaner,
-   but slower solutions under NT/XP.  But they rely on an API that's
-   unsupported under 9X.
- - Changed Linux PowerPC stack finding to LINUX_STACKBOTTOM.  (Thanks
-   to Akira Tagoh for pointing out that HEURISTIC1 doesn't work on
-   64-bit kernels.)
- - Added GC_set_free_space_divisor to avoid some Windows dll issues.
- - Added FIXUP_POINTER, POINTER_SHIFT, POINTER_MASK to allow preprocessing
-   of candidate pointers for tagging, etc.
- - Always lock around GC_notify_full_gc().  Simplified code for
-   invoking GC_notify_full_gc().
- - Changed the way DATASTART is defined on FreeBSD to be robust against
-   an unmapped page after etext.  (Thanks to Hironori Sakamoto for
-   tracking down the intermittent failure.)
- - Made GC_enable() and GC_disable() official.  Deprecated direct update
-   of GC_dont_gc.  Changed GC_gcollect to be a noop when garbage collection
-   is disabled.
- - Call GC_register_dynamic_libraries before stopping the world on Linux,
-   in order to avoid a potential deadlock due to the dl_iterate_phdr lock.
- - Introduced a more general mechanism for platform-dependent code to
-   decide whether the main data segment should be handled separately
-   from dynamic libraries, or registered by GC_register_dynamic_libraries.
-   The latter is more reliable and easier on Linux with dl_iterate_phdr.
-
-Since 6.2alpha1:
- - Fixed the completely broken FreeBSD code in 6.2alpha1.  (Thanks to
-   Hironori Sakamoto for the patch.)
- - Changed IRIX reference in dbg_mlc.c to IRIX5. (Thanks to Marcus Herbert.)
- - Attempted to work around the problems with .S filenames and the SGI
-   compiler.  (Reported by several people. Untested.)
- - Worked around an HP/UX make issue with the GNU-style build process.
- - Fixed the --enable-cplusplus build machinery to allow builds without
-   a C++ compiler.  (That was always the intent ...)
- - Changed the debugging allocation macros to explicitly pass the return
-   address for Linux and XXXBSD on hardware for which we can't get stack
-   traces.  Use __builtin_return_address(0) to generate it when possible.
-   Some of the configuration work was cleaned up (good) and moved to gc.h
-   (bad, but necessary).  This should make leak detection more useful
-   on a number of platforms.  (Thanks to Fabian Thylman for the suggestion.)
- - Fixed compilation problems in dbg_mlc.c with GC_ADD_CALLER.
- - Bumped revision number for dynamic library.
-
-Since 6.2alpha2:
- - Don't include execinfo.h in os_dep.c when it's not needed, and may not exist.
-
-Since 6.2alpha3:
- - Use LINUX_STACKBOTTOM for >= glibc2.2 on Linux/MIPS.  (See Debian bug
-   # 177204)
- - Integrated Jeff Sturm and Jesse Rosenstock's MACOSX threads patches.
- - Integrated Grzegorz Jakacki's substantial GNU build patch.  "Make dist"
-   should now work for the GNU build process.  Documentation files
-   are installed under share/gc.
- - Tweaked gc_cpp.h to again support the Borland compiler.  (Thanks to
-   Rene Girard for pointing out the problems.)
- - Updated BCC_MAKEFILE (thanks to Rene Girard).
- - Added GC_ASSERT check for minimum thread stack size.
- - Added --enable-gc-assertions.
- - Added some web documentation to the distribution.  Updated it in the
-   process.
- - Separate gc_conf_macros.h from gc.h.
- - Added generic GC_THREADS client-defined macro to set the appropriate
-   GC_XXX_THREADS internal macro.  (gc_config_macros.h.)
- - Add debugging versions of _ignore_off_page allocation primitves.
- - Moved declarations of GC_make_closure and GC_debug_invoke_finalizer
-   from gc.h to gc_priv.h.
- - Reset GC_fail_count even if only a small allocation succeeds.
- - Integrated Brian Alliet's patch for dynamic library support on Darwin.
- - gc_cpp.h's gc_cleanup destructor called GC_REGISTER_FINALIZER_IGNORE_SELF
-   when it should have called the lower case version, since it was
-   explicitly computing a base pointer.
-
-Since 6.2alpha4:
- - GC_invoke_finalizers could, under rare conditions, set
-   GC_finalizer_mem_freed to an essentially random value.  This could
-   possibly cause unbounded heap growth for long-running applications
-   under some conditions.  (The bug was introduced in 6.1alpha5, and
-   is not in gcc3.3.  Thanks to Ben Hutchings for finding it.)
- - Attempted to sanitize the various DLL macros.  GC_USE_DLL disappeared.
-   GC_DLL is used instead.  All internal tests are now on GC_DLL.
-   README.macros is now more precise about the intended meaning.
- - Include DllMain in the multithreaded win32 version only if the
-   collector is actually built as a dll.  (Thanks to Mohan Embar for
-   a version of the patch.)
- - Hide the cygwin threadAttach/Detach functions.  They were violating our
-   namespace rules.
- - Fixed an assertion in GC_check_heap_proc.  Added GC_STATIC_ASSERT.
-   (Thanks again to Ben Hutchings.)
- - Removed some obsolete definitions for Linux/PowerPC in gcconfig.h.
- - CORD_cat was not rebalancing unbalanced trees in some cases, violating
-   a CORD invariant.  Also tweaked the rebalancing rule for
-   CORD_cat_char_star.  (Thanks to Alexandr Petrosian for the bug report
-   and patch.)
- - Added hand-coded structured exception handling support to mark.c.
-   This should enable support of dynamic libraries under win32 with
-   gcc-compiled code.  (Thanks to Ranjit Mathew for the patch.)
-   Turned on dynamic library scanning for win32/gcc.
- - Removed some remnants of read wrapping.  (Thanks to Kenneth Schalk.)
-   GC_USE_LD_WRAP ws probably broken in recent versions.
- - The build could fail on some platforms since gcconfig.h could include
-   declarations mentioning ptr_t, which was not defined, e.g. when if_mach
-   was built.  (Thanks to Yann Dirson for pointing this out.)  Also
-   cleaned up tests for GC_PRIVATE_H in gcconfig.h a bit.
- - The GC_LOOP_ON_ABORT environment variable interfered with incremental
-   collection, since the write fault handler was erroneously overridden.
-   Handlers are now set up in the correct order.
- - It used to be possible to call GC_mark_thread_local_free_lists() while
-   the world was not stopped during an incremental GC.  This was not safe.
-   Fortunately, it was also unnecessary.  Added GC_world_stopped flag
-   to avoid it.  (This caused occasional crashes in GC_set_fl_marks
-   with thread local allocation and incremental GC.  This probably happened
-   primarily on old, slow multiprocessors.)
- - Allowed overriding of MAX_THREADS in win32_threads.c from the build
-   command line.  (Patch from Yannis Bres.)
- - Taught the IA64/linux code to determine the register backing store base from
-   /proc/self/maps after checking the __libc symbol, but before guessing.
-   (__libc symbols are on the endangered list, and the guess is likely to not
-   always be right for 2.6 kernels.)  Restructured the code to read and parse
-   /proc/self/maps so it only exists in one place (all platforms).
- - The -DUSE_PROC_FOR_LIBRARIES code was broken on Linux.  It claimed that it
-   also registered the main data segment, but didn't actually do so.  (I don't
-   think anyone actually uses this configuration, but ...)
- - Made another attempt to get --enablecplusplus to do the right thing.
-   Since there are unavoidable problems with C programs linking against a
-   dynamic library that includes C++ code, I separated out the c++ code into
-   libgccpp.
-
-Since 6.2alpha5:
- - There was an extra underscore in the name of GC_save_registers_in_stack
-   for NetBSD/SPARC.  (Thanks to Jaap Boender for the patch.)
- - Integrated Brian Alliet's patch for Darwin.  This restructured the
-   linuxthreads/pthreads support to separate generic pthreads support
-   from more the system-dependent thread-stopping code.  I believe this
-   should make it easier to eliminate the code duplication between
-   pthreads platforms in the future.  The patch included some other
-   code cleanups.
- - Integrated Dan Bonachea's patch to support AIX threads.  This required
-   substantial manual integration, mostly due to conflicts with other
-   recent threads changes.  It may take another iteration to
-   get it to work.
- - Removed HPUX/PA-RISC support from aix_irix_threads.c.  It wasn't used
-   anyway and it cluttered up the code.  And anything we can do to migrate
-   towards generic pthreads support is a good thing.
- - Added a more explicit test for tracing of function arguments to test.c.
-   (Thanks to Dan Grayson.)
- - Added Akira Tagoh's PowerPC64 patch.
- - Fixed some bit rot in the Cygwin port.  (Thanks to Dan Bonachea for
-   pointing it out.)  Gc.h now includes just windows.h, not winbase.h.
- - Declared GC_save_regs_in_stack() in gc_priv.h.  Remove other declarations.
- - Changed --enable-cplusplus to use automake consitionals.  The old way
-   confused libtool.  "Make install" didn't work correctly for the old version.
-   Previously --enable-cplusplus was broken on cygwin.
- - Changed the C version of GC_push_regs to fail at compile time if it is
-   generated with an empty body.  This seems to have been the cause of one
-   or two subtle failures on unusual platforms.  Those failures should
-   now occur at build time and be easily fixable.
-
-Since 6.2alpha6:
- - Integrated a second round of Irix/AIX patches from Dan Bonachea.
-   Renamed mips_sgi_mach_dep.S back to mips_sgi_mach_dep.s, since it requires
-   the Irix assembler to do the C preprocessing; gcc -E doesn't work.
- - Fixed Makefile.direct for DARWIN.  (Thanks to Manuel Serrano.)
- - There was a race between GC_pthread_detach and thread exit that could
-   result in a thread structure being deallocated by GC_pthread_detach
-   eventhough it was still needed by the thread exit code.  (Thanks to
-   Dick Porter for the small test case that allowed this to be debugged.)
- - Fixed version parsing for non-alpha versions in acinclude.m4 and
-   version checking in version.h.
-
-Since 6.2:
- - Integrated some NetBSD patches forwarded to me by Marc Recht.  These
-   were already in the NetBSD package.
- - GC_pthread_create waited for the semaphore even if pthread_create failed.
-   Thanks to Dick Porter for the pthread_support.c patch.  Applied the
-   analogous fix for aix_irix_threads.c.
- - Added Rainer Orth's Tru64 fixes.
- - The check for exceeding the thread table size in win32 threadDetach
-   was incorrect.  (Thanks to Alexandr Petrosian for the patch.)
- - Applied Andrew Begel's patch to correct some reentrancy issues
-   with dynamic loading on Darwin.
- - GC_CreateThread() was neglecting to duplicate the thread handle in
-   the table.  (Thanks to Tum Nguyen for the patch.)
- - Pass +ESdbgasm only on PA-RISC machines with vendor compiler.
-   (Thanks to Roger Sayle for the patch.)
- - Applied more AIX threads patches from Scott Ananian.
-
-Since 6.3alpha1:
- - Reenabled I_HOLD_LOCK assertion in aix_irix_threads.h.
- - Put back the WINABI qualifier for GC_CreateThread.  (Thanks to
-   Danny Smith for the patch.  6.3alpha1 had the qualifier in one place
-   but not elsewhere, which was clearly wrong.)
- - Sometimes explicitly define __private_extern__ before DARWIN dyld.h
-   include.  (Thanks to Andreas Tobker for postting the patch.)
- - Included signal.h from pthread_support.c.  Removed GC_looping_handler,
-   which was dead code.
- - GC_find_start was misdeclared by gc_pmark.h if PRINT_BLACK_LIST was
-   defined.  (Thanks to Glauco Masotti for testing and reporting this.)
-   Changed GC_find_start to never just return 0.  According to its
-   comment it doesn't, and it's unclear that's correct.
- - GC_alloc_large had several largely compensating bugs in the
-   computation of GC_words_wasted.  (It was confused about bytes vs.
-   words in two places.)
- - Integrated Slava Sysoltev's patch to support more recent versions of
-   the Intel compiler on IA64/Linux.
- - Changed win32 spinlock initialization to conditionally set a spin count.
-   (Emmanual Stumpf pointed out that enabling this makes a large performance
-   difference on win32 multiprocessors.)  Also cleaned up the win32 spinlock
-   initialization code a bit.
- - Fixed thread support for HP/UX/IA64.  The register backing store base for
-   the main thread was sometimes not set correctly.  (Thanks to Laurent
-   Morichetti.)
- - Added -DEMPTY_GETENV_RESULTS flag to work around Wine problem.
- - Declare GC_stack_alloc and GC_stack_free in solaris_threads.h to
-   avoid 64-bit size mismatches.  (Thanks to Bernie Solomon.)
- - Fixed GC_generic_push_regs to avoid a potential and very unfortunate
-   tail call optimization.  This could lead to prematurely reclaimed
-   objects on configurations that used the generic routine and the new
-   build infrastructure (which potentially optimizes mach_dep.c).
-   This was a serious bug, but it's unclear whether it has resulted in
-   any real failures.
- - Fixed CORD_str to deal with signed characters.  (Thanks to Alexandr
-   Petrosian for noticing the problem and supplying the patch.)
- - Merged a couple of NOSYS/ECOS tests into os_dep.c from gcj.  (Thanks
-   to Anthony Green.)
- - Partially merged a win32 patch from Ben Hutchings, and substantially
-   revised other parts of win32_threads.c.  It had several problems.
-   Under MinGW with a statically linked library, the main thread was
-   not registered.  Cygwin detached threads leaked thread descriptors.
-   There were several race conditions.  For now, unfortunately the
-   static threads limit remains, though we increased it, and made table
-   traversal cost depend on the actual thread count.
-   There is also still some code duplication with pthread_support.c.
-   (Thread descriptors did become much smaller, since Ben Hutchings
-   removed the thread context from them.)
- - Integrated a Solaris configure.in patch from Rainer Orth.
- - Added GC_IGNORE_FB and associated warning to very partially address
-   the issue of the collector treating a mapped frame buffer as part
-   of the root set.  (Thanks to David Peroutka for providing some
-   insight.  More would be helpful.  Is there anything that can be used
-   to at least partially identify such memory segments?)
-
-Since 6.3alpha2:
- - Removed -DSMALL_CONFIG from BCC_MAKEFILE.
- - Changed macros to test for an ARM processor (Patch from Richard Earnshaw.)
- - Mostly applied a DJGPP patch from Doug Kaufman.  Especially Makefile.dj
-   had suffered from serious bit rot.
- - Rewrote GC_apply_to_maps, eliminating an off-by-one subscript error,
-   and a call to alloca (for lcc compatibility).
- - Changed USE_MUNMAP behavior on posixy platforms to immediately remap
-   the memory with PROT_NONE instead of unmapping it.  The latter risks
-   an intervening mmap grabbing the address space out from underneath us.
-   Updated this code to reflect a cleaner patch from Ulrich Drepper.
- - Replaced _T with _Tp in new_gc_alloc.h to avoid a MACOS X conflict.
-   (Patch from Andrew Begel.)
- - Dynamically choose whether or not lock should spin on win32.  (Thanks
-   to Maurizio Vairani for the patch.)  This may be a significant performance
-   improvement for win32.
- - Fix Makefile.direct to actually include NT_STATIC_THREADS_MAKEFILE
-   in the distribution.  (Again thanks to Maurizio Vairani.)
- - Maybe_install_looping_handler() was accidentally exported, violating
-   our name space convention.
- - Made os_dep.c use sigsetjmp and SA_NODEFER for NetBSD.  (Thanks to
-   Christian Limpach.)  (I generalized the patch to use sigsetjmp on all
-   UNIX_LIKE platforms, admittedly a slightly risky move.  But it may avoid
-   similar problems on some other platforms. I also cleaned up the defn
-   of UNIX_LIKE a bit. - Hans)
- - Integrated Andrew Begel's Darwin threads patch, adjusted according to
-   some of Fergus Hendersons's comments.  (Patch didn't apply cleanly,
-   errors are possible.)
- - Added another test or two for the Intel 8.0 compiler to avoid
-   confusing it with gcc.  The single-threaded collector should now build
-   with icc, at least on ia64.
-
-Since 6.3alpha3:
- - USE_MMAP was broken by confusion in the code dealing with USE_MMAP_ANON.
-   (This was pointed out, and fixes were suggested by several other people.)
- - Darwin supprt was broken in alpha3 as a result of my misintegration of
-   Andrew Begel's patches.  Fixed with another patch from Andrew Begel.
- - A new sanity check in pthread_stop_world.c:GC_push_all_stacks() was
-   overly aggressive.  We may collect from an unregistered thread during
-   thread creation.  Fixed by explicitly checking for that case.  (Added
-   GC_in_thread_creation.)
-
-Since 6.3alpha4:
- - Fix & vs && typo in GC_generic_malloc and
-   GC_generic_malloc_ignore_off_page.  (Propagated from the gcc tree.)
- - Removed SA_NODEFER hack from NetBSD and Solaris write-protect handler.
-   (According to Christian Limpach, the NetBSD problem is fixed.
-   Presumably so is the Solaris 2.3 problem.)
- - Removed placement delete from gc_cpp.h for the SGI compiler.
-   (Thanks to Simon Gornall for the patch.)
- - Changed semantics of the GC_IGNORE_FB environment variable, based
-   on experimentation by Nicolas Cannasse pointing out that the old
-   interpretation was useless.  We still need help in identifying win32
-   graphics memory mappings.  The current "solution" is a hack.
- - Removed "MAKEOVERRIDES =" from Makefile.am and thus Makefile.in.
-   It probably made more sense in the gcc context.
- - Explicitly ensure that NEED_FIND_LIMIT is defined for {Open,Net}BSD/ELF.
- - Replaced USE_HPUX_TLS macro by USE_COMPILER_TLS, since gcc often
-   supports the same extension on various platforms.
- - Added some basic (completely untested) defines for win64, in support
-   of future work.
- - Declared GC_jmp_buf in os_dep.s as JMP_BUF instead of jmp_buf, fixing
-   a memory overwrite bug on Solaris and perhaps other platforms.
- - Added 0 != __libc_stack_end test to GC_linux_stack_base.  (Thanks to Jakub
-   Jelinek, both for the patch, and for explaining the problem to me.)
-   Otherwise "prelink"ing could cause the collector to fail.
- - Changed default thread local storage implementation to USE_PTHREAD_SPECIFIC
-   for HP/UX with gcc.  The compiler-based implementation appears to work
-   only with the vendor compiler.
- - Export GC_debug_header_size and GC_USR_PTR_FROM_BASE from gc_mark.h,
-   making client mark code cleaner and less dependent on GC version.
- - Export several new procedures and GC_generic_malloc from gc_mark.h
-   to support user-defined kinds.  Use the new procedures to replace existing
-   code in gcj_mlc.c and typd_mlc.c.
- - Added support for GC_BACKTRACES.
- - Fixed a remaining problem in CORD_str with signed characters.  (Thanks
-   to Alexandr Petrosian for the patch.)
- - Removed supposedly redundant, but very buggy, definitions of finalizer
-   macros from javaxfc.h.  Fortunately this file probably has no users.
-   The correct declarations were already in gc.h.
- - Also need to set GC_in_thread_creation while waiting for GC during
-   thread termination, since it is also possible to collect from an
-   unregistered thread in that case.
- - Define NO_GETENV for Windows CE, since getenv doesn't appear to exist.
-   + some other minor WinCE fixes. (Thanks to Alain Novak.)
- - Added GC_register_describe_type_fn.
- - Arrange for debugging finalizer registration to ignore non-heap
-   registrations, since the regular version of the routine also behaves
-   that way.
- - GC_gcj_malloc and friends need to check for finalizers waiting to be run.
-   One of the more obscure allocation routines with missing a LOCK() call.
- - Fixed cvtres invocations in NT_MAKEFILE and NT_STATIC_THREADS_MAKEFILE
-   to work with VS.NET.
- - Cleaned up GC_INIT calls in test.  Updated gc.man to encourage GC_INIT
-   use in portable code.
- - Taught the GC to use libunwind if --enable-full-debug is specified on
-   IA64 and libunwind is present.
- - The USE_MUNMAP code could get confused about the age of a block and
-   prematurely unmap it.  GC_unmap_old had a bug related to wrapping of
-   GC_gc_no.  GC_freehblk and GC_merge_unmapped didn't maintain
-   hb_last_reclaimed reasonably when blocks were merged.  The code was
-   fixed to reflect original intent, but that may not always be an
-   improvement.  See todo list item.
-
-Since 6.3alpha5:
- - Define USE_GENERIC_PUSH_REGS for NetBSD/M68K.
- - Fixed the X86_64 PREFETCH macros to correctly handle ia32e (which uses
-   different prefetch instructions from AMD64).  (Thanks to H.J. Lu.)
- - GC_config_macros.h did not correctly define GC_WIN32_THREADS from
-   GC_THREADS.
- - Added simple_example.html.
- - Merged Andrew Gray's patch to correctly restore signal handlers on
-   FreeBSD.
- - Merged a patch from Andreas Jaeger to deal with prefetch-related warnings
-   on x86-64.  Added some other casts so that the PREFETCH macros
-   always get a ptr_t argument.  Removed some casts inthe PREFETCH
-   implementations.
- - At Jesse Jones suggestion: Added a header guard for gc_allocator.h
-   and changed GC_debug_free to clobber contents of deallocated object.
- - The signal masking code in pthread_stop_world.c contained some errors.
-   In particular SIGSEGV was masked in the handler, in spite of the fact that
-   it wrote to the heap.  This could lead to an uncaught SIGSEGV, which
-   apparently became much more likely in Linux 2.6.  Also fixed some
-   typos, and reduced code duplication in the same area.
- - Remove ltconfig, clean up configure messages for DGUX (thanks to
-   Adrian Bunk for the patches).
- - Integrated NetBSD/OpenBSD patches from Marc Recht and Matthias Drochner.
-
-Since 6.3alpha6:
- - Compile test_cpp.cc with CXXCOMPILE instead of COMPILE.
- - Very large allocations could cause a collector hang.  Correct
-   calculation of GC_collect_at_heapsize.
- - GC_print_hblkfreelist printed some bogus results if USE_MUNMAP
-   was defined.
- - Include gc_config_macros.h in threadlibs.c.
- - Correct MacOSX thread stop code. (Thanks to Dick Porter.)
- - SMALL_OBJ definition was off by one.  This could cause crashes
-   at startup.  (Thanks to Zoltan Varga for narrowing this down to
-   a trivial test case.)
- - Integrate Paolo Molara's patch to deal with a race in the Darwin
-   thread stopping code.
- - Changed X86_64 implementation to use SA_SIGINFO in the MPROTECT_VDB
-   implementation.  The old approach appears to have been broken by
-   recent kernels.
- - Added GC_ATTR_UNUSED to eliminate a warning in gc_allocator.h (Thanks
-   to Andrew Begel.)
- - Fix GC_task_self declaration in os_dep.c.  (Thanks to Andrew Pinski.)
- - Increase INITIAL_BUF_SZ in os_dep.c for Solaris /proc reads.
-
-Since gc6.3:
- - Merge gcconfig.h changes from gcc tree.
- - Unconditionally include gc_priv.h in solaris_pthreads.c, win32_threads.h,
-   aix_irix_threads.c, and solaris_threads.c to get thread definitions.
- - Start marker threads in GC_thr_init, so that they get started even
-   if no other threads are ever started.  (Oddly enough, the parallel
-   collector worked correctly, though not well, with no helper threads.)
- - Go ahead and split large blocks in GC_allochblk_nth if GC_dont_gc
-   is set.  (Thanks to Alexander Petrossian.)
- - GC_PRINT_BACK_HEIGHT would deadlock with thread support.
- - Let in_progress_space in backgraph.s grow dynamically.
- - Fix README.solaris2.  The GC_thr_init() hack doesn't work anymore.
- - Convert GC_finalizer_mem_freed to bytes in allchblk.c.
- - Add missing declaration for GC_generic_malloc_words_small_inner.
-   Without it, s390x breaks.  (Thanks to Ulrich Weigand.)
- - Applied several MacOSX patches to support older tool chains.
-   (Thanks to Stefan Ring.)
- - Bug fix for NetBSD/amd64.  (Thanks to Marc Recht.)  Add NetBSD/sh3
-   support.  (Thanks to Uchiyama Yasushi.)
- - Fixed an uninitialized variable in cordprnt.c.  (Thanks to gcc for
-   providing the warning.)
- - Eliminated some, but not all, gcc -Wall warnings.
- - Changed some old style casts to reinterpret_cast in new_gc_alloc.h.
-   (Thanks to Dan Grayson.)
- - GC_extend_size_map shouldn't adjust for GC_all_interior_pointers if
-   GC_DONT_ADD_BYTE_AT_END is set.
- - Changed some (long) casts to (word) in preparation for win64.
-   (Thanks to Peter Colson.)
- - Changed "int stack_size" declaration in pthread_support.c to use
-   size_t.  (Only mattered with GC_ASSERTIONS enabled.)
- - Added CRIS (etrax) support.  (Thanks to Simon Posnjak and
-   Hans-Peter Nilsson.)
- - Removed GC_IGNORE_FB frame buffer recognition, and replaced
-   it with a check that the mapping type is MEM_IMAGE.
-   In theory, this should work much better, but it is a high
-   risk change for win32.  (Thanks to Ashley Bone for the crucial
-   experimental data behind this, and to Rutger Ovidus for
-   some further experiments.)
- - GC_allochblk_nth incremented GC_words_wasted by bytes rather than
-   words.
- - Consider GC_words_wasted in GC_adj_words_allocd only if it is within
-   reason.  (A hack to avoid some extremely unlikely scenarios in which
-   we manage to allocate only "wasted" space.  7.0 has a better fix.)
- - Changed PowerPC GC_clear implementation to use lwsync instead of
-   eieio, since the documentation recommends against eieio, and
-   it seems to be incorrect if the preceding memory op is a load.
- - Fixed print_block_list to print the correct kind number for
-   STUBBORN.  (Thanks to Rutger Ovidus.)
- - Have configure.in generate an error if it is asked to support
-   pthreads, but doesn't know how to.
- - Added Kazuhiro Inaoka's patch for Renesas M32R support.
- - Have the GNU build mechanism link with -ldl.  Rename THREADLIBS
-   to THREADDLLIBS to reflect this.  (Thanks to Sven Verdoolaege.)
- - Added Hannes Mehnert's patch for FreeBSD/SPARC support.
- - Merged some FreeBSD specific patches to threadlibs.c and dyn_load.c.
-   (Thanks tp John Merryweather Cooper.)
- - Define MPROTECT_VDB on MACOSX only if threads are being used, since the
-   dirty page tracking mechanism uses threads.  (This avoids an undefined
-   reference to _GC_darwin_register_mach_handler_thread.)
- - By popular demand, use __libc symbols only if we are built with
-   USE_LIBC_PRIVATES, which is off by default, and not otherwise documented.
- - Ignore GC_enable_incremental() requests when KEEP_BACK_PTRS is set.
-   The GC itself will dirty lots of pages in this cases, probably making
-   it counterproductive on all platforms.  And the DARWIN port crashes.
-
-Since gc6.4:
- - Integrated Paolo Molaro's patch to deal with EINTR in sem_wait.
- - Make GC_approx_sp() write to dummy location to ensure that stack
-   is grown here, when sp looks reasonable, rather than later, when
-   it might look like a bad memory reference.  (Problem was never
-   observed that I know of.  But on rereading the code it seemed
-   dubious.)
- - Separate out GC_with_callee_saves_pushed and sometimes call
-   it from GC_suspend_handler in pthread_stop_world.c.  Callee-save
-   register values sometimes failed to get traced under HP/UX on
-   PA-RISC.  Linux/IA64 had the same problem, though non-stacked
-   callee-save registers seem to be so rarely used there that nobody
-   ever noticed.
- - Integrated an ancient Darwin powerpc_darwin_machine_dep.s patch
-   from Andreas Tobler, which I had lost.
- - Fix compare_and_exchange implementation for gcc/IA64 to deal with
-   pickier compiler versions.
- - Fixed Itanium 32-bit ABI support (HP/UX).  In particular, the
-   compare_and_exchange implementation didn't consider that possibility.
- - Undefine GC_pthread_detach in win32_threads.c.  (Thanks to
-   Tagliapietra Tommaso.)
- - Fixed inclusion of frame.h for NETBSD in os_dep.c.
- - Applied Dan Bonachea's patch to use mmap on AIX.
- - Several fixes to resurrect the Irix port on recent OS versions.
- - Change ALPHA to use LINUX_STACKBOTTOM.
- - Change SPARC64/LINUX to also use LINUX_STACKBOTTOM.  Deal with potential
-   bad values of __libc_stack_end on that platform.  (Thanks to David Miller.)
- - Relax gctest to allow larger heap if ALIGN_DOUBLE isn't set.
-   (Unnecessary in 7.0)
- - Force a define of __STDC__=0 for the IBM compiler on AIX, so that
-   we get prototypes.  (Unnecessary in 7.0)
- - GC_INIT definition for AIX and CYGWIN referred to DATASTART and DATAEND
-   which are only defined in private include files.
- - Integrated some small gcconfig.h patches from Dan Bonachea.  Also
-   relaxed assertion about FreeBSD stack size in pthread_support.c.
- - Integrated Andrew Begel's darwin_stop_world.c patch for 64-bit
-   support.  This may need additional work.
- - Avoided potentially infinite recursion in GC_save_callers if
-   the system backtrace calls malloc.  The workaround currently requires
-   __thread support if this code is used with threads.
- - Avoided another similar infinite recursion by conditionally
-   invoking GC_save_callers in alloc.c.  (Thanks to Matthias Andree
-   for helping to track down both of these.)
- - Removed all traces of aix_irix_threads.c.  AIX and Irix now use
-   pthread_support.c and pthread_stop_world.c.  The old code appeared
-   to be unreliable for AIX, and was not regularly maintained.
- - On Irix, ignore segments with MA_FETCHOP or MA_NOTCACHED attributed;
-   they're not always safe to read.
- - Fixed a previously vacuous assertion (diagnosed by the SGI compiler)
-   in GC_remove_from_fl.
- - Fix stack_size assertion in GC_pthread_create.
- - Fix assertion in GC_steal_mark_stack.
-
-Since gc6.5:
- - Fix CPU count detection for Irix and FreeBSD. (Thanks to Dan Bonachea.)
- - Integrate Dan Bonachea's patch for the IBM XLC compiler on Darwin.
- - Integrated Andreas Tobler's FreeBSD/PowerPC patch.
- - Don't access the GC thread structure from the restart handler.  It's
-   unsafe, since the handler may run too late.  (Thanks to Ben Maurer for
-   tracking this down.)
- - Applied Christian Thalinger's patch to change comment syntax in
-   alpha_mach_dep.S.
- - Added test for GC_no_dls in GC_dyld_image_add for DARWIN. (Thanks to
-   Juan Jose Garcia Ripoli).
- - Use LINUX_STACKBOTTOM for Linux/SH and LINUX/ARM. (Thanks to Sugioka
-   Toshinobu and Christian Thalinger.)
- - Rewrote GC_parse_map_entry.  This assumed a fixed column layout of
-   /proc/self/maps on Linux.  This ceased to be true about 2 years ago.
-   The old code is probably quite problemetic with -DREDIRECT_MALLOC.  It
-   is also used by default for IA64, though I haven't seen actual failures
-   there.
- - More consistently define HBLKSIZE to 4096 on 64 bit architectures with
-   4K pages.  (Thanks to Andrew Haley.)
- - With win32 threads, GC_stop_world needs to acquire GC_write_cs.  (Thanks
-   to Ben Hutchings for the observation and patch.)
- - Move up struct callinfo declaration to make gcc 4.0.2. happy.
-
-Since 6.6:
- - Add "int" to Solaris "end" and "etext" declaration in gc.h.  Declared
-   the symbols with underscores and as arrays, since that's what's actually
-   used.  Perhaps this could all just be removed?  (Thanks to John Bowman.)
- - Fixed ARM GC_test_and_set code.  (Thanks to Kazu Hirata and Paul Brook.)
- - Added casts for assignments to hb_last_reclaimed, which truncate the
-   value.  Added a cast to GC_adj_words_allocd.  Use GetModuleHandleA
-   when retrieving a handle to kernel32.dll under win32.  (Thanks to the
-   Visual Prolog developers.)
- - Added Tandem S-Series support.  (Thanks to Craig McDaniel.  A modified
-   version of his patch was applied, and hence breakage is probably not
-   his fault.)
- - Remove spurious gc:: qualifier for operator delete[] in gc_cpp.h.
-   (Thanks to Hanno Boeck.)
- - Changed a test for LINUX in config_macros.h to one for __linux__.
- - Add prototypes for GC_finalizer_notifier and GC_thr_init.  (Thanks to
-   David Ayers.)
- - Use ld instead of nonexitent ldz instruction in Darwin FindTopOfStack.
-   (Thanks to Andreas Tobler.)
- - Add support for Darwin/X86.  (Thanks to Geoff Norton and the Mono
-   developers.)
- - Merge in some recent gcc fixes.  Add ppc64 asm code.  (Thanks to Bryce
-   McKinley and other gcj developers.)
- - Scan MEM_PRIVATE sections under Windows ME and predecessors.
- - Interior pointers with some largish offsets into large objects could
-   be ignored, if GC_all_interior_pointers was set.  (Oddly this worked
-   correctly for stack references if it was not set.  Otherwise it failed
-   for both stack and heap references.)  Thanks to Andrew McKinlay for the
-   critical test case.
- - Integrated Tatsuya Bizenn's NETBSD threads support, with some
-   untested changes.
- - Added GC_strdup and friends to make leak detection work correctly
-   for strdup clients.  (Thanks to Jon Moore.)  Fixed the existing strdup
-   with malloc redirection to handle a null malloc return correctly.
-
-Since gc6.7:
- - Added some support for Dragonfly BSD.  (Thanks to Joerg Sonnenberger and
-   Thomas Klausner.)
- - Improvements to the HP/UX section of configure.in/configure.ac.
-   (Thanks to Andreas Tobler)
- - GC_unix_get_mem could neglect to release the malloc lock on Irix, under
-   extremely unlikely circumstances.  Thanks to Jean-Baptiste Nivois for
-   some careful code reading.
- - Added support for kFreeBSD + glibc (Thanks to Petr Salinger)
- - Fix more MacOS threads memory leaks (Thanks to Allan Hsu)
- - Added initial Solaris/X86-64 support (Thanks to Rainer Orth)
-
-Since gc6.8:
- - Fix typo in PREFETCH implementation for X86_64.  (Thanks to Peter Wang.)
- - Fix M68K LINUX port. (Thanks to Debian packagers.)
- - __GNUC__ was misspelled as __GNUC in new_gc_alloc.h. (Thanks to Peter Wang.)
- - Integrated Allan Hsu's patch for OS X VM deallocation problems.
- - Applied FreeBSD/X86_64 patch.
-
-Since gc6.9:
- - Remove GC_PROTO, VOLATILE, GC_PTR, and GC_CONST.  Assume ANSI C compiler
-   and use ANSI constructs unconditionally.
- - Introduce #elif and #error in some of the appropriate places.
- - Remove GC_printf cruft. Use stdargs.
- - Remove separate Solaris threads support.  Use the more generic Posix
-   implementation.
- - Use atomic_ops for atomic operations and memory barriers.
- - Clean up MPROTECT_VDB implementation.  Use SA_SIGINFO wherever
-   possible.
- - Remove broken SIGNALS stuff.
- - Use size_t instead of word, where appropriate.
- - Add .S.o rule to Makefile.am.
- - Officially unsupport SunOS4, several old flavors of M68K (SunOS4,
-   A/UX, HP), IBM PC/RTs and RISCOS/Irix4.  (I doubt the old code worked.
-   If anyone cares, these should be easy to resurrect.)
- - Add EXPECT() in some critical places.
- - Redefined hb_sz and hb_body to deal with bytes rather than words.
-   This affected a great deal of code.  I would like to consistently use
-   byte offsets and sizes where there's not a convincing reason to do
-   otherwise.
- - Redefined several other variables (GC_mem_found, GC_words_allocd)
-   etc. to use units of bytes.  Most of these were also renamed to
-   reflect that fact.
- - Killed as many "register" declarations as possible.
- - Partially replaced stubborn allocation with manual write barrier.
-   It's currently broken.
- - Restructured mark code, to allow mark bits to be kept either on
-   a per allocation granule or per object basis.  The emphasis is
-   now on the -DUSE_MARK_BYTES option, since individual bits perform
-   quite badly on hyperthreaded P4s, and are probably suboptimal on
-   other architectures.  -DUSE_MARK_BITS is currently broken, and may
-   be resurrected only for the single-threaded case.  This significantly
-   reduced the cache footprint required by auxiliary GC data structures.
-   It also reduces space overhead for small heaps.  It probably slows
-   things down slightly if interior pointers are very common.
- - As part of the above, we now maintain an approximate count of set
-   mark bits in each heap block.
- - As part of the above, the semantics of hb_map changed drastically.
-   For MARK_BIT_PER_OBJ, it doesn't exist.  For MARK_BIT_PER_GRANULE,
-   it is purely a way to replace a mod instruction with a table lookup.
-   (Somewhat to my surprise, this still wins on modern hardware.)
- - Removed PRINTSTATS, GATHERSTATS, and SILENT macros.  Everything is
-   now controlled by GC_print_stats variable and GC_PRINT_STATS
-   and new GC_PRINT_VERBOSE_STATS environment variables.
- - Add GC_log_printf and use it consistently for logging output.
- - Unconditionally count the objects we reclaim in the sweep phase.
-   For thread local allocation, we need that anyway, and we expect
-   that's increasingly the only case that matters.  And it simplifies
-   the code.  In general expect minor performance hacks that benefit
-   only the single-threaded case to disappear.
- - Remove GC_quiet from gc.h and elsewhere.
- - Changed the heap expansion heuristic, and the definition of
-   GC_free_space_divisor, to refer to live data size, instead of total
-   heap size.  I believe this is much more robust.  It wasn't previously
-   possible, because we didn't have access to live data size.
- - Thread local allocation added the extra byte in twice: Once in
-   thread_local_alloc, and once in malloc_many.
- - Removed GC_malloc_words_small and GC_gcj_fast_malloc.  A new
-   mechanism based on the thread local allocation data structures
-   is expected to be added instead.  This should allow inlined code
-   that is both fast and doesn't rely on collector internals.
- - Changed both free lists and reclaim lists to be indexed by granules
-   instead of words, norming halving their size.
- - MERGE_SIZE is now the only option, and the macro was removed.
-   (Without it, we need a memory reference to GC_all_interior_pointers
-   anyway.  Thus it costs us nothing.)
- - Change GC_size_map to map to granules instead of words.  Make sure
-   that every possible size up to TINY_FREELISTS is present.
- - Split of macros need for fast inline allocation into gc_tiny_fl.h
-   in anticipation of a new inline allocator that doesn't rely on GC
-   internals.
- - Changed thread local allocation to use GRANULE_BYTES and TINY_FREELISTS
-   in anticipation of a merge with the inline allocation code.
- - Removed ALIGN_DOUBLE.  This is mostly handled by GRANULE_BYTES.
- - Make locking on most platforms conditional on GC_need_to_lock.
-
-Since gc7.0alpha1:
- - GC_bytes_allocd was incremented by a possibly uninitialized variable
-   in GC_generic_malloc_inner.  (Bug introduced in gc7.0alpha1.  Thanks
-   to Ben Hutchings for tracking it down.)
- - Win32 fixes.  (Thanks to Ben Hutchings and Maurizio Vairani.)
- - Integrated Ben Hutchings' GetWriteWatch-based virtual dirty bit
-   implementation for win32.
- - Removed pc_gc.tar and floppy targets in Makefile.direct.  Removed
-   pc_excludes file.
- - No longer include GC_bytes_wasted when evaluating allocation progress.
-   Since we are now counting live memory, it no longer makes sense.
- - Applied Davide Angelocola's configury patch.  There are now separate
-   Makefile.am's in the cord and tests subdirectory, more tests, etc.
- - Renamed configure.in to configure.ac.
- - Merged a very small number of Nathanael Nerode's configure.ac
-   cleanups from the gcc tree.  Unfortunately, that file is a bit
-   different from ours.
- - Changed EINTR handling in sem_wait slightly.
- - Restructure the root marking code.  Remove all traces of
-   USE_GENERIC_PUSH_REGS, and effectively make it the default.
-   Make it easier to pass a context pointer to the mark routine, in
-   case we ever want to do precise stack marking.
- - Replace GC_start_blocking() and GC_end_blocking() with GC_do_blocking().
-   This remains undocumented, and only implemented for pthreads.  But it
-   removes an otherwise unavoidable race with stores of callee-save
-   registers.
- - Fix GC_n_mark_bits for the default MARK_BIT_PER_GRANULE case.  This
-   resulted in bogus complaints in heap dumps.
- - Upgrade to libatomic_ops-1.0, and update build structure to match.
- - Remove SRC_M3 support. Clean up lock initialization code in misc.c.
- - Removed gc_local_alloc.h.  If THREAD_LOCAL_ALLOC is defined, the
-   thread local allocation routines are now called automatically.
- - Renamed gc_inl.h back to gc_inline.h.  Changed the interface appreciably
-   since locking has turned into a dominant issue, and in-line allocation
-   only makes sense if it's no worse than thread-local allocation.
-   Gc_inline.h is now also used to implement thread-local allocation.
- - Finished replacing stubborn allocation with manual write barrier.
-   Untested.
- - Use thread-local allocation code by default.
- - Added GC_register_my_thread and friends for Posix and win32.
- - Patch for GWW_VDB from Ben Hutchings.
- - Removed explicit THREAD_LOCAL_ALLOC tests, since that now always
-   redefines GC_malloc.
- - Removed now unused AIX memory allocation code.
- - Various minor fixes for bugs introduced in 7.0alpha1.
-
-Since gc7.0alpha2:
- - Added support for dlopen-based interception of pthread functions.
-   This is only half done.  The gc.h redefinitions currently interfere.
- - Integrated major automake overhaul from Petter Urkedal.
-
-Since gc7.0alpha3:
-   (various 6.5, 6.6 changes)
- - Removed GC_brief_async_signal_safe_sleep and used atomic_ops instead.
-   (Thanks to Ben Maurer.)
- - Integrated build patches from David Angelocola and Petter Urkedal.
- - Fix dynamic-linker-based pthread call redirection.
- - Renamed RS6000 to POWERPC/AIX.
- - Allow recovery from SIGSEGV in marker on Linux.  This works around
-   a race in thread stack marking if /proc is used to find roots.  We do
-   that by default with malloc redirection and threads.  This involved
-   moving some GC_find_limit and SETJMP related declarations to gc_priv.h.
- - Added doc/porting.html file.
- - Added ADD_HEAP_GUARD_PAGES for sbrk/*nix platforms to debug extreme
-   memory overwrite errors.
- - Added trivial NO_INCREMENTAL flag to facilitate debugging.
- - Added GC_getattr_np-based GC_get_stack_base (untested).
- - Separated thread local allocation into a separate file and added the
-   beginning of win32 support for that.
-
-Since gc7.0alpha4:
-   (more 6.6, 6.7 changes)
- - Some Solaris fixes, including some more general changes in how
-   the assembly pieces of mach_dep.c are handled.
- - Removed a lot of SOLARIS_THREADS-specific code that was only
-   needed with the old implementation.  This included many (mostly no-op)
-   versions of GC_is_fresh.
- - Don't use atomic_ops in gc_locks.h unless we need threads.
- - Fixed USE_MARK_BITS, which is once againthe default without PARALLEL_MARK.
- - Removed Solaris GC_INIT hack.  It's a workaround for a long dead bug,
-   and it seemed to be wrong anyway.
- - Changed win32_threads.c to require preprocessor-based interception
-   of thread routines by default.  A client call to GC_use_DllMain is
-   now required to get the old behavior in which DllMain is used to implicitly
-   register threads.  This was doen for uniformity with other platforms, and
-   because the DllMain solution seemed to require very tricky code which,
-   at least in the past, imposed hard bounds onthe number of threads.
- - Many small changes to make thread support work again on Cygwin.
- - Moved definition of allocator lock etc. to pthread_support.c and
-   win32_threads.c for those two cases.
- - Got rid of the FASTLOCK() machinery.  It doesn't seem useful on modern
-   platforms.
- - Cleaned up the uncollectable allocation routines, speeding up the
-   slower paths.  The code did enough unnecessary work off the critical path
-   that the underlying logic was getting hard to extract.
- - No longer turn off THREAD_LOCAL_ALLOC with DBG_HDRS_ALL.  Indications
-   are it just works, and I think the reasons for it not working disappeared
-   a while ago.
- - Fixed bugs in hb_n_marks calculation and assertion.
- - Don't use __builtin_expect for pre-3.0 gcc.
- - Define GWW_VDB only for recent Microsoft tool chains.
- - Add overview.html to doc directory.
- - Fix NT_STATIC_THREADS_MAKEFILE, various compiler warnings.
- - Made thread local allocation sort of work with Cygwin.  The code should
-   be there to deal with other Windows variants, But non-Cygwin Windows
-   threads need more bug fixes.
-
-Since gc7.0alpha5:
-   (more 6.7 changes)
- - Declare GC_dump() in gc.h.
- - Add --enable-large-config, which just defines the LARGE_CONFIG macro.
- - Make GlobalAlloc address alignment a bit more intuitive.  (Thanks to
-   Charles Mills.)
- - Use #elif in the definitions of GET_MEM.
- - Overhaul porting.html.  Remove corresponding text from README.
- - Fix typo in DARWIN section of gcconfig.h.
- - Fix Darwin thread memory leak.  (Thanks to Bruce Mitchener.)
- - Update x86 AO_test_and_set implementation to use "=q".
- - Add $(EXEEXT) to many tests in tests/tests.am.  (Corresponds to a
-   6.7 fix, which no longer applied.)
- - Fix Darwin/PPC port.
- - Fix Cygwin/threads port.
- - Fix gcj malloc support.
- - For GNU-style make, don't build libatomic_ops unless threads are requested.
-   This should allow single-threaded builds on platforms which do not
-   currently support libatomic_ops.
- - Clean up and hopefully fix the CFLAGS calculation for GNU build.
-   (Substantially improves things on HP/UX.)
- - Integrated Andrei Polushin's Visual C++ patches.  These provide for
-   stack traces, better C++ debug support, and better log file handling.
-   Note that these change the location of the log file to a the path of the
-   executable with a .log extension.  To get the old behavior back, define
-   OLD_WIN32_LOG_FILE.  For the time being, I'm checking his project
-   files and the like into a windows-untested subdirectory.  They
-   are almost certainly already out of date, but better than what we had
-   before.
- - Fixed some win32 threads bugs, and added support for _beginthreadex.
- - Fix zero size thread local allocation so that explicit deallocation
-   works correctly.
- - Removed serious bug in GC_malloc_uncollectable(large size).
- - Do not try to do thread-local gcj allocation in incremental mode.  There
-   are races in setting up the descriptor.
- - Add GC_INIT() to middle.c, fix some more GC_printfn calls.
- - Some assertions erroneously used I_HOLD_LOCK() negatively, eventhough
-   it can now spuriously return TRUE.
- - Rename SUNOS5 macro and OS name to SOLARIS and SUNOS5DL to SOLARISDL.
- - On Linux and some Un*x variants, allocate memory by first trying sbrk,
-   and then switching to mmap if that fails.
- - Fixed /proc/x/maps reading to deal with asynchronous deletions.
- - Fix REDIRECT_MALLOC with threads on Linux.  It now usually seems to work
-   with ugly hacks that include having calloc behave differently when it is
-   called from ld.so or the pthreads library.  A reasonable amount of
-   infrastructure was added to support some of this.  Thanks to Roland McGrath
-   for ideas and information.
- - Import various updated build scripts.
- - Add GC_register_has_static_roots_callback.  (Thanks to Andrew Haley.)
- - Fix serious bugs in GC_malloc_atomic_uncollectable().
- - Return GC_SUCCESS form GC_get_stack_base().
- - Fix several atomic_ops problems on IA64 with HP Compiler.
- - Update to atomic_ops-1.2.
- - Fix hb_n_marks description and reclaim.c assertion.
- - Various additional win32 threads fixes.
- - Enable GC_ASSERTIONS for Debug build with NT_THREADS_MAKEFILE.
-
-[gc7.0alpha7 was released and version bumped to gc7.0alpha8]
-
-Since first gc7.0alpha8 version:
- [ Some gc6.9 changes ]
- - Change FindTopOfStack decl in darwin_stop_world.c.
- - Move some static tests from misc.c to gcconfig.h.  Use #error.
- - Add GC_print_free_list() function.  (Thanks to Bruce Hoult.)
- - Add GC_GNU_THREADS support on HURD. (Thanks to Aleksey Demakov,
-   Barry DeFreese, and possibly other Debian maintainers.)
- - __GNUC__ was misspelled as __GNUC in thread_local_alloc.h.
-   (Thanks to Peter Wang.)
- - Integrated various MacOSX patches and tried to reconcile them.
-   Thanks to Allan Hsu, several contributers at Apple, and probably
-   others.
- - Added some casts to powerpc.h in libatomic_ops to silence warnings.
-
-To do (OLD):
- - REDIRECT_MALLOC and threads combination should work on more platforms,
-   and needs more testing on Linux.
- - Clone marker inner loop to support arch-dependent prefetching,
-   and counting of objects marked for finalization.
- - The USE_MUNMAP code should really use a separate data structure
-   indexed by physical page to keep track of time since last use of
-   a page.  Using hblk headers means we lose track of ages when
-   blocks are merged, and we can't unmap pages that have been allocated and
-   dropped by the blacklisting code.  I suspect both of these matter.
- - A dynamic libgc.so references dlopen unconditionally, but doesn't link
-   against libdl.
- - GC_proc_fd for Solaris is not correctly updated in response to a
-   fork() call.  Thus incremental collection in the child won't work
-   correctly.  (Thanks to Ben Cottrell for pointing this out.)
- - --enable-redirect-malloc is mostly untested and known not to work
-   on some platforms.
- - There seem to be outstanding issues on Solaris/X86, possibly with
-   finding the data segment starting address.  Information/patches would
-   be appreciated.
- - Very large root set sizes (> 16 MB or so) could cause the collector
-   to abort with an unexpected mark stack overflow.  (Thanks again to
-   Peter Chubb.)  NOT YET FIXED.  Workaround is to increase the initial
-   size.
- - The SGI version of the collector marks from mmapped pages, even
-   if they are not part of dynamic library static data areas.  This
-   causes performance problems with some SGI libraries that use mmap
-   as a bitmap allocator.  NOT YET FIXED.  It may be possible to turn
-   off DYNAMIC_LOADING in the collector as a workaround.  It may also
-   be possible to conditionally intercept mmap and use GC_exclude_static_roots.
-   The real fix is to walk rld data structures, which looks possible.
- - Incremental collector should handle large objects better.  Currently,
-   it looks like the whole object is treated as dirty if any part of it
-   is.
+* Fixed spurious
+assembly language assignments to TMP_SP.  Only the assignment in the PC/RT
+code is necessary.  On other machines, with certain compiler options,
+the assignments can lead to an unsaved register being overwritten.
+Known to cause problems under SunOS 3.5 WITHOUT the -O option.  (With
+-O the compiler recognizes it as dead code.  It probably shouldn't,
+but t2hat's another story.)
diff --git a/TODO b/TODO
index 99c8e7cff29919fc7470e116120974c80edd0c0d..080dabf7827e411cd4b87e5f13d4919ce4f60f48 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,9 +5,6 @@ Add "Disclaim" functionality (merge with paurkedal-disclaim).
 
 tests/CMakeLists.txt: Add more executables (see tests.am).
 
-ChangeLog: it should contain release change log not commit one (see that
-in libatomic_ops).
-
 Add .gitattributes: ensure LF line encoding in the repo.
 
 Use C++0x ATM (atomic memory operations) if available (either from the