From: Ivan Maidanski Date: Thu, 12 Sep 2019 07:08:06 +0000 (+0300) Subject: New macro (CONSOLE_LOG) to enable logging to console on Win32 X-Git-Tag: upstream/8.0.4~84 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c2b191639b73d761d94f5deea8b8a65d44fd57f0;p=platform%2Fupstream%2Flibgc.git New macro (CONSOLE_LOG) to enable logging to console on Win32 The macro is effective only on the Win32 (MSWIN32) target. It changes the logging facility to be the same as on Cygwin and other Unix-like targets. * doc/README.macros (CONSOLE_LOG): Document new macro. * include/private/gc_priv.h [THREADS && MSWIN32 && CONSOLE_LOG] (GC_write_cs): Do not declare. * include/private/gc_priv.h [THREADS && MSWIN32 && CONSOLE_LOG && GC_ASSERTIONS] (GC_write_disabled): Likewise. * misc.c [CONSOLE_LOG && MSWIN32]: Include fcntl.h, sys/types.h, sys/stat.h. * misc.c [GC_WIN32_THREADS && MSWIN32 && CONSOLE_LOG] (GC_write_cs): Do not define. * win32_threads.c [GC_ASSERTIONS && MSWIN32 && CONSOLE_LOG] (GC_write_disabled): Likewise. * misc.c [MSWIN32 && CONSOLE_LOG] (GC_stdout, GC_stderr, GC_log): Define STATIC variable (of int type). * misc.c [GC_WIN32_THREADS && MSWIN32 && CONSOLE_LOG] (GC_init): Do not call InitializeCriticalSection(&GC_write_cs); handle GC_LOG_FILE and GC_ONLY_LOG_TO_FILE environment variables. * misc.c [GC_WIN32_THREADS && MSWIN32 && CONSOLE_LOG] (GC_deinit): Do not call DeleteCriticalSection(&GC_write_cs). * misc.c [MSWIN32 && CONSOLE_LOG] (IF_NEED_TO_LOCK, getWinRTLogPath, GC_CreateLogFile): Do not define. * misc.c [!PCR && !SMALL_CONFIG && !GC_ANDROID_LOG && GC_WIN32_THREADS && GC_ASSERTIONS MSWIN32 && CONSOLE_LOG] (GC_default_on_abort): Do not use GC_write_disabled. * win32_threads.c [MSWIN32 && CONSOLE_LOG] (GC_stop_world): Do not use GC_write_disabled and GC_write_cs. --- diff --git a/doc/README.macros b/doc/README.macros index 3bb6c21..ab68e98 100644 --- a/doc/README.macros +++ b/doc/README.macros @@ -549,6 +549,9 @@ GC_ONLY_LOG_TO_FILE Don't redirect GC stdout and stderr to the log file GC_ANDROID_LOG (Android only) Output error/debug information to Android log. +CONSOLE_LOG (Win32 only) Output error/debug information to stdout and + stderr. + GC_DONT_EXPAND Don't expand the heap unless explicitly requested or forced to. GC_USE_ENTIRE_HEAP Causes the non-incremental collector to use the diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index 03fc1d2..fdf59a2 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -2348,7 +2348,7 @@ GC_EXTERN signed_word GC_bytes_found; #endif #ifdef THREADS -# if defined(MSWIN32) || defined(MSWINCE) +# if (defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE) GC_EXTERN CRITICAL_SECTION GC_write_cs; /* defined in misc.c */ # ifdef GC_ASSERTIONS GC_EXTERN GC_bool GC_write_disabled; diff --git a/misc.c b/misc.c index 9d02f65..8be929d 100644 --- a/misc.c +++ b/misc.c @@ -36,7 +36,8 @@ # include #endif -#if defined(UNIX_LIKE) || defined(CYGWIN32) || defined(SYMBIAN) +#if defined(UNIX_LIKE) || defined(CYGWIN32) || defined(SYMBIAN) \ + || (defined(CONSOLE_LOG) && defined(MSWIN32)) # include # include # include @@ -749,7 +750,8 @@ GC_API int GC_CALL GC_is_init_called(void) return GC_is_initialized; } -#if (defined(MSWIN32) || defined(MSWINCE)) && defined(THREADS) +#if defined(GC_WIN32_THREADS) \ + && ((defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE)) GC_INNER CRITICAL_SECTION GC_write_cs; #endif @@ -808,15 +810,17 @@ GC_API int GC_CALL GC_is_init_called(void) #if !defined(OS2) && !defined(MACOS) && !defined(GC_ANDROID_LOG) \ && !defined(NN_PLATFORM_CTR) && !defined(NINTENDO_SWITCH) \ - && !defined(MSWIN32) && !defined(MSWINCE) + && (!defined(MSWIN32) || defined(CONSOLE_LOG)) && !defined(MSWINCE) STATIC int GC_stdout = GC_DEFAULT_STDOUT_FD; STATIC int GC_stderr = GC_DEFAULT_STDERR_FD; STATIC int GC_log = GC_DEFAULT_STDERR_FD; - GC_API void GC_CALL GC_set_log_fd(int fd) - { - GC_log = fd; - } +# ifndef MSWIN32 + GC_API void GC_CALL GC_set_log_fd(int fd) + { + GC_log = fd; + } +# endif #endif #ifdef MSGBOX_ON_ERROR @@ -972,8 +976,9 @@ GC_API void GC_CALL GC_init(void) /* else */ InitializeCriticalSection(&GC_allocate_ml); } # endif -# endif /* GC_WIN32_THREADS */ -# if (defined(MSWIN32) || defined(MSWINCE)) && defined(THREADS) +# endif /* GC_WIN32_THREADS && !GC_PTHREADS */ +# if defined(GC_WIN32_THREADS) \ + && ((defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE)) InitializeCriticalSection(&GC_write_cs); # endif GC_setpagesize(); @@ -997,6 +1002,7 @@ GC_API void GC_CALL GC_init(void) # endif # endif # if ((defined(UNIX_LIKE) && !defined(GC_ANDROID_LOG)) \ + || (defined(CONSOLE_LOG) && defined(MSWIN32)) \ || defined(CYGWIN32) || defined(SYMBIAN)) && !defined(SMALL_CONFIG) { char * file_name = TRUSTED_STRING(GETENV("GC_LOG_FILE")); @@ -1436,14 +1442,16 @@ GC_API void GC_CALL GC_enable_incremental(void) if (GC_is_initialized) { /* Prevent duplicate resource close. */ GC_is_initialized = FALSE; -# if defined(THREADS) && (defined(MSWIN32) || defined(MSWINCE)) - DeleteCriticalSection(&GC_write_cs); +# if defined(GC_WIN32_THREADS) && (defined(MSWIN32) || defined(MSWINCE)) +# if !defined(CONSOLE_LOG) || defined(MSWINCE) + DeleteCriticalSection(&GC_write_cs); +# endif DeleteCriticalSection(&GC_allocate_ml); # endif } } -#if defined(MSWIN32) || defined(MSWINCE) +#if (defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE) # if defined(_MSC_VER) && defined(_DEBUG) && !defined(MSWINCE) # include @@ -1701,16 +1709,18 @@ GC_API void GC_CALL GC_enable_incremental(void) # define WRITE(level, buf, unused_len) \ __android_log_write(level, GC_ANDROID_LOG_TAG, buf) -# elif defined(NN_PLATFORM_CTR) - int n3ds_log_write(const char* text, int length); -# define WRITE(level, buf, len) n3ds_log_write(buf, len) -# elif defined(NINTENDO_SWITCH) - int switch_log_write(const char* text, int length); -# define WRITE(level, buf, len) switch_log_write(buf, len) +#elif defined(NN_PLATFORM_CTR) + int n3ds_log_write(const char* text, int length); +# define WRITE(level, buf, len) n3ds_log_write(buf, len) + +#elif defined(NINTENDO_SWITCH) + int switch_log_write(const char* text, int length); +# define WRITE(level, buf, len) switch_log_write(buf, len) #else -# if !defined(AMIGA) && !defined(MSWIN_XBOX1) && !defined(SN_TARGET_ORBIS) \ - && !defined(SN_TARGET_PSP2) && !defined(__CC_ARM) +# if !defined(AMIGA) && !defined(MSWIN32) && !defined(MSWIN_XBOX1) \ + && !defined(SN_TARGET_ORBIS) && !defined(SN_TARGET_PSP2) \ + && !defined(__CC_ARM) # include # endif @@ -1750,7 +1760,7 @@ GC_API void GC_CALL GC_enable_incremental(void) } # define WRITE(f, buf, len) GC_write(f, buf, len) -#endif /* !MSWIN32 && !OS2 && !MACOS && !GC_ANDROID_LOG */ +#endif /* !MSWINCE && !OS2 && !MACOS && !GC_ANDROID_LOG */ #define BUFSZ 1024 @@ -1922,8 +1932,8 @@ GC_API GC_warn_proc GC_CALL GC_get_warn_proc(void) /* Avoid calling GC_err_printf() here, as GC_on_abort() could be */ /* called from it. Note 1: this is not an atomic output. */ /* Note 2: possible write errors are ignored. */ -# if defined(THREADS) && defined(GC_ASSERTIONS) \ - && (defined(MSWIN32) || defined(MSWINCE)) +# if defined(GC_WIN32_THREADS) && defined(GC_ASSERTIONS) \ + && ((defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE)) if (!GC_write_disabled) # endif { diff --git a/win32_threads.c b/win32_threads.c index dac29e1..6bb99bb 100644 --- a/win32_threads.c +++ b/win32_threads.c @@ -1332,7 +1332,8 @@ STATIC void GC_suspend(GC_thread t) GC_on_thread_event(GC_EVENT_THREAD_SUSPENDED, THREAD_HANDLE(t)); } -#if defined(GC_ASSERTIONS) && (defined(MSWIN32) || defined(MSWINCE)) +#if defined(GC_ASSERTIONS) \ + && ((defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE)) GC_INNER GC_bool GC_write_disabled = FALSE; /* TRUE only if GC_stop_world() acquired GC_write_cs. */ #endif @@ -1357,7 +1358,7 @@ GC_INNER void GC_stop_world(void) # if !defined(GC_NO_THREADS_DISCOVERY) || defined(GC_ASSERTIONS) GC_please_stop = TRUE; # endif -# if defined(MSWIN32) || defined(MSWINCE) +# if (defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE) GC_ASSERT(!GC_write_disabled); EnterCriticalSection(&GC_write_cs); /* It's not allowed to call GC_printf() (and friends) here down to */ @@ -1399,7 +1400,7 @@ GC_INNER void GC_stop_world(void) } } } -# if defined(MSWIN32) || defined(MSWINCE) +# if (defined(MSWIN32) && !defined(CONSOLE_LOG)) || defined(MSWINCE) # ifdef GC_ASSERTIONS GC_write_disabled = FALSE; # endif