platform/upstream/libgc.git
13 years ago2009-10-06 Ivan Maidanski <ivmai@mail.ru>
ivmai [Tue, 6 Oct 2009 15:38:52 +0000 (15:38 +0000)]
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).

13 years ago2009-10-06 Ivan Maidanski <ivmai@mail.ru>
ivmai [Tue, 6 Oct 2009 12:50:34 +0000 (12:50 +0000)]
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()).

13 years ago2009-10-06 Ivan Maidanski <ivmai@mail.ru>
ivmai [Tue, 6 Oct 2009 10:52:03 +0000 (10:52 +0000)]
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).

13 years ago2009-10-06 Ivan Maidanski <ivmai@mail.ru>
ivmai [Tue, 6 Oct 2009 08:01:01 +0000 (08:01 +0000)]
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.

13 years ago2009-10-02 Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
ivmai [Fri, 2 Oct 2009 08:29:50 +0000 (08:29 +0000)]
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.

13 years ago2009-10-01 Ivan Maidanski <ivmai@mail.ru> (really mostly Andreas Tobler)
ivmai [Thu, 1 Oct 2009 21:13:37 +0000 (21:13 +0000)]
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.

13 years ago2009-10-01 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 1 Oct 2009 20:04:23 +0000 (20:04 +0000)]
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.

13 years ago2009-10-01 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 1 Oct 2009 19:23:14 +0000 (19:23 +0000)]
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.

13 years ago2009-10-01 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 1 Oct 2009 12:48:38 +0000 (12:48 +0000)]
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).

13 years ago2009-10-01 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 1 Oct 2009 12:22:02 +0000 (12:22 +0000)]
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.

13 years ago2009-09-30 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 30 Sep 2009 19:05:39 +0000 (19:05 +0000)]
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.

13 years ago2009-09-30 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 30 Sep 2009 18:46:40 +0000 (18:46 +0000)]
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.

13 years ago2009-09-30 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 30 Sep 2009 17:47:48 +0000 (17:47 +0000)]
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.

13 years ago2009-09-30 Ivan Maidanski <ivmai@mail.ru> (really Hans Boehm)
ivmai [Wed, 30 Sep 2009 09:13:05 +0000 (09:13 +0000)]
2009-09-30  Ivan Maidanski <ivmai@mail.ru> (really Hans Boehm)

* os_dep.c (PROTECT, UNPROTECT): Use distinct ABORT messages.

13 years ago2009-09-30 Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
ivmai [Wed, 30 Sep 2009 08:42:33 +0000 (08:42 +0000)]
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.

13 years ago2009-09-29 Ivan Maidanski <ivmai@mail.ru>
ivmai [Tue, 29 Sep 2009 13:50:11 +0000 (13:50 +0000)]
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.

13 years ago* Moving libatomic_ops-1.2 to libatomic_ops
ivmai [Tue, 29 Sep 2009 13:41:49 +0000 (13:41 +0000)]
* Moving libatomic_ops-1.2 to libatomic_ops

13 years ago2009-09-28 Ivan Maidanski <ivmai@mail.ru>
ivmai [Mon, 28 Sep 2009 09:06:06 +0000 (09:06 +0000)]
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.

13 years ago2009-09-27 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 27 Sep 2009 21:19:59 +0000 (21:19 +0000)]
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).

13 years ago2009-09-27 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 27 Sep 2009 16:53:42 +0000 (16:53 +0000)]
2009-09-27  Ivan Maidanski <ivmai@mail.ru>

* real_malloc.c: Include private/config.h if HAVE_CONFIG_H.

13 years ago2009-09-27 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 27 Sep 2009 15:06:46 +0000 (15:06 +0000)]
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".

13 years ago2009-09-27 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 27 Sep 2009 09:09:00 +0000 (09:09 +0000)]
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.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 21:10:54 +0000 (21:10 +0000)]
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).

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 15:43:34 +0000 (15:43 +0000)]
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).

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 13:23:42 +0000 (13:23 +0000)]
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.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 12:11:16 +0000 (12:11 +0000)]
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.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
ivmai [Sat, 26 Sep 2009 10:51:59 +0000 (10:51 +0000)]
2009-09-26  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)

* autogen.sh: Update.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
ivmai [Sat, 26 Sep 2009 10:38:55 +0000 (10:38 +0000)]
2009-09-26  Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)

