diff options
Diffstat (limited to 'winsup/cygwin/autoload.cc')
-rw-r--r-- | winsup/cygwin/autoload.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 99fcf790e..4d8ffd08e 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -212,7 +212,6 @@ std_dll_init () struct func_info *func = (struct func_info *) __builtin_return_address (0); struct dll_info *dll = func->dll; retchain ret; - WCHAR dll_path[MAX_PATH]; if (InterlockedIncrement (&dll->here)) do @@ -225,6 +224,7 @@ std_dll_init () { fenv_t fpuenv; fegetenv (&fpuenv); + WCHAR dll_path[MAX_PATH]; /* http://www.microsoft.com/technet/security/advisory/2269637.mspx */ wcpcpy (wcpcpy (dll_path, windows_system_directory), dll->name); if ((h = LoadLibraryW (dll_path)) != NULL) @@ -233,11 +233,15 @@ std_dll_init () dll->handle = h; } else if (!(func->decoration & 1)) - api_fatal ("could not load %W, %E", dll->name); + api_fatal ("could not load %W, %E", dll_path); else dll->handle = INVALID_HANDLE_VALUE; } + /* Set "arguments for dll_chain. */ + ret.low = (long) dll->init; + ret.high = (long) func; + InterlockedDecrement (&dll->here); /* Kludge alert. Redirects the return address to dll_chain. */ @@ -245,9 +249,6 @@ std_dll_init () movl $dll_chain,4(%ebp) \n\ "); - /* Set "arguments for dll_chain. */ - ret.low = (long) dll->init; - ret.high = (long) func; return ret.ll; } |