diff -ruNb gcc-7.1.0.orig/libiberty/lrealpath.c gcc-7.1.0/libiberty/lrealpath.c --- gcc-7.1.0.orig/libiberty/lrealpath.c 2017-01-04 12:30:51.000000000 +0100 +++ gcc-7.1.0/libiberty/lrealpath.c 2017-05-28 00:13:05.844315144 +0200 @@ -138,15 +138,26 @@ { char buf[MAX_PATH]; char* basename; + char* slash; DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename); if (len == 0 || len > MAX_PATH - 1) return strdup (filename); else { - /* The file system is case-preserving but case-insensitive, - Canonicalize to lowercase, using the codepage associated - with the process locale. */ - CharLowerBuff (buf, len); + /* Turn all back slashes back back into forward slashes + and don't make it all lowercase. + Rationale: + Windows is as happy with / as it is with \. This will + have been built using Cygwin, MSYS* or cross-compiled + from a system where dirsep is / so it is cleaner just + to keep the dirseps as / (and the case un-modified). + This way, the value will be consistent with the build + system and string operations (be they internal to this + software or external to it, e.g. processing map files + with sed) work as expected. */ + slash = buf; + while ((slash = strchr(slash,'\\')) != NULL) + *slash = '/'; return strdup (buf); } }