Ivan Maidanski [Fri, 21 Apr 2017 10:24:42 +0000 (13:24 +0300)]
Collapse multiple NT_*_MAKEFILE scripts into a single NT_MAKEFILE
Now NT_MAKEFILE should support building of static and dynamic,
single- and multi-threaded, 32- and 64-bit GC libraries.
The default is dynamic multi-threaded GC library.
* NT_MAKEFILE: Remove comment about assuming a single thread.
* NT_MAKEFILE (MY_CPU): Replace with CVTRES_CPU; add comment; add
sample for X64.
* NT_MAKEFILE (CPU): Comment out (defined automatically).
* NT_MAKEFILE (CFLAGS_SPECIFIC, GC_DLL, GC_LIB, LINK_GC): New variable;
add samples for X64, static, single-threaded library.
* NT_MAKEFILE (LINK_DLL_FLAGS): New variable (copied from LINK64_FLAGS
of NT_X64_THREADS_MAKEFILE file); remove unneeded system .lib files.
* NT_MAKEFILE (AO_SRC_DIR, AO_INCLUDE_DIR): New variable (copied from
NT_STATIC_THREADS_MAKEFILE file).
* NT_MAKEFILE (OBJS): Add win32_threads.obj, thread_local_alloc.obj.
* NT_MAKEFILE (.c.obj, .cpp.obj): Add -I$(AO_INCLUDE_DIR) option;
replace $(cvars) with $(CFLAGS_SPECIFIC); add /wd4100 /wd4127 /wd4701
options (copied from NT_X64_THREADS_MAKEFILE).
* NT_MAKEFILE (.c.obj): Add -DCORD_NOT_DLL option (copied from
NT_X64_THREADS_MAKEFILE); Add comment about _CRT_SECURE_NO_DEPRECATE
(copied from NT_X64_STATIC_THREADS_MAKEFILE file).
* NT_MAKEFILE (gc_cpp.cpp): Remove target.
* NT_MAKEFILE (gc.lib, gctest.exe, cord\de.exe, test_cpp.exe): Replace
gc.lib with $(GC_LIB).
* NT_MAKEFILE (gc.lib): Replace "lib /MACHINE:i386 /out:gc.lib" with
"$(LINK_GC) /MACHINE:$(CPU)"; remove comment about original NT SDK.
* NT_MAKEFILE (gctest.exe): Remove comments related to win32s.
* NT_MAKEFILE (gctest.exe, cord\de.exe, test_cpp.exe): Replace
"-debug -debugtype:cv" options with $(ldebug).
* NT_MAKEFILE ($(AO_SRC_DIR), clean): New target (copied from
NT_X64_THREADS_MAKEFILE file).
* NT_STATIC_THREADS_MAKEFILE: Remove.
* NT_X64_STATIC_THREADS_MAKEFILE: Likewise.
* NT_X64_THREADS_MAKEFILE: Likewise.
Ivan Maidanski [Thu, 20 Apr 2017 08:50:03 +0000 (11:50 +0300)]
Eliminate 'possible loss of data' compiler warnings in cord (MS VC)
* cord/cordbscs.c (CORD_cat_char_star, CORD_cat, CORD_from_fn_inner):
Add explicit cast in assignment of result->depth, result->len.
* cord/cordbscs.c (CORD_substr_checked): Change type of "j", "lim"
local variables from int to size_t.
* cord/cordbscs.c (CORD_init_min_len): Add explicit cast (to int) in
assignment of CORD_max_len.
* cord/cordxtra.c (CORD_ncmp): Add explicit cast (to long) when "avail"
local variable is updated.
* cord/cordxtra.c (CORD_chr, CORD_rchr, CORD_from_file_eager): Add
explicit cast to char (from int) for "c" local variable in assignment
of d.target and in CORD_ec_append call.
* cord/cordxtra.c (refill_cache): Add explicit cast to long (from
size_t) for line_start in fseek call.
* cord/tests/de.c (line_pos, fix_pos, do_command): Add explicit cast to
int in assignment of *c, line, col.
* cord/tests/de.c (do_command): Reset line, col and file_pos variables
(of different types) in separate statements.
* cord/tests/de_win.c (WinMain): Add explicit cast of msg.wParam to int
in return statement.
Ivan Maidanski [Wed, 19 Apr 2017 08:43:36 +0000 (11:43 +0300)]
Remove version info in 'de' cord test application
This version (4.1) is outdated and not needed (as it is a test app).
* cord/tests/de_win.rc (ABOUTBOX): Remove information about "de" test
application version.
* cord/tests/de_win.rc: Remove the commented out description adding
"de" icon.
Ivan Maidanski [Thu, 13 Apr 2017 16:19:00 +0000 (19:19 +0300)]
Eliminate 'incompatible function pointer' warning in mark_some (MinGW/x86)
* include/private/gc_priv.h [__MINGW32__ && __i386__ && GC_EXTERN]
(__MINGW_EXCPT_DEFINE_PSDK): Define (before any system header include);
this macro definition is needed only when extra/gc.c is compiled.
* mark.c [__MINGW32__ && __i386__] (__MINGW_EXCPT_DEFINE_PSDK): Define
(before include gc_pmark.h).
Ivan Maidanski [Fri, 31 Mar 2017 15:46:43 +0000 (18:46 +0300)]
Fix 'implicit declaration of pthread_sigmask' compiler warning
(fix commit 1554297)
* include/gc_pthread_redirects.h [GC_NO_PTHREAD_SIGMASK]: Include
signal.h even GC_pthread_sigmask is not declared (otherwise
pthread_sigmask is redefined to GC_pthread_sigmask first and then
signal.h is included thus causing REAL(pthread_sigmask) to stay
undefined).
* include/gc_pthread_redirects.h [GC_NO_PTHREAD_SIGMASK]
(GC_pthread_sigmask): Define it also if _BSD_SOURCE or _GNU_SOURCE.
* tests/test.c [CPPCHECK] (GC_PTHREAD_SIGMASK_NEEDED): Do not define
(because defining _GNU_SOURCE is sufficient to have GC_pthread_sigmask
declared).
* tests/test.c [CPPCHECK] (_GNU_SOURCE): Do not define unless GC_PTHREADS.
Ivan Maidanski [Thu, 30 Mar 2017 21:11:04 +0000 (00:11 +0300)]
Fix gc.h compliance to strict ANSI (pthreads)
If -std=cXX option is passed to gcc/clang then sigset_t is undefined,
thus GC_pthread_sigmask declaration should be omitted. However, this
symbol should be available during GC source code audit by cppcheck.
* include/gc_pthread_redirects.h [!GC_NO_PTHREAD_SIGMASK]
(GC_pthread_sigmask): Declare only if GC_PTHREAD_SIGMASK_NEEDED or
_POSIX_C_SOURCE >= 199506 or _XOPEN_SOURCE >= 500.
* tests/test.c [CPPCHECK] (GC_PTHREAD_SIGMASK_NEEDED): Define (before
include gc.h).
* tests/test.c [CPPCHECK && !_GNU_SOURCE] (_GNU_SOURCE): Likewise.
Ivan Maidanski [Thu, 30 Mar 2017 19:06:09 +0000 (22:06 +0300)]
Fix mixed include of GC public header and gc_priv.h in disclaim bench/test
Include gc_priv.h should be avoided in tests (if possible) or, at
least, this include should not precede include of the public GC
headers (because, e.g., gc_priv.h define GC_BUILD which influences
declspec of the GC public symbols in case of a shared library).
* tests/disclaim_bench.c: Move include gc_priv.h to be after
gc_disclaim.h; add comment .
* tests/disclaim_bench.c [HAVE_CONFIG_H]: Include "config.h" (before
include gc_disclaim.h).
* tests/disclaim_test.c [LINT2]: Do not include gc_priv.h; include
config.h instead.
* tests/disclaim_test.c [LINT2] (GC_API_PRIV): Define.
* tests/disclaim_test.c [LINT2] (GC_random): Declare the function
(instead of including gc_priv.h to get the prototype).
Ivan Maidanski [Thu, 30 Mar 2017 07:27:43 +0000 (10:27 +0300)]
Check that GC_WIN32_PTHREADS is not specified for Cygwin
* include/private/gcconfig.h [!CPPCHECK && GC_WIN32_PTHREADS
&& CYGWIN32]: Issue #error (because GC_WIN32_PTHREADS should not be
specified for Cygwin).
Ivan Maidanski [Thu, 23 Mar 2017 20:12:07 +0000 (23:12 +0300)]
Fix finalize.c compilation in 'strict ANSI' mode
This and some other GC .c files include gc_pmark.h directly (not
gc_priv.h), so the compiler complains that sigset_t (used in
gc_pthread_redirects.h) is undefined if 'strict ANSI' mode is on and
_GNU_SOURCE is not defined before including system headers.
* include/private/gc_pmark.h [(__linux__ || __GLIBC__ || __GNU__)
&& GC_PTHREADS && !GC_NO_PTHREAD_SIGMASK] (_GNU_SOURCE): Define (before
including other headers).
Ivan Maidanski [Thu, 23 Mar 2017 19:44:11 +0000 (22:44 +0300)]
Fix static assertion violation in LONG_MULT for 64-bit targets
* include/private/gc_pmark.h [MARK_BIT_PER_OBJ] (PUSH_CONTENTS_HDR):
Cast displ to unsigned32 when passed to LONG_MULT (it is safe because
displ is less than HBLKSIZE).
Ivan Maidanski [Thu, 23 Mar 2017 08:15:45 +0000 (11:15 +0300)]
Use longjmp in fault_handler_openbsd if siglongjmp unavailable (OpenBSD)
* os_dep.c [OPENBSD] (GC_jmp_buf_openbsd): Use JMP_BUF instead of
sigjmp_buf.
* os_dep.c [OPENBSD] (GC_fault_handler_openbsd): Use LONGJMP() instead
of siglongjmp().
* os_dep.c [OPENBSD] (GC_find_limit_openbsd, GC_skip_hole_openbsd): Use
SETJMP(buf) instead of sigsetjmp(buf, 1).
Ivan Maidanski [Wed, 22 Mar 2017 08:23:37 +0000 (11:23 +0300)]
New target (check-cpp) to avoid Makefile.direct parallel build issue
* Makefile.direct: Add comment about check-cpp.
* Makefile.direct (test_cpp): Replace dependency on "c++" with
"gc_cpp.o base_lib"; link with gc_cpp.o directly.
* Makefile.direct (check-cpp): New target (same as c++-t but do not
depend on c++ target and pass no arguments to test_cpp).
Ivan Maidanski [Mon, 20 Mar 2017 08:33:37 +0000 (11:33 +0300)]
Fix test_cpp and c++ parallel build in Makefile.direct
* Makefile.direct (test_cpp): Add dependency on c++ (and remove
dependency on base_lib and gc_cpp.o); do not link with gc_cpp.o
directly (it should be in gc.a).
Ivan Maidanski [Fri, 17 Mar 2017 08:05:56 +0000 (11:05 +0300)]
Allow HAVE_DL_ITERATE_PHDR to be defined by client (musl)
Do not redefine HAVE_DL_ITERATE_PHDR macro if already defined.
* dyn_load.c [OPENBSD>=200519] (HAVE_DL_ITERATE_PHDR): Do not define
if already defined.
* dyn_load.c [!USE_PROC_FOR_LIBRARIES && (__GLIBC__>=2
|| PLATFORM_ANDROID)] (HAVE_DL_ITERATE_PHDR): Likewise.
* dyn_load.c [!USE_PROC_FOR_LIBRARIES && HAVE_DL_ITERATE_PHDR
&& !DL_ITERATE_PHDR_STRONG] (dl_iterate_phdr): Define as weak symbol
(even if HAVE_DL_ITERATE_PHDR is defined outside this file).
Ivan Maidanski [Thu, 16 Mar 2017 07:22:29 +0000 (10:22 +0300)]
Eliminate 'ISO C forbids object to function pointer conversion' warning
* dyn_load.c [SOLARISDL && !USE_PROC_FOR_LIBRARIES
&& SUNOS53_SHARED_LIB] (GC_FirstDLOpenedLinkMap): Cast result of dlsym()
to word type before casting it to a function pointer.
* pthread_support.c [GC_USE_DLOPEN_WRAP] (GC_init_real_syms): Likewise.
Ivan Maidanski [Tue, 14 Mar 2017 22:58:41 +0000 (01:58 +0300)]
Fix GC_SIZE_MAX definition (Linux/musl-gcc)
* include/private/gc_priv.h [SIZE_MAX && !CPPCHECK] (GC_SIZE_MAX): Cast
SIZE_MAX to size_t explicitly (to workaround incorrect definition
of SIZE_MAX - e.g. it is defined as ~0ULL in musl-tools which is not
correct for a 32-bit target).
Ivan Maidanski [Tue, 14 Mar 2017 06:43:28 +0000 (09:43 +0300)]
Allow compilation of PROC_VDB code on Linux host (GC_NO_SYS_FAULT_H)
This is to check that PROC_VDB code compilation is ok. The code will
not work on a non-Solaris host, of course, because of lack of "pagedata"
file, so -D NO_INCREMENTAL should be additionally specified to avoid
abort during GC initialization (in gctest).
* os_dep.c [PROC_VDB && GC_NO_SYS_FAULT_H]: Do not include sys/fault.h
and sys/procfs.h.
* os_dep.c [PROC_VDB && GC_NO_SYS_FAULT_H] (PG_MODIFIED,
struct prpageheader, struct prasmap): Define explicitly.
* os_dep.c [PROC_VDB && GC_NO_SYS_FAULT_H && CPPCHECK] (GC_read_dirty):
Call GC_noop1 for dummy fields of prpageheader and prasmap.
* include/private/gc_pmark.h [MARK_BIT_PER_OBJ] (PUSH_CONTENTS_HDR):
Declare "obj_displ" local variable at the beginning of the block (not
after GC_STATIC_ASSERT).
Ivan Maidanski [Fri, 10 Mar 2017 16:13:52 +0000 (19:13 +0300)]
Remove Makefile KandRtest target (that supported K&R C compiler)
* Makefile.direct (test): Execute setjmp_test, gctest directly (instead
of depending on KandRtest).
* Makefile.direct (KandRtest): Remove (with the comment about K&R C
compiler).