diff options
author | Christopher Faylor <me@cgf.cx> | 2011-12-14 00:06:31 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2011-12-14 00:06:31 +0400 |
commit | 45d7b637fa74ac79469892653188e2554f151633 (patch) | |
tree | 1a23cbc08e233079ef13732fc7f36525befa2938 /winsup/cygwin/dcrt0.cc | |
parent | 8d1bda71b4538fe0c4dee14f057645da33443a9e (diff) |
* dcrt0.cc (init_windows_system_directory): Record system_wow64_directory
information.
* exceptions.cc (_cygtls::inside_kernel): Modernize comment. Consider
executing a DLL from the Wow64 directory as being "in the kernel".
(_cygtls::call_signal_handler): For now, only deal with main_tls signals if
main_tls is known to be executing in the cygwin DLL. To more closely emulate
linux, consider the operation to be restartable if not executing in the main
thread.
* globals.cc (windows_system_directory): Remove NO_COPY.
(windows_system_directory_length): Ditto.
(system_wow64_directory): New variable.
(system_wow64_directory_length): Ditto.
* select.cc (cygwin_select): Don't issue a EINTR on non-main threads since that
seems to be what Linux does. Add missing break to signal case/switch.
(select_stuff::wait): Don't issue a EINTR on non-main threads since that seems
to be what Linux does. Remove now-unneeded accommodation for
WAIT_IO_COMPLETION. Add a comment.
* sigproc.h (cygwait): Ditto. Don't return if signal_received noticed and it's
not the main thread.
* signal.cc (sigprocmask): Add standard syscall debug stuff.
* thread.cc (pthread_sigmask): Ditto.
Diffstat (limited to 'winsup/cygwin/dcrt0.cc')
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 5364e4dd8..b6392acf2 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -638,12 +638,23 @@ child_info_spawn::handle_spawn () static void init_windows_system_directory () { - windows_system_directory_length = - GetSystemDirectoryW (windows_system_directory, MAX_PATH); - if (windows_system_directory_length == 0) - api_fatal ("can't find windows system directory"); - windows_system_directory[windows_system_directory_length++] = L'\\'; - windows_system_directory[windows_system_directory_length] = L'\0'; + if (!windows_system_directory_length) + { + windows_system_directory_length = + GetSystemDirectoryW (windows_system_directory, MAX_PATH); + if (windows_system_directory_length == 0) + api_fatal ("can't find windows system directory"); + windows_system_directory[windows_system_directory_length++] = L'\\'; + windows_system_directory[windows_system_directory_length] = L'\0'; + + system_wow64_directory_length = + GetSystemWow64DirectoryW (system_wow64_directory, MAX_PATH); + if (system_wow64_directory_length) + { + system_wow64_directory[system_wow64_directory_length++] = L'\\'; + system_wow64_directory[system_wow64_directory_length] = L'\0'; + } + } } static bool NO_COPY wow64_respawn = false; |