Hello, this patch fixes some nits about MSG_WAITALL for mingw(-w64) targets. Additionally it improves multilib configury for windows native targets.
ChangeLog gcc/ada 2011-03-28 Kai Tietz * raise-gcc.c (PERSONALITY_FUNCTION): Add prototype to prevent warning. * g-socthi-mingw.adb (C_Recvmsg): Handle MSG_WAITALL for windows native targets. * s-oscons-tmplt.c (MSG_WAITALL): Define it for native windows targets to flag value. * gcc-interface/Makefile.in (SO_LIB): Handle multilib build for native windows targets. (EH_MECHANISM): Make sure we use gcc's exception mechanism for 64-bit native windows target. Tested for x86_64-w64-mingw32 and i686-w64-mingw32 targets. Ok for apply? Regards, Kai
Index: gcc/gcc/ada/g-socthi-mingw.adb =================================================================== --- gcc.orig/gcc/ada/g-socthi-mingw.adb 2010-09-09 16:07:42.000000000 +0200 +++ gcc/gcc/ada/g-socthi-mingw.adb 2011-03-28 09:42:45.039326300 +0200 @@ -277,7 +277,8 @@ package body GNAT.Sockets.Thin is use type C.size_t; Fill : constant Boolean := - (C.unsigned (Flags) and SOSC.MSG_WAITALL) /= 0; + SOSC.MSG_WAITALL /= -1 + and then (C.unsigned (Flags) and SOSC.MSG_WAITALL) /= 0; -- Is the MSG_WAITALL flag set? If so we need to fully fill all vectors Res : C.int; Index: gcc/gcc/ada/gcc-interface/Makefile.in =================================================================== --- gcc.orig/gcc/ada/gcc-interface/Makefile.in 2011-03-28 09:27:19.000000000 +0200 +++ gcc/gcc/ada/gcc-interface/Makefile.in 2011-03-28 09:26:53.759029000 +0200 @@ -1638,17 +1638,23 @@ ifeq ($(strip $(filter-out cygwin32% min ifeq ($(strip $(MULTISUBDIR)),/32) LIBGNAT_TARGET_PAIRS += \ system.ads<system-mingw.ads + SO_OPTS= -m32 -Wl,-soname, else LIBGNAT_TARGET_PAIRS += \ system.ads<system-mingw-x86_64.ads + EH_MECHANISM=-gcc + SO_OPTS = -m64 -Wl,-soname, endif else ifeq ($(strip $(MULTISUBDIR)),/64) LIBGNAT_TARGET_PAIRS += \ system.ads<system-mingw-x86_64.ads + EH_MECHANISM=-gcc + SO_OPTS = -m64 -Wl,-soname, else LIBGNAT_TARGET_PAIRS += \ system.ads<system-mingw.ads + SO_OPTS = -m32 -Wl,-soname, endif endif Index: gcc/gcc/ada/raise-gcc.c =================================================================== --- gcc.orig/gcc/ada/raise-gcc.c 2010-10-28 22:36:06.000000000 +0200 +++ gcc/gcc/ada/raise-gcc.c 2011-03-28 09:11:43.053384100 +0200 @@ -1065,6 +1065,11 @@ typedef _Unwind_Action phases_arg_t; #endif _Unwind_Reason_Code +PERSONALITY_FUNCTION (version_arg_t, phases_arg_t, + _Unwind_Exception_Class, _Unwind_Exception *, + _Unwind_Context *); + +_Unwind_Reason_Code PERSONALITY_FUNCTION (version_arg_t version_arg, phases_arg_t phases_arg, _Unwind_Exception_Class uw_exception_class, Index: gcc/gcc/ada/s-oscons-tmplt.c =================================================================== --- gcc.orig/gcc/ada/s-oscons-tmplt.c 2010-12-24 11:41:57.000000000 +0100 +++ gcc/gcc/ada/s-oscons-tmplt.c 2011-03-28 09:15:39.683932300 +0200 @@ -1084,6 +1084,10 @@ CND(MSG_PEEK, "Peek at incoming data") CND(MSG_EOR, "Send end of record") #ifndef MSG_WAITALL +#ifdef __MINWGW32__ +/* We use it on windows native targets, so set to flag value. */ +# define MSG_WAITALL (1 << 2) +#else # define MSG_WAITALL -1 #endif CND(MSG_WAITALL, "Wait for full reception")