+2011-12-17 Corinna Vinschen <vinschen@redhat.com>
+
+ * dcrt0.cc (_dll_crt0): Fix formatting.
+
+2011-12-17 Corinna Vinschen <vinschen@redhat.com>
+
+ * wow64.cc (wow64_revert_to_original_stack): Fix comment.
+ * wow64.h (wow64_respawn_process): Declare noreturn.
+
+2011-12-17 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * exceptions.cc (set_signal_mask): Remove useless debugging output.
+
+ * fhandler.cc (fhandler_base::write): Ditto.
+ (fhandler_base_overlapped::close): Cancel any ongoing I/O before
+ closing.
+ * syscalls.cc (write): Default to always reporting all writes in strace
+ output via syscall_printf.
+ * wait.cc (wait4): Fix debugging output. Use standard syscall leaver
+ output.
+
+2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ Implement fhandler reference counting.
+ * cygheap.h (cygheap_fdmanip::release): Make virtual.
+ (cygheap_fdnew::~cygheap_fdnew): New destructor increments reference
+ count when fd has been allocated.
+ (cygheap_fdget::fh): New (old?) field.
+ (cygheap_fdget::cygheap_fdget): Increment reference count when we've
+ found an active fd. Set fh appropriately.
+ (cygheap_fdget::~cygheap_fdget): Decrement reference count when
+ appropriate. Delete fh if reference count goes to zero.
+ (cygheap_fdget::release): New function. Do more bookkeping on release.
+ * dtable.cc (dtable::release): Change from void to boolean return.
+ Only delete the fhandler when its reference count is <= 0 (this should
+ be a fairly unusual case). Return true if fhandler has been deleted.
+ (cygwin_attach_handle_to_fd): Increment reference count when fh is
+ assigned.
+ (dtable::init_std_file_from_handle): Ditto.
+ * dtable.h (dtable::release): Change return to boolean.
+ * fhandler.cc (fhandler_base::fhandler_base): Set new isclosed flag to
+ false. Set _refcnt to zero.
+ (fhandler_base::close): Simplify paranoid debugging output. Set new
+ isclosed() flag.
+ (fhandler_base_overlapped::wait_overlapped): Use isclosed() flag to
+ avoid querying the exception handle.
+ * fhandler.h (fhandler_base::_refcnt): New field.
+ (fhandler_base::refcnt): New function.
+ (fhandler_base::isclosed): Implement.
+ (fhandler_base::fhandler_base): Set isclosed to false.
+
+ * syscalls.cc: Remove space after function before parentheses for
+ several strace printfs.
+ (dup): Add standard strace "leaver" code.
+ (dup2): Ditto.
+ (dup3): Ditto.
+ (remove): Ditto.
+ (getpid): Ditto.
+ (getppid): Ditto.
+ (lseek64): Fix strace debugging to correctly use %R.
+
+ * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Avoid sending
+ signals to other processes if we're debugging since it can cause a
+ deadlock with the calling debugger.
+
+ * exceptions.cc (_cygtls::call_signal_handler): Add debugging-only
+ strace output.
+
+2011-12-16 Corinna Vinschen <vinschen@redhat.com>
+
+ * dcrt0.cc (child_info_fork::alloc_stack): Correctly check if the
+ parent stack fits into the child stack. Align comment.
+ * wow64.cc (wow64_eval_expected_main_stack): New function to fetch
+ expected addresses of main thread stack from PE/COFF image header
+ values.
+ (wow64_test_for_64bit_parent): Fix comment. Check current stack
+ against real expected main thread stack addresses.
+ (wow64_revert_to_original_stack): Fix and add comments. Check memory
+ against real expected main thread stack addresses. Use orignal stack
+ if reserved area is >= 256K.
+
+2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * gendef (sigdelayed): Remember to pop all of the saved registers.
+ (sigreturn): Add "leave" label.
+
+2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Fix
+ unresolved access of wores in successful situations.
+
+2011-12-16 Corinna Vinschen <vinschen@redhat.com>
+
+ * Makefile.in (DLL_OFILES): Add wow64.o.
+ * dcrt0.cc (CYGWIN_GUARD): Drop execute permission for stack, it's
+ not used for stacks by the OS either.
+ (child_info_fork::alloc_stack_hard_way): Ditto.
+ (child_info_fork::alloc_stack): Don't alloc_stack_hard_way under WOW64
+ if forked from a 64 bit parent. Set child's StackBase to parent's
+ StackBase. Add comments to explain why.
+ (wow64_respawn): Move to wow64.cc.
+ (wow64_started_from_native64): Move to wow64.cc.
+ (respawn_wow64_process): Move to wow64.cc.
+ (dll_crt0_0): Drop wow64_test_stack_marker and move stack test into
+ wow64_test_for_64bit_parent function. Don't return early if WOW64
+ process has been started from native 64 bit process.
+ (_dll_crt0): Implement moving stack for WOW64 processes started from
+ native 64 bit process.
+ * wow64.cc: New file.
+ (wow64_has_64bit_parent): Rename from wow64_respawn.
+ (wow64_test_for_64bit_parent): Rename from wow64_started_from_native64.
+ Change comment.
+ (wow64_revert_to_original_stack): New function.
+ (wow64_respawn_process): Rename from respawn_wow64_process for symmetry.
+ * wow64.h: New file.
+
+2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * exceptions.cc (_cygtls::call_signal_handler): Fix debugging to not go
+ to console.
+ * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Add temporary
+ kludge to work around problem of make closing an fhandle while it is
+ being read.
+ * gendef (sigdelayed): Don't call a function if sig has been cleared.
+
+ * sigproc.h (cygwait): Simplify slightly.
+
+2011-12-14 Corinna Vinschen <vinschen@redhat.com>
+
+ * autoload.cc (GetSystemWow64DirectoryW): Define.
+ (GetVolumePathNamesForVolumeNameW): Define.
+ * fhandler_process.cc (get_volume_path_names_for_volume_name): New
+ static function to workaround missing GetVolumePathNamesForVolumeNameW
+ function in Windows 2000.
+ (dos_drive_mappings::dos_drive_mappings): Call
+ get_volume_path_names_for_volume_name instead of
+ GetVolumePathNamesForVolumeNameW.
+
+2011-12-13 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * 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.
+
+2011-12-13 Corinna Vinschen <vinschen@redhat.com>
+
+ * netdb.cc (open_system_file): Avoid MS-DOS path warning.
+
+2011-12-13 Corinna Vinschen <vinschen@redhat.com>
+
+ * path.cc (conv_path_list): Fix a condition.
+ (cygwin_conv_path): Revert WIN_A conversion to current locale codeset.
+
+2011-12-13 Corinna Vinschen <vinschen@redhat.com>
+
+ * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Call
+ file_get_fnoi instead of NtQueryInformationFile.
+ * path.cc (file_get_fnoi): New helper function to collect a
+ FILE_NETWORK_OPEN_INFORMATION block.
+ (symlink_info::check): Call file_get_fnoi rather than
+ NtQueryInformationFile to collect a FILE_NETWORK_OPEN_INFORMATION block.
+ * path.h (file_get_fnoi): Declare.
+
+2011-12-13 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * times.cc (hires_ns::resolution): Don't return less than 1.
+
+2011-12-12 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * cygthread.h (cygthread::name): Very minor formatting tweak.
+
+ * exceptions.cc (_cygtls::call_signal_handler): Add paranoid debugging
+ output.
+
+ * sigproc.h (cygwait): Call signal handler when signal is detected and
+ loop as appropriate.
+ * fhandler.h (fhandler_base_overlapped::wait_return): Remove
+ overlapped_signal.
+ * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Remove
+ restartable signal accommodations in light of cygwait improvements.
+ (fhandler_base_overlapped::raw_read): Remove now-obsolete signal loop
+ behavior.
+ (fhandler_base_overlapped::raw_write): Ditto.
+ * fhandler_console.cc (fhandler_console::read): Ditto.
+ * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
+ (fhandler_serial::raw_write): Ditto.
+ * fhandler_tty.cc (fhandler_pty_slave::read): Ditto.
+
+ * ioctl.cc (ioctl): Add standard syscall introducer and leaver debug
+ output.
+
+2011-12-12 Corinna Vinschen <vinschen@redhat.com>
+
+ * fhandler_process.cc (dos_drive_mappings): Partially rewrite to
+ handle volumes mounted into juntion points correctly.
+
+2011-12-12 Corinna Vinschen <vinschen@redhat.com>
+
+ * fhandler_process.cc (dos_drive_mappings::dos_drive_mappings): Fully
+ resolve symbolic links returned by QueryDosDeviceW. Explain why.
+
+2011-12-12 Corinna Vinschen <vinschen@redhat.com>
+
+ * mount.cc (fs_info::update): Set has_buggy_reopen for Netapps as well.
+
+2011-12-12 Corinna Vinschen <vinschen@redhat.com>
+ Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * dcrt0.cc (wow64_respawn): New static variable.
+ (wow64_started_from_native64): New function to check if a WOW64
+ process got started from a native 64 bit process.
+ (respawn_wow64_process): New function to respawn process.
+ (dll_crt0_0): When started from a native parent, check if parent
+ is a 64 bit process. If so, return early.
+ (_dll_crt0): Respawn WOW64 process here if required.
+ * init.cc (respawn_wow64_process): Remove.
+ (dll_entry): Rename wow64_test_stack_marker to test_stack_marker.
+ Drop WOW64 test here.
+
+2011-12-11 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * pipe.cc (fhandler_pipe::create): Use debug_printf to print debugging
+ info since this isn't a "syscall".
+ (pipe_worker): New function created from _pipe().
+ (_pipe): Use pipe_worker to create a pipe. Use standard syscall strace
+ reporting on exit.
+ (pipe): Ditto.
+ (pipe2): Ditto.
+
+2011-12-10 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * select.cc (select_stuff::wait): Very minor formatting fix.
+ (peek_windows): Report on HWND handle used in queries.
+ * select.h: Update copyright.
+ * sigproc.h (cygwait): Eliminate multi-argument variety since more
+ general implementation may cause odd problems in select. Also force to
+ always be inline.
+
+2011-12-10 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * sigproc.h (cygwait): Delete duplicate va_start and add matching
+ va_end.
+
+2011-12-10 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * sigproc.h (cygwait): Tweak test for cancellable event to make it a
+ little more clear.
+
+2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * exceptions.cc (ctrl_c_handler): YA in a series or reversions. Put
+ back _my_tls.remove along with a comment.
+ (sigpacket::process): Remove code which now causes a gdb deadlock.
+ * sigproc.cc (_cygtls::signal_exit): Signal debugger with signal number
+ earlier.
+
+2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * dllfixdbg: Work around annoying gdb warning about missing
+ .gnu_debuglink.
+
+2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ Rename cygWFMO to cygwait throughout and use the magic of polymorphism
+ to "wait for stuff".
+ * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Use
+ simplified arg form of cygwait.
+ * fhandler_console.cc (fhandler_console::read): Ditto.
+ * fhandler_audio.cc (fhandler_dev_dsp::Audio_out::waitforspac): Ditto.
+ (fhandler_dev_dsp::Audio_in::waitfordata): Ditto.
+ * fhandler_fifo.cc (fhandler_fifo::wait): Ditto.
+ * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
+ (fhandler_serial::raw_write): Ditto.
+ * select.cc (cygwin_select): Ditto.
+ * sigproc.h (cygwait): Rename from cygWFMO. Define two argument and
+ single argument forms of this function.
+
+ * fhandler_tty.cc (fhandler_pty_slave::open): Use method to query if
+ tty is open.
+ (fhandler_pty_slave::read): Send SIGHUP when master is detected as
+ closed.
+ (fhandler_pty_common::close): Close input_available_event in callers
+ since master may need to signal it first.
+ (fhandler_pty_master::close): Lie and set input_available_event when
+ closing, then close input_available_event.
+ (fhandler_pty_slave::close): Close input_available_event explicitly
+ here.
+ * tty.h (tty::is_master_closed): Declare new method.
+
+2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * sigproc.cc (signal_exit): Revert reversion of 2011-12-04 change
+ since, otherwise, you see hangs when the signal pipe is closed.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * select.cc (cygwin_select): Fifth time is the charm.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * select.cc (cygwin_select): Make sure that 0 is returned when sel.wait
+ times out.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * include/sys/wait.h: Add in all c++ functions.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * select.cc (select_stuff::wait): Temporarily disallow APCS.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * include/sys/wait.h: Ensure that C++ functions are only used when
+ using C++.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * select.cc (cygwin_select): Make sure that poll is called when
+ appropriate.
+
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * dll_init.cc (dll_dllcrt0): Don't try to initialize dll data if we're
+ dynamically loaded since fork() doesn't work in that scenario anyway.
+ (dll_dllcrt0_1): Don't accommodate dynamically loaded dlls.
+ * exceptions.cc (ctrl_c_handler): Don't lock the process; there's too
+ much risk of deadlock.
+ * sigproc.cc (_cygtls::remove_wq): Don't try to remove anything from
+ the waitq if there is obviously nothing there.
+ * strace.cc (strace::activate): Allow stracing dynamically loaded
+ cygwin1.dll.
+
+2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * fhandler_termios.cc (tty_min::kill_pgrp): Don't send __SIGSETPGRP
+ to ourselves since presumably we are already initialized.
+
+2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * select.cc (cygwin_select): Add common introducer and leaver debug
+ output.
+ (select_stuff::poll): Remove unneeded debugging.
+
+2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * exceptions.cc (ctrl_c_handler): Remove _my_tls.remove since it can
+ cause deadlocks during exec and will eventually be handled anyway.
+
+2011-12-07 Corinna Vinschen <vinschen@redhat.com>
+
+ * spawn.cc (child_info_spawn::worker): Add CREATE_BREAKAWAY_FROM_JOB
+ to all spawned processes. Explain why.
+
+2011-12-06 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * fhandler_fifo.cc (fhandler_fifo::wait): Fix stupid typo and actually
+ wait for the handle.
+
+2011-12-05 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * sigproc.cc (close_my_readsig): New function.
+ (_cygtls::signal_exit): Close my_readsig via close_my_readsig(),
+ avoiding communication with the signal pipe.
+ (wait_sig): Close my_readsig via close_my_readsig().
+
+2011-12-05 Corinna Vinschen <vinschen@redhat.com>
+
+ * mmap.cc (mlock): Replace LOCK_VM_IN_WSL with correct MAP_PROCESS.
+ (munlock): Ditto.
+ * ntdll.h: Rearrange to have all preprocessor definitions at the start
+ of the file. Add comments to each definition block.
+ (MAP_PROCESS): Rename from LOCK_VM_IN_WSL.
+ (MAP_SYSTEM): Rename from LOCK_VM_IN_RAM.
+
+2011-12-04 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * sigproc.h (cygWFMO): Don't assume that cancellable event is always
+ available.
+ * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::waitforspace): Use
+ cygWFMO instead of WaitForMultipleObjects.
+ (fhandler_dev_dsp::Audio_in::waitfordata): Ditto.
+ * fhandler_fifo.cc (fhandler_fifo::wait): Ditto.
+ * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
+ (fhandler_serial::raw_write): Ditto.
+ * fhandler_tty.cc (fhandler_pty_slave::read): Ditto.
+ * select.cc (cygwin_select): Ditto for degenerate case.
+
+2011-12-04 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * sigproc.h (cygWFMO): Move inside "INSIDE_CYGWIN" #ifdef.
+
+2011-12-04 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * exceptions.cc (exception::handle): Drop abbreviation for "exception"
+ since I never remember what it stands for.
+ (sig_handle_tty_stop): Remove obsolete call to reset_signal_arrived.
+ (_cygtls::call_signal_handler): Rework to grab signal information from
+ _main_tls if none is set for _my_tls. Try harder to keep thread
+ locked.
+ (reset_signal_arrived): Delete.
+ * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Use new
+ cygWFMO call to wait for an event + standard cygwin stuff. Modify
+ debug output to acccomodate new function.
+ * fhandler_console.cc (fhandler_console::read): Replace
+ WaitForMultipleObjects with cygWFMO.
+ * fhandler_socket.cc (get_inet_addr): Add comment.
+ * gendef (_sigdelayed): Remove call to reset_signal_arrived.
+ * sigproc.cc (_cygtls::signal_exit): Don't close my_readsig here unless
+ we're in the signal thread.
+ (create_signal_arrived): Create signal_arrived as auto-reset so that only
+ one thread is woken when a signal arrives.
+ * sigproc.h (cygWFMO): New function.
+ (reset_signal_arrived): Delete declaration.
+
+2011-12-03 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * mmap.cc (mlock): Add standard syscall return value debugging output.
+ (munlock): Ditto.
+ (posix_madvise): Ditto.
+
+ * signal.cc: Remove obsolete sigcatchers stuff throughout.
+ (sigaction_worker): Add function name parameter and use it to show
+ standard syscall return value debugging output. Also add fault
+ protection.
+ (sigaction): Accommodate extra argument to sigaction_worker.
+ (siginterrupt): Ditto.
+ * syscalls.cc (read): Remove obsolete sigcatchers stuff.
+ (readv): Ditto.
+
2011-12-03 Corinna Vinschen <vinschen@redhat.com>
* mmap.cc (mlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Drop
* pinfo.h (_pinfo::set_ctty): Change third parameter to
fhandler_termios *.
- * sigproc.cc (handle_sigsuspend): Don't special-case non-main threads.
+ * exceptions.cc (handle_sigsuspend): Don't special-case non-main threads.
2011-04-15 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>