]> sourceware.org Git - newlib-cygwin.git/log
newlib-cygwin.git
4 years agoCygwin: FIFO: make opening a writer more robust
Ken Brown [Tue, 17 Mar 2020 18:14:47 +0000 (14:14 -0400)]
Cygwin: FIFO: make opening a writer more robust

- Make read_ready a manual-reset event.

- Signal read_ready in open instead of in the listen_client_thread.

- Don't reset read_ready when the listen_client thread terminates;
  instead do it in close().

- Rearrange open and change its error handling.

- Add a wait_open_pipe method that waits for a pipe instance to be
  available and then calls open_pipe.  Use it when opening a writer if
  we can't connect immediately.  This can happen if the system is
  heavily loaded and/or if many writers are trying to open
  simultaneously.

4 years agoCygwin: FIFO: fix hit_eof
Ken Brown [Sun, 26 Apr 2020 13:38:46 +0000 (09:38 -0400)]
Cygwin: FIFO: fix hit_eof

According to Posix, a FIFO open for reading is at EOF if it is empty
and there are no writers open.

The only way to test this is to poll the fifo_client_handlers as in
raw_read and select.cc:peek_fifo.  The current hit_eof instead relies
on the value of nconnected, which can be out of date.  On the one
hand, it doesn't take into account writers that were connected but
have since closed.  On the other hand, it doesn't take into account
writers that are in the process of opening but haven't yet connected.

Fix this by introducing a maybe_eof method that tentatively assumes
EOF if there are no connected writers after polling.  Then check for
writers currently opening (via a new 'writer_opening' event), and wait
for the fifo_reader_thread to record any new connection that was made
while we were polling.

To handle the needs of peek_fifo, replace the get_fc_handle method
by a get_fc_handler method, and add a fifo_client_handler::get_state
method.

Remove the is_connected method, which was used only in peek_fifo and
is no longer needed.

Remove the nconnected data member, which was used only for the flawed
hit_eof.

Add some comments about events to fhandler.h.

4 years agoCygwin: FIFO: dup/fork/exec: make sure child starts unlocked
Ken Brown [Mon, 4 May 2020 15:36:20 +0000 (11:36 -0400)]
Cygwin: FIFO: dup/fork/exec: make sure child starts unlocked

There can be deadlocks if the child starts with its fifo_client_lock
in the locked state.

4 years agoCygwin: FIFO: honor the flags argument in dup
Ken Brown [Wed, 25 Mar 2020 13:31:29 +0000 (09:31 -0400)]
Cygwin: FIFO: honor the flags argument in dup

Also improve the error handling.

4 years agoCygwin: FIFO: remove the arm method
Ken Brown [Thu, 23 Apr 2020 12:14:05 +0000 (08:14 -0400)]
Cygwin: FIFO: remove the arm method

There's no reason to check for errors when we set read_ready or
write_ready.  We don't do that for other events.

4 years agoCygwin: FIFO: simplify the listen_client_thread code
Ken Brown [Wed, 29 Apr 2020 22:53:05 +0000 (18:53 -0400)]
Cygwin: FIFO: simplify the listen_client_thread code

Always return 0; no one is doing anything with the return value
anyway.

Remove the return value from stop_listen_client.

Make the connection event auto-reset, so that we don't have to reset
it later.

Simplify the process of connecting a bogus client when thread
termination is signaled.

Make some failures fatal.

Remove the unnecessary extra check for thread termination near the end
of listen_client_thread.

4 years agoCygwin: FIFO: change the fifo_client_connect_state enum
Ken Brown [Wed, 6 May 2020 22:39:26 +0000 (18:39 -0400)]
Cygwin: FIFO: change the fifo_client_connect_state enum

Make the values correspond to the possible return values of
fifo_client_handler::pipe_state().

When cleaning up the fc_handler list in listen_client_thread(), don't
delete handlers in the fc_closing state.  I think the pipe might still
have input to be read in that case.

Set the state to fc_closing later in the same function if a connection
is made and the status returned by NtFsControlFile is
STATUS_PIPE_CLOSING.

In raw_read, don't error out if NtReadFile returns an unexpected
status; just set the state of that handler to fc_error.  One writer in
a bad state doesn't justify giving up on reading.

4 years agoCygwin: FIFO: simplify the fifo_client_handler structure
Ken Brown [Mon, 16 Mar 2020 22:04:28 +0000 (18:04 -0400)]
Cygwin: FIFO: simplify the fifo_client_handler structure

Replace the 'fhandler_base *' member by a HANDLE to the server side of
the Windows named pipe instance.  Make the corresponding
simplifications throughout.

4 years agoCygwin: FIFO: minor change - use NtClose
Ken Brown [Tue, 17 Mar 2020 14:36:34 +0000 (10:36 -0400)]
Cygwin: FIFO: minor change - use NtClose

Replace CloseHandle by NtClose since all handles are created by NT
functions.

4 years agoRevert "localtime define _DIAGASSERT" and followups affecting localtime.cc
Corinna Vinschen [Mon, 4 May 2020 09:22:54 +0000 (11:22 +0200)]
Revert "localtime define _DIAGASSERT" and followups affecting localtime.cc

This reverts commits 453b6d17bf0581e55258c5eb6dc7afbad1927cab,
                     489a47d6036660a6cbab1addfb2b7678c0de8bf2,
                     3003c3dacd157c11f5e035bc18bdd30631800720,
                     9e29639ca01208a4a8bac5b9d0f6491b34b1017e,
                     a40701c7dc9970457a19728e371c71e7501057e7,
                     0a41de2725dbf2f325e55016d85d76560845ff8d,
                     b8aa5f7a0fe70a9a53fe4019227271a78758ae67,
                     0f4bda879283eaf013f86dd80e5588721a811ea0,
                     65bf580752db7ac01ecae19dc56aa26ea34f5e47,
                     3f0c2ac96e7c493bbfc2bc1b0c1274445b756a9d,
                     76d4d40b8b23d046473a5946cf6b83faa36ae7be,
                     f2e06d8af5f390d81b64375a69ca834ca19d6029.

