https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=e3de6b0a4d7fc1f00b5961edc9e8e5a7a9e0a09e
commit e3de6b0a4d7fc1f00b5961edc9e8e5a7a9e0a09e Author: Corinna Vinschen <cori...@vinschen.de> Date: Sun Aug 30 21:35:23 2015 +0200 cygcheck.cc: Fix debugger problem * cygcheck.cc (load_cygwin): Only unload cygwin DLL if not running under a debugger. Explain why. Signed-off-by: Corinna Vinschen <cori...@vinschen.de> Diff: --- winsup/utils/ChangeLog | 5 +++++ winsup/utils/cygcheck.cc | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 080502e..d60691a 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,5 +1,10 @@ 2015-08-30 Corinna Vinschen <cori...@vinschen.de> + * cygcheck.cc (load_cygwin): Only unload cygwin DLL if not running + under a debugger. Explain why. + +2015-08-30 Corinna Vinschen <cori...@vinschen.de> + * cygcheck.cc (dump_sysinfo): Correctly handle Windows 10/Server 2016. Add missing product types. diff --git a/winsup/utils/cygcheck.cc b/winsup/utils/cygcheck.cc index 1cf4875..4538e1b 100644 --- a/winsup/utils/cygcheck.cc +++ b/winsup/utils/cygcheck.cc @@ -2340,7 +2340,8 @@ load_cygwin (int& argc, char **&argv) char **av = (char **) cygwin_internal (CW_ARGV); if (av && ((uintptr_t) av != (uintptr_t) -1)) { - /* Copy cygwin's idea of the argument list into this Window application. */ + /* Copy cygwin's idea of the argument list into this Window + application. */ for (argc = 0; av[argc]; argc++) continue; argv = (char **) calloc (argc + 1, sizeof (char *)); @@ -2352,8 +2353,8 @@ load_cygwin (int& argc, char **&argv) char **envp = (char **) cygwin_internal (CW_ENVP); if (envp && ((uintptr_t) envp != (uintptr_t) -1)) { - /* Store path and revert to this value, otherwise path gets overwritten - by the POSIXy Cygwin variation, which breaks cygcheck. + /* Store path and revert to this value, otherwise path gets + overwritten by the POSIXy Cygwin variation, which breaks cygcheck. Another approach would be to use the Cygwin PATH and convert it to Win32 again. */ char *path = NULL; @@ -2371,7 +2372,10 @@ load_cygwin (int& argc, char **&argv) putenv (path); } } - FreeLibrary (h); + /* GDB chokes when the DLL got unloaded and, for some reason, fails to set + any breakpoint after the fact. */ + if (!IsDebuggerPresent ()) + FreeLibrary (h); } int