Takashi Yano [Sat, 14 May 2022 11:39:42 +0000 (20:39 +0900)]
Cygwin: pty: Fix script command crash on console in Win7.
- Previously, the command "cmd /c script -c cmd" in console of Win7
crashes. This seems to be due to a bug (?) of AttachConsole().
This patch adds workaround for this issue.
Currently, pty reattaches to the console of the process which is
predetermined by ConsoleProcessList() after temporarily attaching
to another console. After that, the console output handle opened
with the name "CONOUT$" may not be accessible in Win7.
This seems to happen when the attached process does not have the
same handle even if the console attached is the same. With this
patch, cygwin-console-helper which is started when pty master is
opened in console, is utilized to be a target process to which
pty reattaches if the OS is Win7.
Corinna Vinschen [Fri, 13 May 2022 19:22:44 +0000 (21:22 +0200)]
Cygwin: fix new sigfe.o generation in optimized case
Commit 0597c84b9bdb ("Cygwin: revamp TLS offsets computation")
introduced a really weird problem when building Cygwin with
optimization.
First of all, the tlsoffsets file is broken with -O2. This
can easily be fixed by running the compiler with -O0 when called
from the gentls_offsets script.
But it gets worse:
When creating sigfe.o with optimization, the generated machine code
uses incorrect offsets: For some reason the assembler codes using
_cygtls.stackptr as offset value are assembled into machine code
using _cygtls.pstackptr as offsets.
And as if that isn't already absurd enough, renaming _cygtls.pstackptr
to, say, _cygtls.blurb, fixes the assembled machine code expressions;
they use the value of _cygtls.stackptr again.
So I changed gentls_offsets and gendef to use _cygtls.foo_p rather
than _cygtls.pfoo and that fixes the assembled code in the optimized
case.
No, I can't explain that. There's no system in that behaviour.
It looks absolutely crazy.
- convert gentls_offsets to a shell script, only running the target
compiler and gawk.
- Simplify cygtls.h. The new gentls_offsets script only requires two
lines with the "public:" keyword as markers. The comments are not
used anymore, the output is a preprocesses file without comments.
Align Makefile rules accordingly.
- Rather than generating perl variables and C #defines, just generate
.ecu statements and .include the TLS offsets file right from the
generated assembler file sigfe.s. It's the only place we really
need (some of) the offsets.
- Drop the target-specific name of the TLS offsets file and generate
it on the fly in the build dir. Fix configure and Makefile rules
accordingly.
Corinna Vinschen [Thu, 27 Jan 2022 11:41:55 +0000 (12:41 +0100)]
Cygwin: configure: Define default valus for target specific variables
Define default values for DLL_ENTRY, DIN_FILE, and TLSOFFSETS_H
and drop them from the x86_64-specific branch. Keep the mechanism
intact to allow other target CPUs if there ever will be.
Corinna Vinschen [Thu, 27 Jan 2022 11:39:57 +0000 (12:39 +0100)]
Cygwin: config.h: stop including auto-generated tlsoffsets.h file
This was a hack to begin with. Clean this mess up:
- Move definition of CYGTLS_PADSIZE to cygwin/config.h and drop
local cygtls_padsize.h
- Rename CYGTLS_PADSIZE to __CYGTLS_PADSIZE__ to keep namespace
clean. Redefine as macro, rather than as const.
- Move struct _reent first in struct _cygtls to allow using
__CYGTLS_PADSIZE__ as offset in __getreent().
Matt Joyce [Mon, 2 May 2022 06:58:25 +0000 (08:58 +0200)]
Add global __sglue object for all configurations
Added a new global __sglue object for all configurations.
Decouples the global file object list from the _GLOBAL_REENT
structure by using this new object instead of the __sglue member
of _GLOBAL_REENT in __sfp() and _fwalk_sglue().
Sebastian Huber [Fri, 1 Apr 2022 11:32:32 +0000 (13:32 +0200)]
stdio: Replace _fwalk_reent() with _fwalk_sglue()
Replaced _fwalk_reent() with _fwalk_sglue(). The change adds an
extra __sglue object as a parameter, which will allow the passing
of a global __sglue object separate from the __sglue member of
struct _reent. The global __sglue object will be added in a
follow-on patch.
Matt Joyce [Tue, 3 May 2022 04:29:36 +0000 (06:29 +0200)]
Add CLEANUP_FILE define
Define the configuration-dependent constant CLEANUP_FILE for use in
cleanup_stdio(). This will reduce duplicate code during the addition
of a dedicated stdio atexit handler in a follow-on patch.
Matt Joyce [Tue, 3 May 2022 04:17:15 +0000 (06:17 +0200)]
Move __sglue initializations to __sfp()
Moved last remaining __sglue initializations from __sinit() to
__sfp(). The move better encapsulates access to __sglue and
facilitates its decoupling from struct _reent in a follow-on patch.
Matt Joyce [Fri, 8 Apr 2022 09:24:38 +0000 (11:24 +0200)]
Remove __sinit_locks / __sinit_recursive_mutex
Remove __sinit_lock_acquire() and __sinit_lock_release(). Replace these with
__sfp_lock_acquire() and __sfp_lock_release(), respectively. This eliminates a
potential deadlock issue between __sinit() and __sfp(). Remove now unused
__sinit_recursive_mutex and __lock___sinit_recursive_mutex.
Matt Joyce [Tue, 5 Apr 2022 09:40:19 +0000 (11:40 +0200)]
Add two __sglue initialization macros
Added _REENT_INIT_SGLUE and _REENT_INIT_SGLUE_ZEROED macros
to initialize __sglue member of struct _reent. This allows
further simplification of __sinit() and facilitates the removal
of __sglue as a member of struct _reent for certain configurations
in a follow-on patch.
Matt Joyce [Fri, 1 Apr 2022 09:32:00 +0000 (11:32 +0200)]
Remove duplicate sglue initializations
Removed duplicate sglue initializations from __sinit(). These
are already initialized in the _REENT_INIT macro in sys/reent.h.
This simplification enables the reduction of _GLOBAL_REENT
dependency in a follow-on patch.
Matt Joyce [Fri, 1 Apr 2022 09:30:00 +0000 (11:30 +0200)]
Remove duplicate stdio initializations
Removed duplicate stdio initializations from __sinit(). These
are already initialized in the _REENT_INIT macro in sys/reent.h.
This simplification enables the reduction of _GLOBAL_REENT
dependency in a follow-on patch.
fix tty_nr maj/min bits, vmmaxrss units, and x86 format mismatch:
ctty maj is 31:16, min is 15:0; tty_nr s/b maj 15:8, min 31:20, 7:0;
vmmaxrss s/b bytes not pages;
times all 64 bit - change formats of first two instances from %lu to %U;
realign sprintf formats and variables/values in more logical groups
Takashi Yano [Mon, 9 May 2022 10:45:18 +0000 (19:45 +0900)]
Cygwin: pty: Avoid script command crash in console.
- Previously, script command sometimes crashes by Ctrl-C in Win 7
if it is running in console, and non-cygwin app is foreground.
This patch fixes the issue.
Takashi Yano [Mon, 9 May 2022 03:23:57 +0000 (12:23 +0900)]
Cygwin: pty: Not to change code page of parent console.
- The recent commit "Cygwin: pty: Fix timing of creating invisible
console." breaks the feature added by commit 72770148, which
prevents pty from changing code page of parent console. This patch
restores that.
Takashi Yano [Sun, 8 May 2022 10:47:05 +0000 (19:47 +0900)]
Cygwin: pty: Fix timing of creating invisible console.
- Previously, invisible console was created in fixup_after_exec().
However, actually this should be done in fixup_after_fork(). this
patch fixes the issue.
Takashi Yano [Sun, 8 May 2022 10:45:31 +0000 (19:45 +0900)]
Cygwin: pty: Fix acquiring attach_mutex timing.
- When temporarily attaching a console, the timing of acquiring
attach_mutex was not appropriate. This sometimes caused master
forwarding thread to crash on Ctrl-C in Windows 7. This patch
fixes the issue.
Jon Turney [Mon, 2 May 2022 12:55:16 +0000 (13:55 +0100)]
Fix warning about duplicate id in docbook XML
../newlib/libc/libc.xml:22242: element refentry: validity error : ID iconv already defined
<refentry id="iconv">
Use a separate namespace for chaper ids, to avoid collision between the
ids for the chapter and function 'iconv', now that iconv documentation
is generated unconditionally.
Jon Turney [Mon, 2 May 2022 12:55:15 +0000 (13:55 +0100)]
Silence xsltproc when writing manpages
Unless make is invoked with V=1, have xmlto pass the parameter
'man.output.quietly=1' to xsltproc to suppress "Note: Writing foo.N"
output from the manpages stylesheet.
(This doesn't quite do what it says: The output is not silenced if V has
any value, including 0. You could consider that either a bug or a
feature.)
Jon Turney [Mon, 2 May 2022 12:55:13 +0000 (13:55 +0100)]
Simplify rules for creating man pages
Simplify rules for creating docbook XML used to create manpages:
Updating the output using move-if-change and then unconditionally
touching the .stamp file doesn't make much sense.
The nano malloc build broke with:
Commit 357d7fcc6
In <stdio.h> provide only necessary types
The above commit exposed a latent missing-header bug:
newlib/libc/stdlib/nano-mallocr.c:220:33: error: ‘uintptr_t’ undeclared (first use in this function)
Sebastian Huber [Tue, 3 May 2022 12:51:55 +0000 (14:51 +0200)]
Remove _global_impure_ptr indirection
Remove the pointer indirection through the read-only _global_impure_ptr and
directly use a externally visible _impure_data object of type struct _reent.
This enables the static initialization of global data structures in a follow up
patch. In addition, we get rid of a machine-specific file.
By including sys/_stdint.h, all types from stdint.h are
exposed even if stdint.h isn't pulled in explicitely. Include
<machine/_default_types.h instead. Fix up newlib and Cygwin
files which rely on stdint.h types, too.
Even after fork, we might need the parent sigmask without having
access to the real _main_tls. There's a short time at process startup,
when _main_tls points to the system-allocated stack, but wait_sig is
already running. If we can't lock _main_tls, because find_tls can't
find it yet, we now access the parent's sigmask via child_info.
The x86_64 thread stack area collides with the share user data in
recent versions of Windows. Let's get ourselvels get out of the
way and move the thread stack area in the former slack space
between DLL area and heap, from 0x6:00000000 to 0x8:00000000.
That quadruplicates the stack area, so allow bigger maximum stack
sizes.
Originally the function was designed to be used in forked
processes as well, but it has never been used this way. Drop
the parameter only required for forkees.
The _open() C function is declared as having variable arguments in
newlib, so second and third arguments are passed on stack. Add code to
move them into registers, since that's where the PRU simulator expects
them.
Issue was exposed by the GCC test gcc.c-torture/execute/fprintf-2.c,
which relies on tmpnam implementation to pass correct flags to _open.
Mark Geisert [Fri, 22 Apr 2022 05:36:33 +0000 (22:36 -0700)]
Cygwin: Fix "0x0x" in gmondump and ssp man pages
A recent patch fixed gmondump to stop printing "0x0x" as an address
prefix. It turns out the Cygwin User's Guide and the gmondump and
ssp man pages (all from utils.xml) have examples of the same error.
- In the latest GDB (11.2-1), Ctrl-C behaviour is broken a bit for
non-cygwin inferior. For example, Ctrl-C on GDB prompt is not sent
to GDB but to the inferior. This patch fixes the issue.
Cygwin: pty: Do not set internal handles in HPCON inheritable.
- The internal handles in HPCON should not be inheritable, however,
the current code duplicates them as inheritable when handing over
ownership of the pseudo console. This patch fixes the issue.
Cygwin: pty: Close pseudo console only if the process is the owner.
- Currently, close_pseudoconsole() is called unconditionally from
fhandler_termios::process_sigs() on Ctrl-C. This causes deadlock
if Ctrl-C is pressed while setup_pseudoconsole() is called. With
this patch, close_pseudoconsole() is called only if the master
process is the owner of the nat-pipe to avoid the deadlock.
Takashi Yano [Tue, 22 Mar 2022 13:49:46 +0000 (22:49 +0900)]
Cygwin: pipe: Avoid deadlock for non-cygwin writer.
- As mentioned in commit message of the commit b531d6b0, if multiple
writers including non-cygwin app exist, the non-cygwin app cannot
detect pipe closure on the read side when the pipe is created by
system account or the the pipe creator is running as service.
This is because query_hdl which is held in write side also is a
read end of the pipe, so the pipe is still alive for the non-cygwin
app even after the reader is closed.
To avoid this problem, this patch lets all processes in the same
process group close query_hdl using newly introduced internal signal
__SIGNONCYGCHLD when non-cygwin app is started.
This fixes a bug introduced in a previous patch (Commit 44b60f0c:
Make __sdidinit unused). Removed intitialization of __cleanup from
__smakebuf_r(). All callers of __smakebuf_r() call __sinit()
through the_CHECK_INIT macro, thus __cleanup is already
initialized. This fix also allows _cleanup_r() to be made static.
Changed its name to cleanup_stdio() and removed its declaration
from local.h.
Jeff Johnston [Wed, 30 Mar 2022 19:58:06 +0000 (15:58 -0400)]
Commit patch from Tobias Burnus <tobias@codesourcery.com>
[PATCH] newlib: Only call _fputwc_r if ELIX_LEVEL >= 4
(nano-)vfprintf.c is enabled for ELIX_LEVEL >= 1. When _WIDE_ORIENT
is set, its __sprint_r / __sfputs_r functions unconditionally called
_fputwc_r which is only in ELEX_LEVEL >= 4. With this commit,
the _WIDE support in (nano-)vfprintf.c is disabled for ELEX_LEVEL < 4.
Mike Frysinger [Sun, 13 Mar 2022 21:22:36 +0000 (17:22 -0400)]
newlib: drop phoenix support
This code has not been updated since 2016, and it looks like it has
rotted quite a bit since. It does not build against the current set
of phoenix sources -- I had to hack both the kernel headers and the
newlib headers up to get it to build, and I still have no idea if it
actually links or runs. It seems like the project itself has moved
away from newlib and to its own C library:
https://phoenix-rtos.com/documentation/libc/README.md
So since there's no interest from the phoenix folks to maintain this,
and it has a significant amount of non-standard code that we try to
keep up-to-date (without actually testing it), just punt it all.
Andrew Stubbs [Mon, 21 Mar 2022 14:25:45 +0000 (14:25 +0000)]
amdgcn: Fix build failure
The recent makefile reorganization broke the amdgcn port by creating
duplicate __malloc_lock symbols. This patch fixes the problem by renaming
the malloc_support.c file to mlock.c, thus overriding the default symbol
properly. Actually, I'm not sure how this ever worked?
Jeff Law [Sun, 20 Mar 2022 00:01:33 +0000 (20:01 -0400)]
Avoid using common symbols in v850 libgloss
I've had this lying around for probably a year or two at this point.
It just changes all the instance of "errno" from a common symbol to an
extern. I can't offhand recall where the actual definition is, but it
certainly exists in the generic code.
Takashi Yano [Sat, 19 Mar 2022 00:21:04 +0000 (09:21 +0900)]
Cygwin: console: Do not use memcmp() to compare INPUT_RECORD.
- Using memcmp() to compare structure such as INPUT_RECORD is not
correct manner because padding may not be initialized. This patch
stops to use memcmp() for comparison of INPUT_RECORD.
Takashi Yano [Fri, 18 Mar 2022 23:43:24 +0000 (08:43 +0900)]
Cygwin: console: Ignore dwControlKeyState in event comparison.
- dwControlKeyState also may be null'ed on WriteConsoleInputW().
Therefore ignore it in event comparison as well as wVirtualKeyCode
and wVirtualScanCode.
Takashi Yano [Fri, 18 Mar 2022 12:35:07 +0000 (21:35 +0900)]
Cygwin: console: Fix typeahead key swapping which still occurs.
- The commit "Cygwin: console: Improve the code to avoid typeahead
key swapping." did not solve the problem enough. Two unexpected
things happen.
(1) wVirtualKeyCode and wVirtualScanCode of readback key event may
be null'ed even if they are not zero on WriteConsoleInputW().
Therefore, memcmp() may report the event sequence is not equal.
(2) WriteConsoleInputW() may not be atomic. The event sequence
which is written by WriteConsoleInputW() may be inserted by
key input in the middle of the sequence. Current code gives
up to fix in this situation.
This patch should fix that issue.
Mike Frysinger [Tue, 1 Mar 2022 04:36:27 +0000 (23:36 -0500)]
newlib: enable automatic dependency generation
This was disabled as part of the migration away from the cygnus option
as that implied no-dependencies.
We currently have 1-to-1 updates enabled -- if you touch a .c file,
the corresponding .o file will be rebuilt. But if you touch a header
file, none of the files using that get rebuilt.
Mike Frysinger [Tue, 15 Mar 2022 03:17:44 +0000 (23:17 -0400)]
winsup: disable fortify source
When using a compiler that automatically enables -D_FORTIFY_SOURCE,
building winsup fails with errors like below. Since winsup is not
setup to compile itself with _FORTIFY_SOURCE, disable it for now.
make[4]: Entering directory '.../x86_64-pc-cygwin/winsup/cygwin'
CC libc/minires-os-if.o
In file included from .../newlib/newlib/libc/include/ssp/strings.h:34,
from .../newlib/newlib/libc/include/strings.h:77,
from .../newlib/newlib/libc/include/string.h:24,
from ../../../../../winsup/cygwin/string.h:12,
from /usr/x86_64-pc-cygwin/usr/include/w32api/guiddef.h:154,
from /usr/x86_64-pc-cygwin/usr/include/w32api/winnt.h:635,
from /usr/x86_64-pc-cygwin/usr/include/w32api/minwindef.h:163,
from /usr/x86_64-pc-cygwin/usr/include/w32api/windef.h:9,
from /usr/x86_64-pc-cygwin/usr/include/windows.h:69,
from ../../../../../winsup/cygwin/winlean.h:56,
from ../../../../../winsup/cygwin/winsup.h:84,
from ../../../../../winsup/cygwin/libc/minires-os-if.c:13:
.../newlib/winsup/cygwin/include/ssp/socket.h:9:1: error: conflicting types for 'recv';
have 'ssize_t(int, void *, size_t, int)' {aka 'long int(int, void *, long unsigned int, int)'}
9 | __ssp_redirect0(ssize_t, recv, \
| ^~~~~~~~~~~~~~~
In file included from /usr/x86_64-pc-cygwin/usr/include/w32api/ws2tcpip.h:17,
from ../../../../../winsup/cygwin/libc/minires-os-if.c:14:
/usr/x86_64-pc-cygwin/usr/include/w32api/winsock2.h:1022:34: note: previous declaration of 'recv' with
type 'int(SOCKET, char *, int, int)' {aka 'int(long long unsigned int, char *, int, int)'}
1022 | WINSOCK_API_LINKAGE int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
| ^~~~
In file included from .../newlib/newlib/libc/include/ssp/strings.h:34,
from .../newlib/newlib/libc/include/strings.h:77,
from .../newlib/newlib/libc/include/string.h:24,
from ../../../../../winsup/cygwin/string.h:12,
from /usr/x86_64-pc-cygwin/usr/include/w32api/guiddef.h:154,
from /usr/x86_64-pc-cygwin/usr/include/w32api/winnt.h:635,
from /usr/x86_64-pc-cygwin/usr/include/w32api/minwindef.h:163,
from /usr/x86_64-pc-cygwin/usr/include/w32api/windef.h:9,
from /usr/x86_64-pc-cygwin/usr/include/windows.h:69,
from ../../../../../winsup/cygwin/winlean.h:56,
from ../../../../../winsup/cygwin/winsup.h:84,
from ../../../../../winsup/cygwin/libc/minires-os-if.c:13:
.../newlib/winsup/cygwin/include/ssp/socket.h:13:1: error: conflicting types for 'recvfrom';
have 'ssize_t(int, void *, size_t, int, struct sockaddr *, socklen_t *)' {aka 'long int(int, void *, long unsigned int, int, struct sockaddr *, int *)'}
13 | __ssp_redirect0(ssize_t, recvfrom, \
| ^~~~~~~~~~~~~~~
In file included from /usr/x86_64-pc-cygwin/usr/include/w32api/ws2tcpip.h:17,
from ../../../../../winsup/cygwin/libc/minires-os-if.c:14:
/usr/x86_64-pc-cygwin/usr/include/w32api/winsock2.h:1023:34: note: previous declaration of 'recvfrom' with
type 'int(SOCKET, char *, int, int, struct sockaddr *, int *)' {aka 'int(long long unsigned int, char *, int, int, struct sockaddr *, int *)'}
1023 | WINSOCK_API_LINKAGE int WSAAPI recvfrom(SOCKET s,char *buf,int len,int flags,struct sockaddr *from,int *fromlen);
| ^~~~~~~~
make[4]: *** [Makefile:1930: libc/minires-os-if.o] Error 1
CC gmon.o
../../../../../winsup/cygwin/gmon.c:60: error: "bzero" redefined [-Werror]
60 | #define bzero(ptr,size) memset (ptr, 0, size);
|
In file included from .../newlib/newlib/libc/include/strings.h:77,
from .../newlib/newlib/libc/include/string.h:24,
from ../../../../../winsup/cygwin/string.h:12,
from /usr/x86_64-pc-cygwin/usr/include/w32api/guiddef.h:154,
from /usr/x86_64-pc-cygwin/usr/include/w32api/winnt.h:635,
from /usr/x86_64-pc-cygwin/usr/include/w32api/minwindef.h:163,
from /usr/x86_64-pc-cygwin/usr/include/w32api/windef.h:9,
from /usr/x86_64-pc-cygwin/usr/include/windows.h:69,
from ../../../../../winsup/cygwin/winlean.h:56,
from ../../../../../winsup/cygwin/winsup.h:84,
from ../../../../../winsup/cygwin/gmon.h:69,
from ../../../../../winsup/cygwin/gmon.c:47:
.../newlib/newlib/libc/include/ssp/strings.h:43: note: this is the location of the previous definition
43 | #define bzero(dst, len) \
|
cc1: all warnings being treated as errors