4 years agosetup_pseudoconsole(): handle missing/incorrect helper gracefully
Johannes Schindelin [Sat, 2 May 2020 13:03:07 +0000 (15:03 +0200)]
setup_pseudoconsole(): handle missing/incorrect helper gracefully

When `cygwin-console-helper.exe` is either missing, or corresponds to a
different Cygwin runtime, we currently wait forever while setting up
access to the pseudo console, even long after the process is gone that
was supposed to signal that it set up access to the pseudo console.

Let's handle that more gracefully: if the process exited without
signaling, we cannot use the pseudo console. In that case, let's just
fall back to not using it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
4 years agolocaltime define _DIAGASSERT
Corinna Vinschen [Wed, 29 Apr 2020 07:51:52 +0000 (09:51 +0200)]
localtime define _DIAGASSERT

4 years agolocaltime 1.82
Corinna Vinschen [Tue, 28 Apr 2020 19:35:41 +0000 (21:35 +0200)]
localtime 1.82

4 years agolocaltime 1.81
Corinna Vinschen [Tue, 28 Apr 2020 19:26:45 +0000 (21:26 +0200)]
localtime 1.81

4 years agolocaltime 1.80
Corinna Vinschen [Tue, 28 Apr 2020 19:21:14 +0000 (21:21 +0200)]
localtime 1.80

4 years agolocaltime 1.79
Corinna Vinschen [Tue, 28 Apr 2020 19:20:18 +0000 (21:20 +0200)]
localtime 1.79

4 years agolocaltime 1.78
Corinna Vinschen [Tue, 28 Apr 2020 19:14:01 +0000 (21:14 +0200)]
localtime 1.78

4 years agolocaltime 1.77
Corinna Vinschen [Tue, 28 Apr 2020 18:58:29 +0000 (20:58 +0200)]
localtime 1.77

4 years agolocaltime 1.76
Corinna Vinschen [Tue, 28 Apr 2020 18:57:34 +0000 (20:57 +0200)]
localtime 1.76

4 years agolocaltime 1.75
Corinna Vinschen [Tue, 28 Apr 2020 18:56:16 +0000 (20:56 +0200)]
localtime 1.75

4 years agolocaltime 1.74
Corinna Vinschen [Tue, 28 Apr 2020 18:50:57 +0000 (20:50 +0200)]
localtime 1.74

4 years agolocaltime 1.73
Corinna Vinschen [Mon, 27 Apr 2020 09:21:00 +0000 (11:21 +0200)]
localtime 1.73

4 years agoCygwin: localtime.cc: reformat for easier patching
Corinna Vinschen [Mon, 27 Apr 2020 09:13:05 +0000 (11:13 +0200)]
Cygwin: localtime.cc: reformat for easier patching

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: add release message for fixed floppy bugs
Corinna Vinschen [Fri, 24 Apr 2020 14:39:37 +0000 (16:39 +0200)]
Cygwin: add release message for fixed floppy bugs

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: raw disk I/O: lock floppys as well
Corinna Vinschen [Fri, 24 Apr 2020 14:22:26 +0000 (16:22 +0200)]
Cygwin: raw disk I/O: lock floppys as well

The workaround to access the full disk required since Vista
and described in http://support.microsoft.com/kb/942448
(NOT ACCESSIBLE at the time of writing this commit message)
is required on floppy drives as well.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: raw disk I/O: Fix return value in error case
Corinna Vinschen [Fri, 24 Apr 2020 14:19:09 +0000 (16:19 +0200)]
Cygwin: raw disk I/O: Fix return value in error case

The cast to generate the return value uses a DWORD variable
as test and set value.  The error case is the constant -1.
Given the type of the other half of the conditioal expression,
-1 is cast to DWORD as well.

On 64 bit, this results in the error case returning a 32 bit
-1 value which is equivalent to (ssize_t) 4294967295 rather
than (ssize_t) -1.

Add a fixing cast.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: file I/O: make sure to treat write return value as ssize_t
Corinna Vinschen [Fri, 24 Apr 2020 14:14:43 +0000 (16:14 +0200)]
Cygwin: file I/O: make sure to treat write return value as ssize_t

The return type of fhandler write methods is ssize_t.  Don't
use an int to store the return value, use ssize_t.  Use ptrdiff_t
for the buffer size.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: accounts: Report unrecognized db_* nsswitch.conf keywords
David Macek via Cygwin-patches [Mon, 20 Apr 2020 17:21:15 +0000 (19:21 +0200)]
Cygwin: accounts: Report unrecognized db_* nsswitch.conf keywords

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: accounts: Don't keep old schemes when parsing nsswitch.conf
David Macek via Cygwin-patches [Mon, 20 Apr 2020 17:21:00 +0000 (19:21 +0200)]
Cygwin: accounts: Don't keep old schemes when parsing nsswitch.conf

The implicit assumption seemed to be that any subsequent occurence of
the same setting in nsswitch.conf is supposed to rewrite the previous
ones completely.  This was not the case if the third or any further
schema was previously defined and the last line defined less than that
(but at least 2), for example:

```
db_home: windows cygwin /myhome/%U
db_home: cygwin desc
```