* Makefile.am: Don't add libtool.m4 to EXTRA_DIST.
* acinclude.m4: Place GC_SET_VERSION in [].
* README.QUICK: Update information for Makefile.
* Makefile.am: Replace dist_pkgconfig_DATA with pkgconfig_DATA for
bdw-gc.pc.
* configure.ac: Enable tracetest.
* tests/tests.am: Ditto.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 10:15:21 +0000 (10:15 +0000)]
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.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 08:33:11 +0000 (08:33 +0000)]
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.

13 years ago2009-09-26 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 26 Sep 2009 06:48:44 +0000 (06:48 +0000)]
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.

13 years ago2009-09-25 Hans Boehm <Hans.Boehm@hp.com>
hboehm [Sat, 26 Sep 2009 00:06:51 +0000 (00:06 +0000)]
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.

13 years ago2009-09-25 Ivan Maidanski <ivmai@mail.ru>
ivmai [Fri, 25 Sep 2009 18:59:02 +0000 (18:59 +0000)]
2009-09-25  Ivan Maidanski <ivmai@mail.ru>

* Makefile: Remove outdated file (Makefile.direct should be used
instead).

13 years ago2009-09-25 Ivan Maidanski <ivmai@mail.ru>
ivmai [Fri, 25 Sep 2009 12:23:46 +0000 (12:23 +0000)]
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).

13 years ago2009-09-25 Ivan Maidanski <ivmai@mail.ru>
ivmai [Fri, 25 Sep 2009 10:42:37 +0000 (10:42 +0000)]
2009-09-25  Ivan Maidanski <ivmai@mail.ru>

* include/gc.h (GC_use_DllMain): Refine (and reformat) the
comment.

13 years ago2009-09-25 Ivan Maidanski <ivmai@mail.ru> (really mostly Petter Urkedal)
ivmai [Fri, 25 Sep 2009 07:48:30 +0000 (07:48 +0000)]
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.

13 years ago2009-09-25 Ivan Maidanski <ivmai@mail.ru>
ivmai [Fri, 25 Sep 2009 07:13:13 +0000 (07:13 +0000)]
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()).

13 years ago2009-09-25 Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
ivmai [Fri, 25 Sep 2009 05:13:53 +0000 (05:13 +0000)]
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.

13 years ago2009-09-24 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 24 Sep 2009 11:54:47 +0000 (11:54 +0000)]
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.

13 years ago2009-09-24 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 24 Sep 2009 08:21:32 +0000 (08:21 +0000)]
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).

13 years ago2009-09-24 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 24 Sep 2009 07:31:03 +0000 (07:31 +0000)]
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.

13 years ago2009-09-24 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 24 Sep 2009 07:20:18 +0000 (07:20 +0000)]
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().

13 years ago2009-09-23 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 23 Sep 2009 06:57:52 +0000 (06:57 +0000)]
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().

13 years ago2009-09-23 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 23 Sep 2009 06:53:48 +0000 (06:53 +0000)]
2009-09-23  Ivan Maidanski <ivmai@mail.ru>

* Makefile.direct (LARGE_CONFIG): Update information.
* include/gc.h (GC_stop_func): Refine the comment.

13 years ago2009-09-21 Ivan Maidanski <ivmai@mail.ru>
ivmai [Mon, 21 Sep 2009 08:46:03 +0000 (08:46 +0000)]
2009-09-21  Ivan Maidanski <ivmai@mail.ru>

* configure.ac: Use EMPTY_GETENV_RESULTS instead of NO_GETENV for
Win32 (workaround for Wine bug).

13 years ago2009-09-20 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 20 Sep 2009 08:07:27 +0000 (08:07 +0000)]
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.

13 years ago2009-09-20 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 20 Sep 2009 06:58:00 +0000 (06:58 +0000)]
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.

13 years ago2009-09-20 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sun, 20 Sep 2009 06:27:16 +0000 (06:27 +0000)]
2009-09-20  Ivan Maidanski <ivmai@mail.ru>

* include/private/gc_priv.h: Define AO_ASSUME_WINDOWS98 if
PARALLEL_MARK (required for VC++ x86).

13 years ago2009-09-19 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 19 Sep 2009 18:20:26 +0000 (18:20 +0000)]
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.

