diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 2b2f1caea..542479350 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2005-03-02 Christopher Faylor + + * autoload.cc (LoadDLLprime): Mask error code to low-order 16 bits. + (noload): Preserve sign when returning error code. + 2005-03-02 Christopher Faylor * spawn.cc (do_cleanup): Properly restore SIGINT/SIGQUIT even if they diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 59c24f7c2..805b765c1 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -89,7 +89,7 @@ _win32_" mangle (name, n) ": \n\ 1:movl (2f),%eax \n\ call *(%eax) \n\ 2:.long ." #dllname "_info \n\ - .long (" #n "+" #notimp ") | " #err "<<16 \n\ + .long (" #n "+" #notimp ") | (((" #err ") & 0xffff) <<16) \n\ .asciz \"" #name "\" \n\ .text \n\ "); @@ -128,7 +128,7 @@ noload: \n\ pushl %eax # First argument \n\ call _SetLastError@4 # Set it \n\ popl %eax # Get back argument \n\ - shrl $16,%eax # return value in high order word \n\ + sarl $16,%eax # return value in high order word \n\ jmp *%edx # Return \n\ 1: \n\ movl (%edx),%eax # Handle value \n\