Let's document this behavior as well.

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: accounts: Unify nsswitch.conf db_* defaults
David Macek via Cygwin-patches [Tue, 21 Apr 2020 18:31:09 +0000 (20:31 +0200)]
Cygwin: accounts: Unify nsswitch.conf db_* defaults

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: Add David Macek to CONTRIBUTORS
Corinna Vinschen [Tue, 21 Apr 2020 08:38:57 +0000 (10:38 +0200)]
Cygwin: Add David Macek to CONTRIBUTORS

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /
Corinna Vinschen [Tue, 21 Apr 2020 08:31:53 +0000 (10:31 +0200)]
Cygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /

If the cygdrive prefix is /, then the following happens right now:

  $ ln -s /tmp/foo .
  $ ls -l foo
  lrwxrwxrwx 1 user group 12 Apr 15 23:44 foo -> /mnt/tmp/foo

Fix this by skipping cygdrive prefix conversion to WSL drive
prefix "/mnt", if the cygdrive prefix is just "/".  There's no
satisfying way to do the right thing all the time in this case
anyway.  For a description and the alternatives, see
https://cygwin.com/pipermail/cygwin-developers/2020-April/011859.html

Also, fix a typo in a comment.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agocygheap_pwdgrp: Handle invalid db_* entries correctly
David Macek via Cygwin-patches [Thu, 16 Apr 2020 21:09:07 +0000 (23:09 +0200)]
cygheap_pwdgrp: Handle invalid db_* entries correctly

If the first scheme in db_* was invalid, the code would think there
were no schemes specified and replace the second scheme with
NSS_SCHEME_DESC.

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: faq: disable outdated "sshd in domain" faq
Corinna Vinschen [Tue, 14 Apr 2020 11:26:37 +0000 (13:26 +0200)]
Cygwin: faq: disable outdated "sshd in domain" faq

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoproc_cpuinfo: Add PPIN support for AMD
Brian Inglis [Sat, 11 Apr 2020 04:35:28 +0000 (22:35 -0600)]
proc_cpuinfo: Add PPIN support for AMD

Newer AMD CPUs support a feature called protected processor
identification number (PPIN). This feature can be detected via
CPUID_Fn80000008_EBX[23].

4 years agoCygwin: utils: override definition of PMEM_EXTENDED_PARAMETER
Corinna Vinschen [Tue, 7 Apr 2020 16:54:59 +0000 (18:54 +0200)]
Cygwin: utils: override definition of PMEM_EXTENDED_PARAMETER

PMEM_EXTENDED_PARAMETER is defined in the local winlean.h as long
as mingw-w64 doesn't define it (in winnt.h).  ntdll.h needs the
definition for declaring NtMapViewOfSectionEx.  cygpath.cc and ps.cc
both include ntdll.h but not winlean.h, so they complain about the
missing definition.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: mmap_alloc: fix comment to document using the extended memory API
Corinna Vinschen [Tue, 7 Apr 2020 12:17:04 +0000 (14:17 +0200)]
Cygwin: mmap_alloc: fix comment to document using the extended memory API

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: threads: use extended memory API if available
Corinna Vinschen [Tue, 7 Apr 2020 15:41:05 +0000 (17:41 +0200)]
Cygwin: threads: use extended memory API if available