13 years ago2009-09-19 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 19 Sep 2009 11:43:14 +0000 (11:43 +0000)]
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.

13 years ago2009-09-19 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 19 Sep 2009 11:23:29 +0000 (11:23 +0000)]
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.

13 years ago2009-09-19 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 19 Sep 2009 09:28:28 +0000 (09:28 +0000)]
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.

13 years ago2009-09-19 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 19 Sep 2009 09:19:24 +0000 (09:19 +0000)]
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.

13 years ago2009-09-19 Ivan Maidanski <ivmai@mail.ru>
ivmai [Sat, 19 Sep 2009 08:51:40 +0000 (08:51 +0000)]
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.

13 years ago2009-09-18 Ivan Maidanski <ivmai@mail.ru> (really Ludovic CourtXs)
ivmai [Fri, 18 Sep 2009 20:16:16 +0000 (20:16 +0000)]
2009-09-18  Ivan Maidanski <ivmai@mail.ru> (really Ludovic CourtXs)

* configure.ac: Don't use -lpthread -ldl for Cygwin.

13 years ago2009-09-18 Ivan Maidanski <ivmai@mail.ru>
ivmai [Fri, 18 Sep 2009 07:43:11 +0000 (07:43 +0000)]
2009-09-18  Ivan Maidanski <ivmai@mail.ru>

* NT_THREADS_MAKEFILE: Make it back equal to gc.mak.

13 years ago2009-09-18 Ivan Maidanski <ivmai@mail.ru>
ivmai [Fri, 18 Sep 2009 05:51:52 +0000 (05:51 +0000)]
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.

13 years ago2009-09-17 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 17 Sep 2009 19:11:47 +0000 (19:11 +0000)]
2009-09-17  Ivan Maidanski <ivmai@mail.ru>

* Makefile: Replace "version.h" with "include/gc_version.h".
* include/gc_version.h: Ditto.

13 years ago2009-09-17 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 17 Sep 2009 07:18:33 +0000 (07:18 +0000)]
2009-09-17  Ivan Maidanski <ivmai@mail.ru>

* alloc.c (GC_collect_or_expand): Output heap size in WARN()
(before returning FALSE) for convenience.

13 years ago2009-09-17 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 17 Sep 2009 06:43:26 +0000 (06:43 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 20:31:48 +0000 (20:31 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 19:16:17 +0000 (19:16 +0000)]
2009-09-16  Ivan Maidanski <ivmai@mail.ru>

* Makefile.am: Back remove "GC_" prefix for PTHREADS,
DARWIN_THREADS, WIN32_THREADS (for configure.ac).

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 14:43:37 +0000 (14:43 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru> (really Petter Urkedal)
ivmai [Wed, 16 Sep 2009 12:07:42 +0000 (12:07 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 10:27:22 +0000 (10:27 +0000)]
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).

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 10:23:35 +0000 (10:23 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 09:27:58 +0000 (09:27 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 09:08:33 +0000 (09:08 +0000)]
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).

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 09:03:54 +0000 (09:03 +0000)]
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().

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 08:59:10 +0000 (08:59 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 08:55:33 +0000 (08:55 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 08:50:53 +0000 (08:50 +0000)]
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.

13 years ago2009-09-16 Ivan Maidanski <ivmai@mail.ru>
ivmai [Wed, 16 Sep 2009 08:44:21 +0000 (08:44 +0000)]
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.

13 years ago2009-09-15 Hans Boehm <Hans.Boehm@hp.com> (Mostly Juan Jose Garcia-Ripoll)
hboehm [Tue, 15 Sep 2009 18:24:57 +0000 (18:24 +0000)]
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)

13 years ago2009-09-15 Ivan Maidanski <ivmai@mail.ru>
ivmai [Tue, 15 Sep 2009 17:46:21 +0000 (17:46 +0000)]
2009-09-15  Ivan Maidanski <ivmai@mail.ru>
(ivmai137v2.diff)

* include/private/gc_priv.h (MAX_HEAP_SECTS): Guard with ifndef.

13 years ago2009-09-14 Ivan Maidanski <ivmai@mail.ru>
ivmai [Mon, 14 Sep 2009 06:25:02 +0000 (06:25 +0000)]
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.

13 years ago2009-09-14 Ivan Maidanski <ivmai@mail.ru>
ivmai [Mon, 14 Sep 2009 06:22:19 +0000 (06:22 +0000)]
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.

13 years ago2009-09-14 Ivan Maidanski <ivmai@mail.ru>
ivmai [Mon, 14 Sep 2009 06:18:02 +0000 (06:18 +0000)]
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.

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 20:15:38 +0000 (20:15 +0000)]
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).

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 20:13:03 +0000 (20:13 +0000)]
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).

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 20:08:05 +0000 (20:08 +0000)]
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).

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 19:57:00 +0000 (19:57 +0000)]
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()).

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 19:53:07 +0000 (19:53 +0000)]
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.

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 18:24:52 +0000 (18:24 +0000)]
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.

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 18:15:46 +0000 (18:15 +0000)]
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
vars 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).

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 17:38:06 +0000 (17:38 +0000)]
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).

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 17:30:19 +0000 (17:30 +0000)]
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.

