aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-05-21Cygwin: POSIX msg queues: destroy msg queue fhandler in case of errorCorinna Vinschen1-2/+7
...and don't leave a descriptor dangling Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: POSIX msg queues: move handling of memory map into fhandlerCorinna Vinschen3-71/+52
This encapsulated creation, duplication, and closing of all Windows objects connected to the message queue in the fhandler. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: POSIX ipc: fix evaluation of naming rulesCorinna Vinschen1-10/+21
The function evaluating correctness of ipc object names was a bit half-hearted. Fix the tests to follow more closely the desriptions in the Linux man pages. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: posix_ipc.cc: fix typoCorinna Vinschen1-1/+1
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: POSIX msg queues: create fhandler with object nameCorinna Vinschen3-9/+8
build_fh_dev can take the POSIX object name as parameter anyway, so use that and drop from mqinfo call. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: POSIX msg queues: move IPC object creation into fhandlerCorinna Vinschen2-96/+46
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: fix formatting in mqueue_types.hCorinna Vinschen1-9/+9
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: POSIX msg queues: use queue name as keyCorinna Vinschen2-14/+8
Drop creating a unique ID, the queue name itself is already unique. This allows to move ipc object generation into the fhandler in the next step. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: POSIX msg queues: Convert mqd_t to a descriptorCorinna Vinschen9-122/+343
So far, the mqd_t type returned a pointer to an allocated area under the hood. The mutex and event objects attached to the message queue were implemented as inheritable types. As unfortunate side effect the HANDLEs to these objects were inherited by exec'd child processes, even though all other message queue properties are not inherted, per POSIX. Fix this by converting an mqd_t to a descriptor, and create a matching fhandler_mqueue object to handle various aspects of the message queues inside the fhandler. Especially, create the IPC objects as non-inheritable and duplicate the HANDLEs as part of the fixup_after_fork mechanism. Drop using mmap and create the memory map with NT functions. This allows to control duplication of handle and mapping in the forked child process, without the requirement to regenerate the map in the same spot. It also allows to dup() the descriptor, as on Linux, albeit this isn't implemented yet. This patch is the first cut. There's a bit more to do, like moving more functionality from the POSIX functions into the fhandler and making sure the mqd_t type can't be used in other descriptor-related functions willy-nilly. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-21Cygwin: utils: chattr: Allow to clear all attributes with '='.Christian Franke2-7/+11
Signed-off-by: Christian Franke <christian.franke@t-online.de>
2021-05-20Cygwin: utils: ldd: use GetFinalPathNameByHandleWCorinna Vinschen1-31/+2
drop replacement function GetFileNameFromHandle which was only required pre-Vista. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-20Cygwin: utils: avoid warning when building path_testsuite-path.oCorinna Vinschen1-4/+3
Avoid this warning: [...]/winsup/utils/mingw/../path.cc:569:1: warning: 'void read_mounts() ' defined but not used [-Wunused-function] 569 | read_mounts () | ^~~~~~~~~~~ Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-20Cygwin: utils: chattr: do not default to CWDCorinna Vinschen1-6/+3
Drop the unexpected behaviour to run chattr in the CWD if no file has been specified on the command line. Bail out with usage info instead. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-20Cygwin: utils: chattr: fix recursive behaviourCorinna Vinschen1-1/+1
chattr [mode] dir incorrectly recurses one level into the given directory, even if the --recursive option has not been used. This patch adds a test to avoid this bug. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-20Cygwin: utils: chattr: Improve option parsing, fix some messages.Christian Franke2-23/+19
Allow multiple characters also in first '-mode' argument. Use '-H' instead of '-h' for '--help' to fix ambiguity with hidden attribute. Fix help and usage texts and documentation. Signed-off-by: Christian Franke <christian.franke@t-online.de>
2021-05-20sys/stat.h: Enable UTIME_NOW and UTIME_OMIT for RTEMSJoel Sherrill1-1/+1
2021-05-20Cygwin: autoload: fix case in DLL name for sanityCorinna Vinschen1-1/+1
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-20Cygwin: Add missing IsWow64Process2 declarationCorinna Vinschen1-0/+3
The previous patch is accidentally missing the declaration of IsWow64Process2. Add it belatedly. Fixes: 1865a41cb383 ("Cygwin: suppress FAST_CWD warnings on ARM64") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-19Cygwin: suppress FAST_CWD warnings on ARM64Jeremy Drake2-24/+10
The old check was insufficient: new insider preview builds of Windows allow running x86_64 process on ARM64. The IsWow64Process2 function seems to be the intended way to figure this situation out.
2021-05-19Cygwin: Handle virtual drives as non-symlinksJeremy Drake1-7/+2
This avoids MAX_PATH-related problems in native tools in case the virtual drive points to a deep directory Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-12Cygwin: POSIX message queues: simplify sync object creationCorinna Vinschen1-26/+27
Introduce new inline function mq_ipc_init to create all three required sync objects. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-10Cygwin: Use parallel make on AppVeyorJon Turney1-9/+13
We're bumping up against the 1hr free job duration limit on AppVeyor, so use 'make -j$(nproc)' to allow things to build slightly faster. Restructure the way build_script: is written in YAML, so it's slightly less repetitive and easier to add that. Also skip 'make check' on x86, since it currently just hangs. :(
2021-05-10Get rid of relative include paths in strace.ccJon Turney2-6/+6
2021-05-10Move source files used in utils/mingw/ into that subdirectoryJon Turney10-15/+19
Move all the source files used in utils/mingw/ into that subdirectory, so the built objects are in the expected place. (path.cc requires some more unpicking, and even then there is genuinely some shared code, so use a trivial file which includes the real path.cc so the object file is generated where expected)
2021-05-10Unpick cygpath TESTSUITEJon Turney4-58/+48
Rather than having testsuite.h do various things, depending on defines, just have it do one thing, and then explicitly redirect to test stubs in path.cc when building test.
2021-05-07Cygwin: fetch Windows directory on all platforms and use throughoutCorinna Vinschen5-41/+24
Rather than fetching the system Windows directory at dll init time only on 32 bit, fetch it on all platforms. Store as WCHAR and UNICODE_STRING. Use where appropriate to simplify code. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-07Cygwin: path_conv: Rework handling native symlinks as inner path componentsCorinna Vinschen1-62/+97
commit 456c3a46386f was only going half-way. It handled symlinks and junction points as inner path components and made realpath return the correct path, but it ignored drive letter substitution, i. e., virtual drives created with, e. g. subst X: C:\foo\bar It was also too simple. Just returning an error code from symlink_info::check puts an unnecessary onus on the symlink evaluation loop in path_conv::check. Rework the code to use GetFinalPathNameByHandle, and only do this after checking the current file for being a symlink failed. If the final path returned by GetFinalPathNameByHandle is not the same as the incoming path, replace the incoming path with the POSIXified final path. This also short-circuits path evaluation, because path_conv::check doesn't have to recurse over the inner path components multiple times if all symlinks are of a native type, while still getting the final path as end result. Virtual drives are now handled like symlinks. This is a necessary change from before to make sure virtual drives are handled identically across different access methods. An example is realpath(1) from coreutils. It doesn't call readlink(2), but iterates over all path components using lstat/readlink calls. Both methods should result in the same real path. Fixes: 456c3a46386f ("path_conv: Try to handle native symlinks more sanely") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-06Cygwin: revert handwritten tags/ctags target, take 2Corinna Vinschen1-13/+9
Fix accidental checkin of the wrong test version Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-06Cygwin: revert handwritten tags/ctags targetCorinna Vinschen1-0/+15
Converting to automake dropped the former, handwritten tags/ctags target. This leads to a couple of problems: - For no good reason the tags file gets written to the builddir instead of to the srcdir where it's needed. - `make tags' requires etags to exist, rather than checking if it exists and skipping it. - Adding the extra ctags arguments to AM_CTAGSFLAGS still results in a shortened tags file. (Temporary?) solution: Revert the old tags/ctags rules and silence the automake warnings. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-06Cygwin: autogen.sh: Allow running from any directoryCorinna Vinschen1-0/+2
autogen.sh expects to run from within the winsup dir, so set CWD accordingly before running autotools. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-05-03Nano-malloc: Fix for unwanted external heap fragmentationOla Olsson1-9/+61
The only reason why it is tough for us to use nano malloc is because of the small shortcoming where nano_malloc() splits a bigger chunk from the free list into two pieces while handing back the second one (the tail) to the user. This is error prone and especially bad for smaller heaps, where nano malloc is supposed to be superior. The normal malloc doesn't have this issue and we need to use it even though it costs us ~2k bytes compared to nano-malloc. The problem arise especially after giving back _every_ malloced memory to the heap and then starting to exercise the heap again by allocating something small. This small item might split the whole heap in two equally big parts depending on how the heap has been exercised before. I have uploaded the smallest possible application (only tested on ST and Nordic devices) to show the issue while the real customer applications are far more complicated: https://drive.google.com/file/d/1kfSC2KOm3Os3mI7EBd-U0j63qVs8xMbt/view?usp=sharing The application works like the following pseudo code, where we assume a heap of 100 bytes (I haven't taken padding and other nitty and gritty details into account. Everything to simplify understanding): void *ptr = malloc(52); // We get 52 bytes and we have // 48 bytes to use. free(ptr); // Hand back the 52 bytes to nano_malloc // This is the magic line that shows the issue of // nano_malloc ptr = malloc(1); // Nano malloc will split the 52 bytes // in the free list and hand you a pointer // somewhere in the // middle of the heap. ptr2 = malloc(52); // Out of memory... I have done a fix which hands back the first part of the splitted chunk. Once this is fixed we obviously have the 1 byte placed in position 0 of the heap instead of somewhere in the middle. However, this won't let us malloc 52 new bytes even though we potentially have 99 bytes left to use in the heap. The reason is that when we try to do the allocation, nano-malloc looks into the free list and sees a 51 byte chunk to be used. This is not big enough so nano-malloc decides to call sbrk for _another_ 52 bytes which is not possible since there is only 48 bytes left to ask for. The solution for this problem is to check if the last item in the free list is adjacent to sbrk(0). If it is, as it is in this case, we can just ask sbrk for the remainder of what is needed. In this case 1 byte. NB! I have only tested the solution on our ST device.
2021-04-30Cygwin: Ensure toollibdir exists before installing a link thereJon Turney1-0/+1
This helps 'make install -j2' work.
2021-04-30format_proc_swaps: ensure space between fields for clarityBrian Inglis1-3/+12
page/swap space name >= 40 or size/used >= 8 leaves no space between fields; ensure a space after name and add extra tabs after size and used fields; output appears like Linux 5.8 after changes to mm/swapfile(swap_show); proc-swaps-space-before.log: ==> /proc/swaps <== Filename Type Size Used Priority /mnt/c/pagefile.sys file 11567748292920 0 /mnt/d/pagefile.sys file 12582912205960 0 proc-swaps-space-after.log: ==> /proc/swaps <== Filename Type Size Used Priority /mnt/c/pagefile.sys file 11567748 241024 0 /mnt/d/pagefile.sys file 12582912 182928 0
2021-04-30Cygwin: mq_open: set filesize using ftruncateCorinna Vinschen1-3/+3
ftruncate is leaner than lseek/write. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-30Cygwin: CI configuration updateJon Turney3-6/+19
Install autoconf and automake, and run winsup/autogen.sh, and don't have it silently ignore failures. On AppVeyor: - use latest VM image, to reduce time spent installing updates. - run the testsuite, but ignore the result, as some tests don't work correctly. - hardcode the python-lxml and python-ply packages to install, so we get ones for the right python. - install texlive collections now needed to build documentation. On github: - Use a copr for cocom, since RPMSphere's package updates don't track fedora:latest very efficently.
2021-04-30Cygwin: POSIX mq: avoid double calls to ipc_mutex_unlockCorinna Vinschen1-3/+0
_mq_send as well as _mq_receive call ipc_mutex_unlock twice in case of success, after having introduced __try/__except blocks. Fixes: 3f3bd10104550 ("* Throughout, use __try/__except/__endtry blocks, rather than myfault handler.") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-29Cygwin: POSIX mq: only allo priority up to MQ_PRIO_MAX - 1Corinna Vinschen1-1/+1
POSIX requires that message priorities range from 0 (low) to sysconf(_SC_MQ_PRIO_MAX) - 1 (high). Cygwin's mq_send erroneously allowed a message priority of sysconf(_SC_MQ_PRIO_MAX). Fix it. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-29Cygwin: FAQ: building-cygwin: accomodate autoconf changesCorinna Vinschen1-26/+39
- also, rephrase slightly for better readability and remove questionable old cruft Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-29Cygwin: automake: change @INCLUDES@ to @AM_CPPFLAGS@ to avoid warningsCorinna Vinschen4-9/+9
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-29Cygwin: automake: fix warning in terms of the `ps' targetCorinna Vinschen1-3/+8
We are building a ps executable, but the rule to build the target collides with an auto-generated, documentation-related `ps' rule. Work around that by naming the executable "cygps" at build time and use a transform rule to rename it at installation time. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-29Cygwin: specify toollibdir toolincludedir in terms of tooldirJon Turney1-2/+2
Specify toollibdir and toolincludedir in terms of tooldir, so the install location is correct if tooldir is the default ($(exec_prefix)/$(target_alias)), or explicitly specified on the 'make' command line.
2021-04-29Cygwin: drop all generated autotools filesCorinna Vinschen11-16371/+5
- add autotool files generated under winsup to .gitignore Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-28format_proc_cpuinfo: add v_spec_ctrl, bus_lock_detectBrian Inglis1-0/+2
Linux 5.12 Frozen Wasteland added features and changes: add AMD 0x8000000a EDX:20 v_spec_ctrl virtual speculation control support add Intel 0x00000007 ECX:24 bus_lock_detect bus lock detect debug exception
2021-04-27Cygwin: tty.h: devices.h is a local header, not a system headerCorinna Vinschen1-1/+1
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-04-27Cygwin: Use automake (v5)Jon Turney25-1836/+12122
v2: * Include tzmap.h in BUILT_SOURCES * Make per-file flags appear after user-supplied CXXFLAGS, so they can override optimization level. * Correct .o files used to define symbols exported by libm.a * Drop gcrt0.o mistakenly included in libgmon.a * Add missing line continuations in GMON_FILES value v3: * use per-file flags for .c compilation * override C{XX,}FLAGS, as they are set on the command line by top-level make v4: * Drop -Wno-error=write-strings from path_testsuite CXXFLAGS v5: * Update for changes in master - Add -fno-threadsafe-statics to CXX flags - Add hypotl.cc - Remove fenv.cc (in favour of newlib), add fenv.c stub - Add proc.5 manpage rules
2021-04-27Cygwin: connect: implement resetting a connected DGRAM socketKen Brown4-7/+56
Following POSIX and Linux, allow a connected DGRAM socket's connection to be reset (so that the socket becomes unconnected). This is done by calling connect and specifing an address whose family is AF_UNSPEC.
2021-04-26Cygwin: connect: set connect state for DGRAM socketsKen Brown3-17/+26
When connect is called on a DGRAM socket, the call to Winsock's connect can immediately return successfully rather than failing with WSAEWOULDBLOCK. Set the connect state to "connected" in this case. Previously the connect state remained "connect_pending" after the successful connection.
2021-04-26bfin: add myself as maintainerMike Frysinger1-0/+1
2021-04-21Cygwin: pty: Add missing guard for close_pseudoconsole().Takashi Yano1-0/+2
- This patch adds a missing mutex guard for close_pseudoconsole() call when GDB exits.
2021-04-21Cygwin: pty: Fix fallback processing in setup_pseudoconsole().Takashi Yano1-4/+8
- Currently, the fallback processing in setup_pseudoconsole() when helper process error occurs does not work properly. This patch fixes the issue.