So far Cygwin was jumping through hoops to restrict memory
allocation to specific regions.  With the advent of VirtualAlloc2
and MapViewOfFile3 (and it's NT counterpart NtMapViewOfSectionEx),
we can skip searching for free space in the specific regions
and just call these functions and let the OS do the job more
efficiently and less racy.

Use VirtualAlloc2 on W10 1803 and later in thread stack allocation.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: mmap: use extended memory API if available
Corinna Vinschen [Tue, 7 Apr 2020 12:16:09 +0000 (14:16 +0200)]
Cygwin: mmap: use extended memory API if available

So far Cygwin was jumping through hoops to restrict memory
allocation to specific regions.  With the advent of VirtualAlloc2
and MapViewOfFile3 (and it's NT counterpart NtMapViewOfSectionEx),
we can skip searching for free space in the specific regions
and just call these functions and let the OS do the job more
efficiently and less racy.

Use the new functions on W10 1803 and later in mmap.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: memory: declare extended memory API
Corinna Vinschen [Tue, 7 Apr 2020 12:13:50 +0000 (14:13 +0200)]
Cygwin: memory: declare extended memory API

Windows 10 1803 introduced an extended memory API allowing
to specify memory regions allocations are to be taken off.

In preparation of using this API, define the struct
MEM_EXTENDED_PARAMETER and friends.  Declare and allow to
autoload the functions VirtualAlloc2 and NtMapViewOfSectionEx.

Introduce a wincap flag has_extended_mem_api.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: threads: add missing include of mmap_alloc.h
Corinna Vinschen [Tue, 7 Apr 2020 15:40:38 +0000 (17:40 +0200)]
Cygwin: threads: add missing include of mmap_alloc.h

This is needed for using mmap_alloc.alloc()

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: threads: lower thread size from pool to 256 Megs
Corinna Vinschen [Tue, 7 Apr 2020 11:43:17 +0000 (13:43 +0200)]
Cygwin: threads: lower thread size from pool to 256 Megs

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: threads: use mmap area to fulfill requests for big stacks
Corinna Vinschen [Tue, 7 Apr 2020 12:09:45 +0000 (14:09 +0200)]
Cygwin: threads: use mmap area to fulfill requests for big stacks

Otherwise big stacks have a higher probability to collide with
randomized PEBs and TEBs after fork.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: symlinks: Allow traversing WSL symlinks
Corinna Vinschen [Sun, 5 Apr 2020 14:17:36 +0000 (16:17 +0200)]
Cygwin: symlinks: Allow traversing WSL symlinks

Unfortunately Windows doesn't understand WSL symlinks,
despite being a really easy job.  NT functions trying
to access paths traversing WSL symlinks return the status
code STATUS_IO_REPARSE_TAG_NOT_HANDLED.  Handle this
status code same as STATUS_OBJECT_PATH_NOT_FOUND in
symlink_info::check to align behaviour to traversing
paths with other non-NTFS type symlinks.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: docs: revamp docs explaining symlinks
Corinna Vinschen [Fri, 3 Apr 2020 19:44:00 +0000 (21:44 +0200)]
Cygwin: docs: revamp docs explaining symlinks

The descriptions of symlink handling are a bit dated, so
revamp them and add the new WSL symlink type.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: symlinks: create WSL symlinks on supporting filesystems
Corinna Vinschen [Fri, 3 Apr 2020 19:40:01 +0000 (21:40 +0200)]
Cygwin: symlinks: create WSL symlinks on supporting filesystems

WSL symlinks are reparse points containing a POSIX path in UTF-8.
On filesystems supporting reparse points, use this symlink type.
On other filesystems, or in case of error, fall back to the good
old plain SYSTEM file.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: symlinks: fix WSL symlinks pointing to /mnt
Corinna Vinschen [Thu, 2 Apr 2020 20:25:55 +0000 (22:25 +0200)]
Cygwin: symlinks: fix WSL symlinks pointing to /mnt

Commit 4a36897af392 allowed to convert /mnt/<drive> path
prefixes to Cygwin cygdrive prefixes on the fly.  However,
the patch neglected WSL symlinks pointing to the /mnt
directory.  Rearrange path conversion so /mnt is converted
to the cygdrive prefix path itself.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agowinsup/cygwin: remove defines added in mingw-w64 v7.0.0
Biswapriyo Nath [Wed, 1 Apr 2020 05:50:00 +0000 (11:20 +0530)]
winsup/cygwin: remove defines added in mingw-w64 v7.0.0

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
4 years agoCygwin: symlinks: support WSL symlinks
Corinna Vinschen [Fri, 27 Mar 2020 11:12:31 +0000 (12:12 +0100)]
Cygwin: symlinks: support WSL symlinks

Treat WSL symlinks just like other symlinks.  Convert
absolute paths pointing to Windows drives via
/mnt/<driveletter> to Windows-style paths <driveletter>:

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: fix GCC warning
Corinna Vinschen [Thu, 26 Mar 2020 13:13:37 +0000 (14:13 +0100)]
Cygwin: serial: fix GCC warning

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agonewlib/libm/math: Make pow/powf return qnan for snan arg
Keith Packard via Newlib [Thu, 26 Mar 2020 00:18:21 +0000 (17:18 -0700)]
newlib/libm/math: Make pow/powf return qnan for snan arg

The IEEE spec for pow only has special case for x**0 and 1**y when x/y
are quiet NaN. For signaling NaN, the general case applies and these functions
should signal the invalid exception and return a quiet NaN.

Signed-off-by: Keith Packard <keithp@keithp.com>
4 years agonewlib/libm/common: Don't re-convert float to bits in modf/modff
Keith Packard via Newlib [Thu, 26 Mar 2020 00:18:20 +0000 (17:18 -0700)]
newlib/libm/common: Don't re-convert float to bits in modf/modff

These functions shared a pattern of re-converting the argument to bits
when returning +/-0. Skip that as the initial conversion still has the
sign bit.

Signed-off-by: Keith Packard <keithp@keithp.com>
4 years agonewlib/libm/common: Fix modf/modff returning snan
Keith Packard via Newlib [Thu, 26 Mar 2020 00:18:19 +0000 (17:18 -0700)]
newlib/libm/common: Fix modf/modff returning snan

Recent GCC appears to elide multiplication by 1, which causes snan
parameters to be returned unchanged through *iptr. Use the existing
conversion of snan to qnan to also set the correct result in *iptr
instead.

Signed-off-by: Keith Packard <keithp@keithp.com>
4 years agoFix spurious underflow exceptions for Bessel functions for double(from glibc bug...
Joseph S. Myers [Wed, 25 Mar 2020 18:18:44 +0000 (11:18 -0700)]
Fix spurious underflow exceptions for Bessel functions for double(from glibc bug 14155)

This fix comes from glibc, from files which originated from
the same place as the newlib files. Those files in glibc carry
the same license as the newlib files.

Bug 14155 is spurious underflow exceptions from Bessel functions for
large arguments.  (The correct results for large x are roughly
constant * sin or cos (x + constant) / sqrt (x), so no underflow
exceptions should occur based on the final result.)

There are various places underflows may occur in the intermediate
calculations that cause the failures listed in that bug.  This patch
fixes problems for the double version where underflows occur in
calculating the intermediate functions P and Q (in particular, x**-12
gets computed while calculating Q).  Appropriate approximations are
used for P and Q for arguments at least 0x1p28 and above to avoid the
underflows.

For sufficiently large x - 0x1p129 and above - the code already has a
cut-off to avoid calculating P and Q at all, which means the
approximations -0.125 / x and 0.375 / x can't themselves cause
underflows calculating Q.  This cut-off is heuristically reasonable
for the point beyond which Q can be neglected (based on expecting
around 0x1p-64 to be the least absolute value of sin or cos for large
arguments representable in double).

The float versions use a cut-off 0x1p17, which is less heuristically
justifiable but should still only affect values near zeroes of the
Bessel functions where these implementations are intrinsically
inaccurate anyway (bugs 14469-14472), and should serve to avoid
underflows (the float underflow for jn in bug 14155 probably comes
from the recurrence to compute jn).  ldbl-96 uses 0x1p129, which may
not really be enough heuristically (0x1p143 or so might be safer - 143
= 64 + 79, number of mantissa bits plus total number of significant
bits in representation) but again should avoid underflows and only
affect values where the code is substantially inaccurate anyway.
ldbl-128 and ldbl-128ibm share a completely different implementation
with no such cut-off, which I propose to fix separately.

Signed-off-by: Keith Packard <keithp@keithp.com>
4 years agoRevert "Cygwin: serial: read: if VMIN > 0, wait for VMIN chars in inbound queue" topic/serial_io github/topic/serial_io
Corinna Vinschen [Wed, 25 Mar 2020 20:01:29 +0000 (21:01 +0100)]
Revert "Cygwin: serial: read: if VMIN > 0, wait for VMIN chars in inbound queue"

This reverts commit 082f2513c721e942d0fd563c4dc9117eee3513ab.

Turns out, Linux as well as BSD really only wait for the smaller
number, MIN or # of requested bytes.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agofhandler_serial: fix comments
Corinna Vinschen [Wed, 25 Mar 2020 11:25:06 +0000 (12:25 +0100)]
fhandler_serial: fix comments

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: read: if VMIN > 0, wait for VMIN chars in inbound queue
Corinna Vinschen [Wed, 25 Mar 2020 11:21:59 +0000 (12:21 +0100)]
Cygwin: serial: read: if VMIN > 0, wait for VMIN chars in inbound queue

Per termios, read waits for MIN chars even if the number of requested
bytes is less.  This requires to add WaitCommEvent to wait non-busily
for MIN chars prior to calling ReadFile, so, reintroduce it.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: use per call OVERLAPPED structs
Corinna Vinschen [Mon, 23 Mar 2020 20:06:00 +0000 (21:06 +0100)]
Cygwin: serial: use per call OVERLAPPED structs

Sharing the OVERLAPPED struct and event object in there between
read and select calls in the fhandler might have been a nice
optimization way back when, but it is a dangerous, not thread-safe
approach.  Fix this by creating per-fhandler, per-call OVERLAPPED
structs and event objects on demand.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: select: call ClearCommError prior to calling WaitCommEvent
Corinna Vinschen [Mon, 23 Mar 2020 16:23:19 +0000 (17:23 +0100)]
Cygwin: serial: select: call ClearCommError prior to calling WaitCommEvent

This (hopefully) eliminates a race condition

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: select: fix WaitCommEvent request
Corinna Vinschen [Mon, 23 Mar 2020 12:08:32 +0000 (13:08 +0100)]
Cygwin: serial: select: fix WaitCommEvent request

- make sure event object is reset
- set read_ready to true if WaitCommEvent returns success
- improve debugging

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: tcsetattr: set timeouts unconditionally
Corinna Vinschen [Mon, 23 Mar 2020 11:13:35 +0000 (12:13 +0100)]
Cygwin: serial: tcsetattr: set timeouts unconditionally

tcsetattr checks if the VTIME and VMIN values changed and only
calls SetCommTimeouts if so.  That's a problem if tcsetattr
is supposed to set VTIME and VIMN to 0, because these are the
start values anyway.  But this requires to set ReadIntervalTimeout
to MAXDWORD, which just doesn't happen.

Fix this by dropping the over-optimization of checking the old
values before calling SetCommTimeouts,

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: avoid overrun of vtime
Corinna Vinschen [Sat, 21 Mar 2020 09:36:11 +0000 (10:36 +0100)]
Cygwin: serial: avoid overrun of vtime

After changing the type of fhandler_serial::vtime_ to cc_t, vtime_
must be stored in 10s of seconds, not in milliseconds.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: select: fix previous revamp patch
Åke Rehnman [Fri, 20 Mar 2020 09:37:17 +0000 (10:37 +0100)]
Cygwin: serial: select: fix previous revamp patch

- We need a verify function.
- The event object referenced in WaitCommEvent must not be a local var,
  move it into fhandler_serial.

4 years agoCygwin: serial: revamp overlapped IO in read and select
Corinna Vinschen [Wed, 18 Mar 2020 20:14:06 +0000 (21:14 +0100)]
Cygwin: serial: revamp overlapped IO in read and select

Get rid of WaitCommEvent and using overlapped_armed to share the
same overlapped operation between read and select.  Rather, make
sure to cancel the overlapped IO before leaving any of these functions.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: read: revamp raw_read, change vmin_ and vtime_ to cc_t
Corinna Vinschen [Tue, 17 Mar 2020 16:45:05 +0000 (17:45 +0100)]
Cygwin: serial: read: revamp raw_read, change vmin_ and vtime_ to cc_t

- Datatypes were incorrect, especially vmin_ and vtime_.
  Change them to cc_t, as in user space.

- Error checking had a gap or two.  Debug output used the
  wrong formatting.

- Don't use ev member for ClearCommError and WaitCommEvent.
  Both returned values are different (error value vs. event
  code).  The values are not used elsewhere so it doesn't make
  sense to store them in the object.  Therefore, drop ev member.

- Some variable names were not very helpful.  Especially using
  n as lpNumberOfBytesTransferred from GetOverlappedResult and
  then actually printing it as if it makes sense was quite
  puzzeling.

- Rework the loop and the definition of minchars so that it
  still makes sense when looping.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: serial: select: simplify peek_serial
Corinna Vinschen [Tue, 17 Mar 2020 16:24:56 +0000 (17:24 +0100)]
Cygwin: serial: select: simplify peek_serial

- Don't use ev member for ClearCommError and WaitCommEvent.
  Both returned values are different (error value vs. event
  code).  The values are not used elsewhere so it doesn't make
  sense to store them in the object.

- Drop local variable ready which is used inconsequentially.

- Since WFSO already waits 10 ms, don't wait again if no char
  is in the inbound queue.

- Avoid else if chains.

- Only print one line of debug output on error.

- Drop overlapped_armed < 0 check.  This value is only set in
  fhandler_serial::raw_read if VTIME > 0, and even then it's only
  set to be immediately reset to 0 before calling ReadFile.  So
  overlapped_armed is never actually < 0 when calling select.

- Fix a screwed up statement order.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: Use a separate Start Menu folder for WoW64 installs
Jon Turney [Thu, 19 Mar 2020 13:54:10 +0000 (13:54 +0000)]
Cygwin: Use a separate Start Menu folder for WoW64 installs

This aligns the shortcuts to documentation with the setup changes in
https://sourceware.org/pipermail/cygwin-apps/2020-March/039873.html

v2:
Create/remove the Start Menu directory as needed/possible
Correctly use that directory when making shortcuts

4 years agoFix hypotf missing mask in hi+lo decomposition
Fabian Schriever [Thu, 19 Mar 2020 15:34:08 +0000 (16:34 +0100)]
Fix hypotf missing mask in hi+lo decomposition

Add the missing mask for the decomposition of hi+lo which caused some
errors of 1-2 ULP.

This change is taken over from FreeBSD:
https://github.com/freebsd/freebsd/commit/95436ce20dab5a34ba46373410b96411b1734578

Additionally I've removed some variable assignments which were never
read before being overwritten again in the next 2 lines.

4 years agoFix modf/f for NaN input
Fabian Schriever [Wed, 18 Mar 2020 13:18:20 +0000 (14:18 +0100)]
Fix modf/f for NaN input

For NaN input the modf/f procedures should return NaN instead of zero
with the sign of the input.

4 years agoFix for k_tan.c specific inputs
Fabian Schriever [Tue, 17 Mar 2020 14:48:44 +0000 (15:48 +0100)]
Fix for k_tan.c specific inputs

This fix for k_tan.c is a copy from fdlibm version 5.3 (see also
http://www.netlib.org/fdlibm/readme), adjusted to use the macros
available in newlib (SET_LOW_WORD).

This fix reduces the ULP error of the value shown in the fdlibm readme
(tan(1.7765241907548024E+269)) to 0.45 (thereby reducing the error by
1).

This issue only happens for large numbers that get reduced by the range
reduction to a value smaller in magnitude than 2^-28, that is also
reduced an uneven number of times. This seems rather unlikely given that
one ULP is (much) larger than 2^-28 for the values that may cause an
issue.  Although given the sheer number of values a double can
represent, it is still possible that there are more affected values,
finding them however will be quite hard, if not impossible.

We also took a look at how another library (libm in FreeBSD) handles the
issue: In FreeBSD the complete if branch which checks for values smaller
than 2^-28 (or rather 2^-27, another change done by FreeBSD) is moved
out of the kernel function and into the external function. This means
that the value that gets checked for this condition is the unreduced
value. Therefore the input value which caused a problem in the
fdlibm/newlib kernel tan will run through the full polynomial, including
the careful calculation of -1/(x+r). So the difference is really whether
r or y is used. r = y + p with p being the result of the polynomial with
1/3*x^3 being the largest (and magnitude defining) value. With x being
<2^-27 we therefore know that p is smaller than y (y has to be at least
the size of the value of x last mantissa bit divided by 2, which is at
least x*2^-51 for doubles) by enough to warrant saying that r ~ y.  So
we can conclude that the general implementation of this special case is
the same, FreeBSD simply has a different philosophy on when to handle
especially small numbers.

4 years agoCygwin: serial: wait for CancelIo completion
Corinna Vinschen [Mon, 16 Mar 2020 09:20:16 +0000 (10:20 +0100)]
Cygwin: serial: wait for CancelIo completion

Per https://devblogs.microsoft.com/oldnewthing/20110202-00/?p=11613
GetOverlappedResult must be called blocking, waiting for the overlapped
operation to complete.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoRTEMS: Include missing header and fix stub
Sebastian Huber [Fri, 13 Mar 2020 17:21:36 +0000 (18:21 +0100)]
RTEMS: Include missing header and fix stub

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
4 years agoCygwin: pty: Add FreeConsole to destructor of pty slave.
Takashi Yano via Cygwin-patches [Fri, 13 Mar 2020 03:06:49 +0000 (12:06 +0900)]
Cygwin: pty: Add FreeConsole to destructor of pty slave.

- When pseudo console is closed, all the processes attched to the
  pseudo console are terminated. This causes the problem reported
  in https://sourceware.org/pipermail/cygwin/2020-March/244046.html.
  This patch fixes the issue.

4 years agoCygwin: serial: try fix o_nonblock
Corinna Vinschen [Thu, 12 Mar 2020 15:07:01 +0000 (16:07 +0100)]
Cygwin: serial: try fix o_nonblock

4 years agoCygwin: belatedly add Hans-Bernhard to CONTRIBUTORS file
Corinna Vinschen [Wed, 11 Mar 2020 16:40:03 +0000 (17:40 +0100)]
Cygwin: belatedly add Hans-Bernhard to CONTRIBUTORS file

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: fix formatting: drop trailing whitespace
Corinna Vinschen [Wed, 11 Mar 2020 12:36:41 +0000 (13:36 +0100)]
Cygwin: fix formatting: drop trailing whitespace

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: fix formatting: collapse whitespace-only lines
Corinna Vinschen [Wed, 11 Mar 2020 12:28:27 +0000 (13:28 +0100)]
Cygwin: fix formatting: collapse whitespace-only lines

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: fix formatting: drop spaces leading tabs
Corinna Vinschen [Wed, 11 Mar 2020 12:23:55 +0000 (13:23 +0100)]
Cygwin: fix formatting: drop spaces leading tabs

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: fix formatting: replace TAB char with \t in string constant
Corinna Vinschen [Wed, 11 Mar 2020 12:44:05 +0000 (13:44 +0100)]
Cygwin: fix formatting: replace TAB char with \t in string constant

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoFix truncf for sNaN input
Fabian Schriever [Wed, 11 Mar 2020 09:58:05 +0000 (10:58 +0100)]
Fix truncf for sNaN input

Make line 47 in sf_trunc.c reachable. While converting the double
precision function trunc to the single precision version truncf an error
was introduced into the special case. This special case is meant to
catch both NaNs and infinities, however qNaNs and infinities work just
fine with the simple return of x (line 51). The only error occurs for
sNaNs where the same sNaN is returned and no invalid exception is
raised.

4 years agoi386/fenv.c: Include fenv.c implementation shared with x86_64, not stub
Joel Sherrill [Tue, 10 Mar 2020 15:03:44 +0000 (10:03 -0500)]
i386/fenv.c: Include fenv.c implementation shared with x86_64, not stub

4 years agoFix error in fdim/f for infinities
Fabian Schriever [Tue, 10 Mar 2020 10:24:12 +0000 (11:24 +0100)]
Fix error in fdim/f for infinities

The comparison c == FP_INFINITE causes the function to return +inf as it
expects x = +inf to always be larger than y. This shortcut causes
several issues as it also returns +inf for the following cases:
 - fdim(+inf, +inf), expected (as per C99): +0.0
 - fdim(-inf, any non NaN), expected: +0.0

I don't see a reason to keep the comparison as all the infinity cases
return the correct result using just the ternary operation.

4 years agoFix error in exp in magnitude [2e-32,2e-28]
Fabian Schriever [Fri, 6 Mar 2020 14:46:33 +0000 (15:46 +0100)]
Fix error in exp in magnitude [2e-32,2e-28]

While testing the exp function we noticed some errors at the specified
magnitude. Within this range the exp function returns the input value +1
as an output. We chose to run a test of 1m exponentially spaced values
in the ranges [-2^-27,-2^-32] and [2^-32,2^-27] which showed 7603 and
3912 results with an error of >=0.5 ULP (compared with MPFR in 128 bit)
with the highest being 0.56 ULP and 0.53 ULP.

It's easy to fix by changing the magnitude at which the input value +1
is returned from <2^-28 to <2^-32 and using the polynomial instead. This
reduces the number of results with an error of >=0.5 ULP to 485 and 479
in above tests, all of which are exactly 0.5 ULP.

As we were already checking on exp we also took a look at expf. For expf
the magnitude where the input value +1 is returned can be increased from
<2^-28 to <2^-23 without accuracy loss for a slight performance
improvement. To ensure this was the correct value we tested all values
in the ranges [-2^-17,-2^-28] and [2^-28,2^-17] (~92.3m values each).

4 years agoCygwin: console: Fix behaviour of "ESC 8" after reset.
Takashi Yano [Mon, 9 Mar 2020 01:38:36 +0000 (10:38 +0900)]
Cygwin: console: Fix behaviour of "ESC 8" after reset.

- This patch matches the behaviour of "ESC 8" (DECRC) to the real
  xterm after full reset (RIS), soft reset (DECSTR) and "CSI 3 J".

4 years agoDo not bother passing optional argument to WriteConsoleA.
Hans-Bernhard Broeker [Sun, 8 Mar 2020 20:41:14 +0000 (21:41 +0100)]
Do not bother passing optional argument to WriteConsoleA.

Passing a pointer to a local variable to WriteConsoleA is
not actually needed if we're not going to do anything with
what WriteConsoleA would put in there.

For the wpbuf class the pointer argument was made optional,
so it can be just left out; other call places now pass a
NULL pointer instead.  The local variables `wn' and `n'
are no unused, so they go away.

4 years agoCollect handling of wpixput and wpbuf into a helper class.
Hans-Bernhard Broeker [Sun, 8 Mar 2020 20:41:13 +0000 (21:41 +0100)]
Collect handling of wpixput and wpbuf into a helper class.

Replace direct access to a pair of co-dependent variables
by calls to methods of a class that encapsulates their relation.

Also replace C #define by C++ class constant.

4 years agoFix error in float trig. function range reduction
Fabian Schriever [Tue, 3 Mar 2020 13:49:06 +0000 (14:49 +0100)]
Fix error in float trig. function range reduction

The single-precision trigonometric functions show rather high errors in
specific ranges starting at about 30000 radians. For example the sinf
procedure produces an error of 7626.55 ULP with the input
5.195880078125e+04 (0x474AF6CD) (compared with MPFR in 128bit
precision). For the test we used 100k values evenly spaced in the range
of [30k, 70k]. The issues are periodic at higher ranges.

This error was introduced when the double precision range reduction was
first converted to float. The shift by 8 bits always returns 0 as iq is
never higher than 255.

The fix reduces the error of the example above to 0.45 ULP, highest
error within the test set fell to 1.31 ULP, which is not perfect, but
still a significant improvement. Testing other previously erroneous
ranges no longer show particularly large accuracy errors.

4 years agoCygwin: console: convert wpbuf_put to inline function
Corinna Vinschen [Mon, 2 Mar 2020 19:30:09 +0000 (20:30 +0100)]
Cygwin: console: convert wpbuf_put to inline function

fix potential buffer overrun while at it

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: console: Add a workaround for "ESC 7" and "ESC 8".
Takashi Yano [Mon, 2 Mar 2020 01:12:57 +0000 (10:12 +0900)]
Cygwin: console: Add a workaround for "ESC 7" and "ESC 8".

- In xterm compatible mode, "ESC 7" and "ESC 8" do not work properly
  in the senario:
   1) Execute /bin/ls /bin to fill screen.
   2) Sned CSI?1049h to alternate screen.
   3) Reduce window size.
   4) Send CSI?1049l to resume screen.
   5) Send "ESC 7" and "ESC 8".
  After sending "ESC 8", the cursor goes to incorrect position. This
  patch adds a workaround for this issue.