13 years ago2009-09-10 Ivan Maidanski <ivmai@mail.ru>
ivmai [Thu, 10 Sep 2009 17:22:18 +0000 (17:22 +0000)]
2009-09-10  Ivan Maidanski <ivmai@mail.ru>
(diff103_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.

13 years ago2009-09-03 Hans Boehm <Hans.Boehm@hp.com> (really Loren J. Rittle)
hboehm [Thu, 3 Sep 2009 17:52:22 +0000 (17:52 +0000)]
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+.

13 years ago2009-09-02 Hans Boehm <Hans.Boehm@hp.com> (with help from Victor Ivrii and
hboehm [Thu, 3 Sep 2009 00:01:13 +0000 (00:01 +0000)]
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.

13 years ago2009-08-19 Hans Boehm <Hans.Boehm@hp.com>
hboehm [Thu, 20 Aug 2009 02:25:32 +0000 (02:25 +0000)]
2009-08-19  Hans Boehm <Hans.Boehm@hp.com>

* include/gc_gcj.h (GC_init_gcj_malloc): Improve descriptive
comment.

13 years ago2009-08-11 Hans Boehm <Hans.Boehm@hp.com>
hboehm [Wed, 12 Aug 2009 00:42:01 +0000 (00:42 +0000)]
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): Dont really use munmap.

13 years ago2009-08-08 Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
hboehm [Sun, 9 Aug 2009 01:34:50 +0000 (01:34 +0000)]
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.

13 years ago2009-08-07 Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
hboehm [Sat, 8 Aug 2009 00:49:29 +0000 (00:49 +0000)]
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.
* include/private/gc_priv.h (GC_unmapped_bytes): Define as 0 for
not USE_MUNMAP case.
* os_dep.c (GC_dirty_init): Move "ifdef GWW_VDB" block out of
"ifdef MSWIN32" one (for Cygwin).

13 years ago2009-08-01 Hans Boehm <Hans.Boehm@hp.com> (Really Ivan Maidanski)
hboehm [Sat, 1 Aug 2009 18:01:22 +0000 (18:01 +0000)]
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.

13 years ago2009-07-10 Hans Boehm <Hans.Boehm@hp.com>
hboehm [Sat, 11 Jul 2009 00:59:57 +0000 (00:59 +0000)]
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.

13 years ago2009-06-20 Hans Boehm <Hans.Boehm@hp.com>
hboehm [Sat, 20 Jun 2009 20:24:43 +0000 (20:24 +0000)]
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.

13 years ago2009-06-12 Hans Boehm <Hans.Boehm@hp.com>
hboehm [Sat, 13 Jun 2009 01:06:54 +0000 (01:06 +0000)]
2009-06-12  Hans Boehm <Hans.Boehm@hp.com>

* include/gc_version.h, configure.ac, doc/README:
Change to version 7.2alpha3.
* configure: Regenerate.

13 years ago2009-06-12 Hans Boehm <Hans.Boehm@hp.com> gc7_2alpha2
hboehm [Sat, 13 Jun 2009 00:52:25 +0000 (00:52 +0000)]
2009-06-12  Hans Boehm <Hans.Boehm@hp.com>

* include/gc_version.h, configure.ac, doc/README:
Change to version 7.2alpha2.
* configure: Regenerate.

13 years ago2009-06-12 Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidanski)
hboehm [Sat, 13 Jun 2009 00:00:06 +0000 (00:00 +0000)]
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).