Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2023-05-22 14:36:27 +0300
committerJon Turney <jon.turney@dronecode.org.uk>2023-05-25 00:06:22 +0300
commitdeca777a958cad67faa73d7457ecccd8c73ed943 (patch)
tree2dd9e7c5e71ee6f0b958735666768ed2b6d9ea7b
parent1c63eaace825e32f2d03a3a228a40b1019b94c71 (diff)
Cygwin: Adjust CWD magic to accommodate for the latest Windows previews
Reportedly Windows 11 build 25*** from Insider changed the current working directory logic a bit, and Cygwin's "magic" (or: "technologically sufficiently advanced") code needs to be adjusted accordingly. This fixes https://github.com/git-for-windows/git/issues/4429 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> (cherry picked from commit 4840a5632520c1a3c1598f73f9d1cdd37df371ba)
-rw-r--r--winsup/cygwin/path.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 5b3df20dd..e788c7d60 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -4578,13 +4578,27 @@ find_fast_cwd_pointer ()
if (!lock)
{
/* Windows 8.1 Preview calls `lea rel(rip),%r12' then some unrelated
- or, then `mov %r12,%rcx', then `callq RtlEnterCriticalSection'. */
+ ops, then `mov %r12,%rcx', then `callq RtlEnterCriticalSection'. */
lock = (const uint8_t *) memmem ((const char *) use_cwd, 80,
"\x4c\x8d\x25", 3);
- if (!lock)
- return NULL;
call_rtl_offset = 14;
}
+
+ if (!lock)
+ {
+ /* A recent Windows 11 Preview calls `lea rel(rip),%r13' then
+ some unrelated instructions, then `callq RtlEnterCriticalSection'.
+ */
+ lock = (const uint8_t *) memmem ((const char *) use_cwd, 80,
+ "\x4c\x8d\x2d", 3);
+ call_rtl_offset = 24;
+ }
+
+ if (!lock)
+ {
+ return NULL;
+ }
+
PRTL_CRITICAL_SECTION lockaddr =
(PRTL_CRITICAL_SECTION) (lock + 7 + peek32 (lock + 3));
/* Test if lock address is FastPebLock. */