Bernd Edlinger [Thu, 22 May 2014 21:53:21 +0000 (01:53 +0400)]
Fix (enable) Cygwin-64 build
* include/gc.h (GC_DATASTART, GC_DATAEND): Define for Cygwin-64.
* include/private/gcconfig.h (X86_64): Likewise.
* include/private/gcconfig.h (OS_TYPE, DATASTART, DATAEND, STACK_GRAN,
NEED_FIND_LIMIT, USE_MMAP_ANON): Define for Cygwin-64 (code copied
from Cygwin-32 block).
* os_dep.c (GC_get_stack_base): Get the stack base for Cygwin-64
(implementation based on NtCurrentTeb call).
Ivan Maidanski [Fri, 9 May 2014 11:28:38 +0000 (15:28 +0400)]
Remove duplicate entry and non-contributor persons from AUTHORS file
(remove entries occasionally leaked from GCC and Mono downstreams;
revert part of commits e1dc74a7, b23e1c8a, 8747eb89)
Ivan Maidanski [Sat, 3 May 2014 18:50:50 +0000 (22:50 +0400)]
Fix typos in names in AUTHORS and ChangeLog files
* AUTHORS: Fix typo in surname (Bryce McKinlay, Slava Sysoltsev).
* ChangeLog: Likewise.
* AUTHORS: Fix typo in name or surname (Philip Brown, Rutger Ovidius).
* AUTHORS: Place surname after 1st name (Tommaso Tagliapietra).
* AUTHORS: Remove computer system name (Harris NightHawk).
Ivan Maidanski [Sun, 30 Mar 2014 08:53:48 +0000 (12:53 +0400)]
Fix out-of-memory case in new_back_edges, push_in_progress (backgraph)
* backgraph.c (new_back_edges): Abort if not enough memory.
* backgraph.c (push_in_progress): Prevent null pointer dereference in
BCOPY() if allocation failed (due to not enough memory).
Ivan Maidanski [Sun, 30 Mar 2014 08:31:49 +0000 (12:31 +0400)]
Fix GET_MEM argument rounding in GC_scratch_alloc and similar
(Prevent abort in GC_unix_mmap_get_mem if the allocation size is not
a multiple of a page size.)
(Apply commit 180b56c from 'master' branch.)
* backgraph.c (new_back_edges, push_in_progress): Use
ROUNDUP_PAGESIZE_IF_MMAP() to adjust GET_MEM() argument (when needed).
* headers.c (GC_scratch_alloc): Likewise.
* misc.c (GC_envfile_init): Likewise.
* include/private/gc_priv.h (ROUNDUP_PAGESIZE_IF_MMAP): New macro.
* include/private/gcconfig.h (MMAP_SUPPORTED): Move definition from
os_dep.c (as needed for ROUNDUP_PAGESIZE_IF_MMAP() definition).
* include/private/gcconfig.h (GET_MEM): Refine comment (regarding its
argument).
Ivan Maidanski [Sun, 23 Feb 2014 12:56:54 +0000 (16:56 +0400)]
Update emails/links due to project site and ML transition
(www.hpl.hp.com/personal/Hans_Boehm -> www.hboehm.info;
gc@linux.hpl.hp.com -> bdwgc@lists.opendylan.org)
(Apply commit a17570c from 'master' branch.)
* AUTHORS: Update email.
* doc/gc.man: Likewise.
* README.QUICK: Change external link to gcinterface.html to local one
(pointing to the file in "doc" folder).
* README.md: Replace BDWGC site URL (www.hpl.hp.com/personal/Hans_Boehm
to www.hboehm.info).
* doc/gc.man: Likewise.
* doc/gcdescr.html: Likewise.
* doc/gcinterface.html: Likewise.
* doc/overview.html: Likewise.
* doc/scale.html: Likewise.
* README.md: Update mailing list info (gc@linux.hpl.hp.com to
bdwgc@lists.opendylan.org, gc-announce@linux.hpl.hp.com to
bdwgc-announce@lists.opendylan.org).
* configure.ac: Likewise.
* doc/gcdescr.html: Likewise.
* doc/overview.html: Likewise.
* doc/tree.html: Remove unnecessary external link.
Ivan Maidanski [Sun, 23 Feb 2014 08:53:55 +0000 (12:53 +0400)]
Fix or remove broken URLs in documentation
* doc/README.cords: Remove broken link to reality.sgi.com.
* doc/README.environment: Fix link to HPL tech reports.
* doc/overview.html: Remove broken link to parcftp.xerox.com.
* doc/overview.html: Fix (or update) external links.
Ivan Maidanski [Fri, 31 Jan 2014 20:32:08 +0000 (00:32 +0400)]
Fix GC_sig_suspend initialization when non-constant SIGRTMIN used
* pthread_stop_world.c (SIGNAL_UNSET): New macro.
* pthread_stop_world.c (GC_sig_suspend, GC_sig_thr_restart): Initialize
to SIGNAL_UNSET (instead of SIG_SUSPEND/THR_RESTART).
* pthread_stop_world.c (GC_get_suspend_signal): Return SIG_SUSPEND if
GC_sig_suspend is SIGNAL_UNSET.
* pthread_stop_world.c (GC_get_thr_restart_signal): Return
SIG_THR_RESTART if GC_sig_thr_restart is SIGNAL_UNSET.
* pthread_stop_world.c (GC_unblock_gc_signals): Add assertion for
initialization of GC_sig_suspend and GC_sig_thr_restart.
* pthread_stop_world.c (GC_stop_init): Replace SIGNAL_UNSET value for
GC_sig_suspend, GC_sig_thr_restart to SIG_SUSPEND and SIG_THR_RESTART,
respectively.
David Grove [Wed, 8 Jan 2014 23:18:16 +0000 (18:18 -0500)]
Add config option to use STGRTMIN-based signals for thread suspend/resume
Change motivated by using BDWGC in the X10 runtime on systems where
IBM Parallel Environment is used to launch the X10 processes. PE
is already using the signals BDWCG is using for its own purposes, so
we need to force the GC to use different ones to avoid a conflict.
* configure.ac (sigrt-signals): Handle new option.
* configure.ac (GC_USESIGRT_SIGNALS): New AC define.
* include/private/gc_priv.h (SIG_SUSPEND): Force to be defined to
_SIGRTMIN+6 if GC_USESIGRT_SIGNALS (Darwin is excluded anyway).
* pthread_stop_world.c (SIG_THR_RESTART): Force to be defined to
_SIGRTMIN+5 if GC_USESIGRT_SIGNALS; reformat code.
Ivan Maidanski [Thu, 26 Dec 2013 21:41:05 +0000 (01:41 +0400)]
Fix data roots registration for Android/x86 and NDK ARM 'gold' linker
* include/gc.h (_etext, __dso_handle): Declare weak symbol (only if
Android).
* os_dep.c (_etext, __dso_handle): Likewise.
* include/gc.h (GC_INIT_CONF_ROOTS): If __data_start is incorrect
(less than _etext or missing but __dso_handle (which is typically
located at data section start) is greater than _etext as observed for
code produced by "gold" linker of Android NDK r9b) then use
__dso_handle as the lowest bound of registered data root instead of
__data_start (only if Android); update comment.
* os_dep.c (GC_init_linux_data_start): Likewise.
* os_dep.c (__data_start, data_start): Reformat code.
Andrew Horton [Sat, 21 Dec 2013 13:06:36 +0000 (13:06 +0000)]
Fix mark stack excessive growth during parallel mark
(The growth observed in applications that implement things like weak
hash tables and iterate over the members marking entries using the
supplied GC_MARK_AND_PUSH macro.)
When overflow is signaled, only set GC_mark_stack_too_small if we
are using the global mark stack. In parallel mode, local mark stack
is used, so the global mark stack is grown by GC_return_mark_stack
mainly.
* mark.c (GC_signal_mark_stack_overflow): Do not set
GC_mark_stack_too_small if GC_parallel.
Andrew Horton [Sun, 15 Dec 2013 15:55:04 +0000 (15:55 +0000)]
Bump GC_collect_at_heapsize in GC_add_to_heap. In the normal case it is
recalculated straight after. But in the case where it's called directly
from alloc_mark_stack, it isn't. If the mark stack gets very large,
this can cause GC_should_collect to always return true, and
GC_alloc_large to get stuck in a loop calling GC_collect_or_expand.
Ivan Maidanski [Wed, 18 Dec 2013 19:33:50 +0000 (23:33 +0400)]
Fix 'attribute declaration must precede definition' warning (clang-3.1)
* extra/gc.c: Include gc_inline.h explicitly before including mallocx.c
(to workaround "attribute declaration must precede definition" warning
reported by clang-3.1 for GC_generic_malloc_many); define
GC_PTHREAD_REDIRECTS_ONLY before including gc_pthread_redirects.h.
* include/gc_pthread_redirects.h (GC_dlopen, GC_pthread_sigmask,
GC_PTHREAD_CREATE_CONST, GC_pthread_create, GC_pthread_join,
GC_pthread_detach, GC_pthread_cancel, GC_pthread_exit): Do not declare
if GC_PTHREAD_REDIRECTS_ONLY defined (to workaround
"attribute declaration must precede definition" warning reported by
clang-3.1).
Yusuke Suzuki [Mon, 2 Dec 2013 03:50:52 +0000 (12:50 +0900)]
Fix CMakeLists.txt: do not override CMAKE_OSX_ARCHITECTURES
* CMakeLists.txt: Since latest OSX compiler (clang) provided by Xcode is
not accept "-arch ppc"; So if CMAKE_OSX_ARCHITECTURES is defined by
client, CMakeLists.txt should not force "ppc;i386;x86_64".
Ivan Maidanski [Sat, 23 Nov 2013 20:16:38 +0000 (00:16 +0400)]
Fix 'Bad signal in suspend_handler' abort on FreeBSD-9.2
* pthread_stop_world.c (GC_suspend_handler_inner): If signal number
is zero then silently return (instead of ABORT) if FREEBSD (to
workaround a bug in FreeBSD 9.2-RELEASE regarding signals processing,
bug is observed only if THREAD_LOCAL_ALLOC defined).
Ivan Maidanski [Sat, 16 Nov 2013 09:06:34 +0000 (13:06 +0400)]
Enable prefetch operations by default (GCC 3.0+)
* include/private/gcconfig.h (PREFETCH): Update comment; remove FIXME.
* include/private/gcconfig.h (NO_PREFETCH_FOR_WRITE): Define if
USE_I686_PREFETCH defined but not FORCE_WRITE_PREFETCH.
* include/private/gcconfig.h (PREFETCH, PREFETCH_FOR_WRITE,
CLEAR_DOUBLE): Reformat code (for IA64).
* include/private/gcconfig.h (PREFETCH, PREFETCH_FOR_WRITE): Make
default definition to GCC (v3+) built-in operation for all platforms
(instead of only for Linux/x64) unless NO_PREFETCH (or
NO_PREFETCH_FOR_WRITE, respectively) defined.
Ivan Maidanski [Mon, 11 Nov 2013 18:32:18 +0000 (22:32 +0400)]
Workaround 'ELF_DATA/EM_ALPHA redefined' warning in Android link.h
(revert part of commit a6e4ee9)
* dyn_load.c: Include asm/elf.h and linux/elf-em.h explicitly, and
undefine ELF_DATA and EM_ALPHA (if PLATFORM_ANDROID and
BIONIC_ELFDATA_REDEF_BUG are defined) to avoid "macro redefined"
warnings reported for link.h of Android Bionic.
Ivan Maidanski [Sat, 9 Nov 2013 07:56:35 +0000 (11:56 +0400)]
Fix dyn_load.c compilation for Android 4.3
* dyn_load.c (struct link_map, r_debug): Define explicitly (matching
that of Android 4.2 Bionic) instead of include linker.h (only if
PLATFORM_ANDROID); remove workaround enabled by
BIONIC_ELFDATA_REDEF_BUG regarding ELF_DATA redefinition (as linker.h
is not included); update comment.
Ivan Maidanski [Sat, 9 Nov 2013 07:37:09 +0000 (11:37 +0400)]
Eliminate GCC warning about uninitialized 'hhdr' in GC_allochblk_nth
* allchblk.c (GC_allochblk_nth): Replace "for" condition with
conditional "return" since otherwise GCC reports
"'hhdr' may be used uninitialized" warning in case of -O0 optimization
level; remove comment about bogus compiler warning; refine comment
for "thishdr" local variable.
Ivan Maidanski [Mon, 16 Sep 2013 04:50:49 +0000 (08:50 +0400)]
Fix race in GC_print_all_errors regarding GC_leaked
* reclaim.c (GC_add_leaked): Remove FIXME.
* reclaim.c (GC_print_all_errors): Declare n_leaked, leaked[] local
variables initialized from GC_[n_]leaked while holding the allocation
lock (reset GC_n_leaked and GC_leaked[] as well); add GC_ASSERT for
n_leaked; use [n_]leaked while printing leaked objects count and
pointers.
* reclaim.c (GC_print_all_errors): Acquire lock to reset
printing_errors.
Ivan Maidanski [Fri, 6 Sep 2013 19:36:39 +0000 (23:36 +0400)]
Fix collection of objects referenced only from GC_mark_stack_X variables
(Apply commit a7a5666 from 'release-7_2' branch.)
* include/private/gc_pmark.h (mse): Move to gc_priv.h (as used by
GC_mark_stack_limit, GC_mark_stack_top, GC_mark_stack).
* include/private/gc_pmark.h (GC_mark_stack_limit, GC_mark_stack_top,
GC_mark_stack): Remove variable declaration.
* include/private/gc_priv.h (_GC_arrays): Add _mark_stack,
_mark_stack_limit, _mark_stack_top fields.
* include/private/gc_priv.h (GC_mark_stack_limit, GC_mark_stack_top,
GC_mark_stack): Define macro (redirecting to the corresponding field
of GC_arrays).
* mark.c (GC_mark_stack, GC_mark_stack_limit, GC_mark_stack_top):
Remove variable; move comment to gc_priv.h.
* mark.c (GC_push_marked1, GC_push_marked2, GC_push_marked4): Undefine
GC_mark_stack_top and GC_mark_stack_limit macros (before redefining
them to local variables) at function start, redefine them back to the
corresponding field of GC_arrays at function exit.
Ivan Maidanski [Sun, 1 Sep 2013 16:06:38 +0000 (20:06 +0400)]
Prevent misleading AC_MSG_ERROR/AS_IF errors reported in configure.ac
* configure.ac (PKG_CHECK_MODULES): Move AS_IF and AC_MSG_ERROR out of
ACTION-IF-NOT-FOUND argument (setting "missing_libatomic_ops" variable
instead) to prevent misleading
"possibly undefined macro: AC_MSG_ERROR, AS_IF" error reported by
Autoconf (pointing to code lines where these macros first occur) in
case of PKG_CHECK_MODULES is not defined in aclocal.m4; add comment
about missing Autotools pkg.m4 file.
Ivan Maidanski [Sun, 1 Sep 2013 10:00:08 +0000 (14:00 +0400)]
Replace deprecated [CXX]INCLUDES to AM_C[PP]FLAGS in configure.ac
* configure.ac (INCLUDES): Replace with AM_CFLAGS (as the former is
deprecated in Automake 1.13.4).
* configure.ac (CXXINCLUDES): Replace with AM_CPPFLAGS.
Ivan Maidanski [Sun, 25 Aug 2013 08:37:19 +0000 (12:37 +0400)]
Remove changes in Makefile.in and doc/gc.man specific to FreeBSD ports
(Revert part of commit 8666ba2 from 'freebsd-ports-devel-boehm-gc' branch.)
(Apply commit 8f8d395 from 'release-7_2' branch.)
Ivan Maidanski [Sun, 25 Aug 2013 05:59:42 +0000 (09:59 +0400)]
Use __builtin_extract_return_addr in GC_RETURN_ADDR_PARENT (gcc/x86)
* include/gc_config_macros.h (GC_RETURN_ADDR_PARENT): Use
__builtin_extract_return_addr (since the address passed to dladdr);
do not define the macro for GCC pre-v4.
Ivan Maidanski [Sat, 24 Aug 2013 16:32:11 +0000 (20:32 +0400)]
Prevent use of unsupported __builtin_return_address(1) in GC_DBG_EXTRAS
* include/gc_config_macros.h (GC_CAN_SAVE_CALL_STACKS): Define also
for __amd64__ (synonym for __x86_64__).
* include/gc_config_macros.h (GC_RETURN_ADDR_PARENT): Define only for
x86 and x86_64 (which have frame-pointer register, for other targets
GCC might report "unsupported argument to __builtin_return_address"
warning).
Ivan Maidanski [Sat, 24 Aug 2013 14:43:29 +0000 (18:43 +0400)]
Define GC_caller_func_offset only if HAVE_DLADDR and GC_RETURN_ADDR_PARENT
(Apply commit 5d94f18 from 'release-7_2' branch.)
* dbg_mlc.c (GC_caller_func_offset): Do not define (and do not include
dlfcn.h) unless GC_ADD_CALLER; test HAVE_DLADDR (and
GC_RETURN_ADDR_PARENT) instead of FREEBSD macro.
* dbg_mlc.c (GC_caller_func_offset): Use STATIC; replace the K&R-style
function definition with the ANSI C one; remove unnecessary "const" in
type casts; do not call dladdr() if address is 0.
* dbg_mlc.c (GC_debug_malloc, GC_debug_realloc): Move assignment of
"s" argument to "unknown" to GC_caller_func_offset (if GC_ADD_CALLER).
* dbg_mlc.c (GC_debug_realloc): Do not call GC_caller_func_offset if
"p" argument is NULL (i.e., if redirected to GC_debug_malloc)..
* include/private/gcconfig.h (HAVE_DLADDR): Define for FREEBSD.
Ivan Maidanski [Fri, 23 Aug 2013 18:51:07 +0000 (22:51 +0400)]
Adjust GC_debug_malloc/realloc_replacement macro to match the API function
* malloc.c (GC_debug_malloc_replacement): Pass NULL (instead of
"unknown") to "s" argument of GC_debug_malloc to match that
replacement definition in dbg_mlc.c.
* mallocx.c (GC_debug_realloc_replacement): Likewise.
Ivan Maidanski [Thu, 22 Aug 2013 06:58:58 +0000 (10:58 +0400)]
Fix old_segv/bus_act variables initialization for FreeBSD
* os_dep.c (old_segv_act): Define static variable for FREEBSD (same as
for NETBSD).
* os_dep.c (GC_set_and_save_fault_handler): Reformat code (related to
FreeBSD).
* os_dep.c (GC_reset_fault_handler): Initialize old_segv_act (and
old_bus_act) for FREEBSD (same as for NETBSD).
Ivan Maidanski [Sun, 21 Jul 2013 14:27:07 +0000 (18:27 +0400)]
Fix GC_caller_func_offset and GC_DBG_RA names
(Apply commit 28e6e4f from 'release-7_2' branch.)
* dbg_mlc.c (GC_caller_func_offset): Test FREEBSD macro instead of
__FreeBSD__ (since the former is always defined in gcconfig.h included
from this file indirectly).
* dyn_load.c (ElfW): Likewise.
* dbg_mlc.c (GC_caller_func): Fix name to GC_caller_func_offset.
* dbg_mlc.c (GC_debug_realloc): Invoke GC_caller_func_offset if
GC_ADD_CALLER (same as in GC_debug_malloc and commit 2cdf7ec).
* include/private/gc_priv.h (RA): Fix name to GC_DBG_RA.
* include/private/gcconfig.h (X86_64): Test __x86_64__ in addition to
__amd64__ for FreeBSD (proposed in commit b54833a).
FreeBSD New ports collection for boehm-gc v7.2d
(Apply commit 8666ba2 from 'release-7_2' branch.)
* include/private/gc_priv.h (RA): Define to "GC_RETURN_ADDR_PARENT,"
if GC_RETURN_ADDR_PARENT defined.
* include/private/gcconfig.h (FREEBSD): Group rules.
Ivan Maidanski [Sat, 20 Jul 2013 13:01:01 +0000 (17:01 +0400)]
Fix 'stack section' pointer passed to push_all_stack_sections (Pthreads)
* pthread_stop_world.c (GC_push_all_stacks): Use
traced_stack_sect->prev instead of traced_stack_sect if saved_stack_ptr
(of traced_stack_sect) is the same as stop_info.stack_ptr of the
examined thread (thus preventing assertion violation in
GC_push_all_stack_sections invoked during incremental collection).