Ivan Maidanski [Thu, 16 Feb 2012 18:47:28 +0000 (22:47 +0400)]
Fix GC_push_all/selected boundaries check
* mark.c (GC_push_all, GC_push_selected): Properly check for empty
region after boundaries alignment (for the case when boundaries
unaligned and the region is short than one word); simplify the checked
condition.
Ivan Maidanski [Thu, 16 Feb 2012 18:05:31 +0000 (22:05 +0400)]
Fix GC_finalizer_nested size to workaround alignment problem in Watcom
* finalize.c (GC_finalizer_nested): Change type from char to int to
force GC symbols proper alignment for some compilers (e.g., Watcom);
add comment.
* finalize.c (GC_check_finalizer_nested): Cast GC_finalizer_nested
properly (since it holds an unsigned char value).
* os_dep.c (GC_get_maps): Remove static "init_buf" variable (of char
size) and initialize "maps_buf" to NULL since it is allocated anyway
(since maps_size is non-zero).
* os_dep.c (GC_register_data_segments): Remove static "dummy" variable
(of char size) and use GC_pages_executable instead.
Ivan Maidanski [Thu, 26 Jan 2012 05:16:10 +0000 (09:16 +0400)]
Fix gcconfig.h to define USE_GET_STACKBASE_FOR_MAIN for Android
(causing pthread_attr_getstack to be used to get main stack base
even in single-threaded mode instead of GC_linux_main_stack_base)
* include/private/gcconfig.h (USE_GET_STACKBASE_FOR_MAIN): Define if
PLATFORM_ANDROID.
Ivan Maidanski [Tue, 24 Jan 2012 15:31:53 +0000 (19:31 +0400)]
Workaround some Linux/arm kernels bug to get correct GC_nprocs value
* pthread_support.c (STAT_READ, STAT_BUF_SIZE): Move the definition
out of PLATFORM_ANDROID condition.
* pthread_support.c (GC_get_nprocs_present): New static function
obtaining number of avalable CPUs from
"/sys/devices/system/cpu/present" (only Linux/arm excluding NaCl).
* pthread_support.c (GC_thr_init): Invoke GC_get_nprocs_present
(unless set from the environment variable) to workaround a bug in
some Linux/arm kernels (including Android).
Ivan Maidanski [Tue, 24 Jan 2012 04:39:47 +0000 (08:39 +0400)]
Fix GC_get_nprocs (Linux) returned variable type
* pthread_support.c (GC_get_nprocs): Change "result" local variable
type to int from word (to match returned value type); remove redundant
cast; initialize "result" variable just before its use.
Ivan Maidanski [Tue, 17 Jan 2012 04:19:04 +0000 (08:19 +0400)]
Fix cordtest temporary file names for Win32
* cord/tests/cordtest.c (FNAME1, FNAME2): Do not specify folder
(platform-dependent) for temporary file; use same short file name
(DOS-compatible) for all targets.
Ivan Maidanski [Fri, 13 Jan 2012 15:53:47 +0000 (19:53 +0400)]
Fix extra/gc.c to enable GC source inclusion from multi-threaded app
* extra/gc.c: Include gc_pthread_redirects.h (unless
GC_NO_THREAD_REDIRECTS) to restore thread calls macro-based
redirection after the corresponding undef's in pthread_support.c.
* win32_threads.c: Restore thread calls macro-based redirection
(unless GC_NO_THREAD_REDIRECTS) at the file end.
* extra/gc.c: Remove "file not well tested" comment.
Ivan Maidanski [Wed, 28 Dec 2011 06:42:49 +0000 (10:42 +0400)]
Fix compiler warning in GC_dyld_image_add/remove (Darwin)
* dyn_load.c (GC_dyld_image_add, GC_dyld_image_remove): Declare i, j
local variables as unsigned (to prevent compiler warning in
a comparison involving sizeof)
Ivan Maidanski [Thu, 15 Dec 2011 13:42:01 +0000 (17:42 +0400)]
Fix configure to disable GCC aliasing optimization unless forced to
* configure.ac (ac_cv_fno_strict_aliasing): New variable (set to
"skipped" if the client passed "-fstrict-aliasing" option to CFLAGS
else set to "yes" if GCC supports "-fno-strict-aliasing" option,
otherwise set to "no").
* configure.ac (CFLAGS): Append "-fno-strict-aliasing" if
ac_cv_fno_strict_aliasing is "yes" (only if GCC).
Ivan Maidanski [Tue, 15 Nov 2011 10:44:29 +0000 (14:44 +0400)]
Fix thread_local_alloc GC_malloc[_atomic] for USE_CUSTOM_SPECIFIC TLS
platforms (e.g., Solaris)
* thread_local_alloc.c (GC_malloc, GC_malloc_atomic): Test result of
GC_getspecific() for NULL in all cases except for USE_COMPILER_TLS and
USE_WIN32_COMPILER_TLS (i.e., no-op implementation of GC_getspecific).
Ivan Maidanski [Fri, 30 Sep 2011 12:17:31 +0000 (16:17 +0400)]
tests: Add missing checks of GC_malloc result (for out-of-memory)
* tests/test.c (mktree): Insert CHECK_OUT_OF_MEMORY to report mktree()
out-of-memory failures.
* tests/trace_test.c (mktree): Test whether GC_MALLOC_ATOMIC returns
NULL (exit with an error code and the appropriate message printed in
this case).
* configure.ac (THREAD_LOCAL_ALLOC): Test enable_shared and
enable_static values properly when setting THREAD_LOCAL_ALLOC
in case PARALLEL_MARK is off (Win32 only).
Ivan Maidanski [Thu, 22 Sep 2011 11:46:54 +0000 (15:46 +0400)]
Define GC_DLL if building only dynamic libraries.
Update README for Cygwin/MinGW.
* configure.ac (GC_DLL): New AC template; define if only the dynamic
libraries are being built.
* configure.ac (THREAD_LOCAL_ALLOC): Define for Win32 implicitly
if static libraries are being built (i.e. GC_DLL is not defined).
* doc/README.win32: Update "GNU Tools" section.
Ivan Maidanski [Thu, 8 Sep 2011 10:17:26 +0000 (14:17 +0400)]
Resolve "comparison of signed and unsigned values" compiler warnings.
(Apply commit 96f7891)
* cord/cordprnt.c (CORD_vsprintf): Cast "prec" and "width" local
variables to size_t.
* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr): Change
type of "i" local variable to int.
* pthread_support.c (start_mark_threads): Likewise.
* os_dep.c (GC_repeat_read): Change type of "num_read" to size_t.
* os_dep.c (GC_get_maps): Change type of "result" local variable from
int to ssize_t; cast "result" to size_t in comparison.
* pthread_support.c (GC_remove_all_threads_but_me): Cast "result" to
int.
* pthread_support.c (GC_wait_for_gc_completion): Change type of
"old_gc_no" local variable to word.
* pthread_support.c (GC_lock): Change type of "i" local variable to
unsigned.
* tests/staticrootstest.c (main): Cast sizeof() value to int in
comparisons.
Ivan Maidanski [Wed, 7 Sep 2011 14:00:38 +0000 (18:00 +0400)]
HOTFIX: Always reset fault handler in GC_find_limit_with_bound on exit.
* os_dep.c (GC_find_limit_with_bound): Inside loop, set result local
volatile variable and do break instead of return (this also suppresses
compiler warning about the potential clobbering of "bound" variable
by setjmp).
Ivan Maidanski [Wed, 7 Sep 2011 13:35:22 +0000 (17:35 +0400)]
HOTFIX: Remove locking in API GC_get_bytes_since_gc and friends.
Add GC_get_heap_usage_safe() to API as a thread-safe alternative to
GC_get_bytes_since_gc and friends.
Remove newly-added lock-free GC_get_heap_size_inner and
GC_get_free_bytes_inner from API.
* include/gc.h (GC_get_heap_size, GC_get_free_bytes,
GC_get_unmapped_bytes, GC_get_bytes_since_gc, GC_get_total_bytes):
Refine comment.
* include/gc.h (GC_HAVE_GET_HEAP_USAGE_SAFE): New macro.
* include/gc.h (GC_get_heap_usage_safe): New API function.
* misc.c (GC_get_heap_usage_safe): Likewise.
* include/gc_mark.h (GC_get_heap_size_inner, GC_get_free_bytes_inner):
Remove API function.
* misc.c (GC_get_heap_size_inner, GC_get_free_bytes_inner): Likewise.
* misc.c (GC_get_heap_size): Add comment.
* misc.c (GC_get_heap_size, GC_get_free_bytes, GC_get_unmapped_bytes,
GC_get_bytes_since_gc, GC_get_total_bytes): Remove locking.
* misc.c (GC_get_unmapped_bytes): Do not test USE_MUNMAP (not needed
after locking removal).
* misc.c (GC_get_bytes_since_gc, GC_get_total_bytes): Cast result to
size_t.
Ivan Maidanski [Wed, 31 Aug 2011 15:01:42 +0000 (19:01 +0400)]
FIX: MinGW/MingwCE: Use CreateThread in initsecondarythread test and
thread_leak_test.
* tests/initsecondarythread.c: Include windows.h instead of pthread.h
unless GC_PTHREADS.
* tests/thread_leak_test.c: Likewise.
* tests/initsecondarythread.c (thread): Use WINAPI and set return
type to DWORD unless GC_PTHREADS.
* tests/thread_leak_test.c (test): Likewise.
* tests/initsecondarythread.c (main): Use HANDLE, CreateThread and
WaitForSingleObject instead of pthread_t, pthread_create and
pthread_join, respectively, unless GC_PTHREADS.
* tests/thread_leak_test.c (main): Likewise.
Ivan Maidanski [Wed, 31 Aug 2011 10:19:34 +0000 (14:19 +0400)]
Check pthread_create/join result in initsecondarythread test.
* tests/initsecondarythread.c (GC_NO_THREAD_REDIRECTS): Add comment.
* tests/initsecondarythread.c: Include stdio.h.
* tests/initsecondarythread.c (thread): Cast result of malloc to void;
return arg parameter instead of NULL (to suppress compiler warnings).
* tests/initsecondarythread.c (main): Define "code" local variable;
store result of pthread_create and pthread_join to "code" variable;
exit application with an error code (with the corresponding error
message) if pthread_create or pthread_join fails.
Ivan Maidanski [Sun, 21 Aug 2011 07:45:57 +0000 (11:45 +0400)]
Resolve "comparison of signed and unsigned values" compiler warnings.
* allchblk.c (GC_allochblk_nth): Cast MAX_BLACK_LIST_ALLOC and
HBLKSIZE to signed_word.
* mallocx.c (GC_generic_malloc_many): Cast my_bytes_allocd to word.
* mark.c (GC_do_local_mark): Cast the result of local_top minus
local_mark_stack to word (since is non-negative).
* misc.c (GC_base): Declare sz as unsigned word.
* misc.c (GC_enable_incremental): Cast bytes_written to size_t in
comparison to len.
* obj_map.c (GC_initialize_offsets): Declare 'i' as unsigned.
* os_dep.c (GC_or_pages): Ditto.
* typd_mlc.c (GC_init_explicit_typing): Ditto.
* ptr_chck.c (GC_is_visible): Cast the result of p minus base to word.
* typd_mlc.c (GC_make_descriptor): Cast last_set_bit to word (since
non-negative) when compared to BITMAP_BITS.