[newlib-cygwin] FAST_CWD: adjust the initial search scope

Corinna Vinschen corinna@sourceware.org
Thu Jan 12 08:24:00 GMT 2017


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=e5cadbfdcdd8b06932a9503b3c72511b68f03a60

commit e5cadbfdcdd8b06932a9503b3c72511b68f03a60
Author: Johannes Schindelin <johannes.schindelin@gmx.de>
Date:   Wed Jan 11 14:21:31 2017 +0100

    FAST_CWD: adjust the initial search scope
    
    A *very* recent Windows build adds more code to the preamble of
    RtlGetCurrentDirectory_U() so that the previous heuristic failed to find
    the call to the locking routine.
    
    This only affects the 64-bit version of ntdll, where the 0xe8 byte is
    now found at offset 40, not the 32-bit version. However, let's just
    double the area we search for said byte for good measure.
    
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

Diff:
---
 winsup/cygwin/path.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index c3b304a..ee7636d 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -4034,7 +4034,7 @@ find_fast_cwd_pointer ()
   if (!get_dir || !ent_crit)
     return NULL;
   /* Search first relative call instruction in RtlGetCurrentDirectory_U. */
-  const uint8_t *rcall = (const uint8_t *) memchr (get_dir, 0xe8, 40);
+  const uint8_t *rcall = (const uint8_t *) memchr (get_dir, 0xe8, 80);
   if (!rcall)
     return NULL;
   /* Fetch offset from instruction and compute address of called function.
@@ -4133,7 +4133,7 @@ find_fast_cwd_pointer ()
   if (!get_dir || !ent_crit)
     return NULL;
   /* Search first relative call instruction in RtlGetCurrentDirectory_U. */
-  const uint8_t *rcall = (const uint8_t *) memchr (get_dir, 0xe8, 32);
+  const uint8_t *rcall = (const uint8_t *) memchr (get_dir, 0xe8, 64);
   if (!rcall)
     return NULL;
   /* Fetch offset from instruction and compute address of called function.



More information about the Cygwin-cvs mailing list