4 years agoCygwin: console: Prevent buffer overrun.
Takashi Yano [Mon, 2 Mar 2020 01:12:56 +0000 (10:12 +0900)]
Cygwin: console: Prevent buffer overrun.

- This patch prevent potential buffer overrun in the code handling
  escape sequences.

4 years agoCygwin: console: Fix setting/unsetting xterm mode for input.
Takashi Yano [Mon, 2 Mar 2020 01:12:55 +0000 (10:12 +0900)]
Cygwin: console: Fix setting/unsetting xterm mode for input.

- This patch fixes the issue that xterm compatible mode for input
  is not correctly set/unset in some situation such as:
   1) cat is stopped by ctrl-c.
   2) The window size is changed in less.
  In case 1), request_xterm_mode_input(true) is called in read(),
  however, cat is stopped without request_xterm_mode_input(false).
  In case 2), less uses longjmp in signal handler, therefore,
  corresponding request_xterm_mode_input(false) is not called if
  the SIGWINCH signal is sent within read(). With this patch,
  InterlockedExchange() is used instead of InterlockedIncrement/
  Decrement().

4 years agoCygwin: console: Revise the code to fix tab position.
Takashi Yano [Mon, 2 Mar 2020 01:12:54 +0000 (10:12 +0900)]
Cygwin: console: Revise the code to fix tab position.

- This patch fixes the issue that the cursor position is broken if
  window size is changed while executing vim, less etc.

4 years agoCygwin: ioctl: TIOCINQ: always return number of chars in the inbound queue
Corinna Vinschen [Mon, 2 Mar 2020 16:02:51 +0000 (17:02 +0100)]
Cygwin: ioctl: TIOCINQ: always return number of chars in the inbound queue

So far ioctl(TIOCINQ) could end up returning -1 with errno set to EINVAL
if a non-zero device error mask has been returned by ClearCommError.
This doesn't reflect Linux behaviour, which always returns the number of
chars in the inbound queue, independent of any I/O error condition.
EINVAL was a pretty weird error code to use in this scenario, too.

Fix this by dropping all checking for device errors in the TIOCINQ
case.  Just return the number of chars in the inbound queue.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoFix error in powf for (-1.0, NaN) input
Fabian Schriever [Mon, 2 Mar 2020 14:40:23 +0000 (15:40 +0100)]
Fix error in powf for (-1.0, NaN) input

Prevent confusion between -1.0 and 1.0 in powf. The corresponding
similar error was previously fixed for pow (see commit bb25dd1b)

4 years agoarm: Finish moving newlib to unified syntax for Thumb1
Richard Earnshaw [Mon, 2 Mar 2020 13:33:11 +0000 (13:33 +0000)]
arm: Finish moving newlib to unified syntax for Thumb1

Most code in newlib already uses unified syntax, but just a couple of
laggards remain.  This patch removes these and means the the entire
code base has now been converted.

4 years agoCygwin: console: Adjust the detailed behaviour of ESC sequences.
Takashi Yano [Thu, 27 Feb 2020 02:33:50 +0000 (11:33 +0900)]
Cygwin: console: Adjust the detailed behaviour of ESC sequences.

- This patch makes some detailed behaviour of ESC sequences such as
  "CSI Ps L" (IL), "CSI Ps M" (DL) and "ESC M" (RI) in xterm mode
  match with real xterm.

4 years agoCygwin: AF_UNIX: rework fixup_after_exec
Corinna Vinschen [Fri, 28 Feb 2020 12:21:05 +0000 (13:21 +0100)]
Cygwin: AF_UNIX: rework fixup_after_exec

fhandler_socket_unix::fixup_after_exec incorrectly calls
fhandler_socket_unix::fixup_after_fork with a NULL parent process
handle.  Not only that calling DuplicateHandle with a NULL parent
handle fails, but it's utterly wrong trying to duplicate the handles
at all here.

Rather just set some important values to NULL and reopen the shared
memory region.  Create a fixup_helper method to call common code from
fixup_after_fork and fixup_after_exec.

Add comments to other invocations of fixup_after_fork with NULL
handle to mark them as correct this way.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: 32 bit: remove old code to 16 bit align stack
Corinna Vinschen [Fri, 28 Feb 2020 13:31:56 +0000 (14:31 +0100)]
Cygwin: 32 bit: remove old code to 16 bit align stack

Aligning the stack pointer using an asm statement isn't any longer
supported.  gcc-9.2.0 generates the following warning:

  init.cc:33:46: error: listing the stack pointer register '%esp'
  in a clobber list is deprecated [-Werror=deprecated]
  [...]
  init.cc:33:46: note: the value of the stack pointer after an
  'asm' statement must be the same as it was before the statement

Replace the asm expression with the gcc function attribute
`force_align_arg_pointer'.  This aligns the stack exactly as
required.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: AF_UNIX: use Nt functions within Nt functions
Corinna Vinschen [Fri, 28 Feb 2020 11:40:49 +0000 (12:40 +0100)]
Cygwin: AF_UNIX: use Nt functions within Nt functions

Functionaly equivalent, but makes for cleaner code

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: AF_UNIX: fix creating shared mem region in dup
Corinna Vinschen [Fri, 28 Feb 2020 11:39:41 +0000 (12:39 +0100)]
Cygwin: AF_UNIX: fix creating shared mem region in dup

reopen_shmem is accidentally called on the parent fhandler
rather than the child fhandler, and it's called too early.
Make sure to call it on the child and only after its shmem_handle
is valid.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This page took 0.075468 seconds and 5 git commands to generate.