diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 8a489e074ce275b9a58e50cfad5bab6c5693abee..03eb1368e08bb90d7551dbf67c3d321ba1131595 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,12 @@
 2011-03-28  Kai Tietz  <ktietz@redhat.com>
 
+	* gcc-interface/Makefile.in (SO_LIB): Handle multilib build for native
+	windows targets.
+	(EH_MECHANISM): Make sure we use gcc's exception mechanism for all
+	native windows target.
+	* system-mingw.ads (System): Change ZCX_By_Default default to
+	True.
+
 	* raise-gcc.c (PERSONALITY_FUNCTION): Add prototype to
 	prevent warning.
 
diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
index 71c00e2a813c693acb030aaa7caeb0b43e6a0844..246b401c8a9c5c3cdbd2f622f8ec25d413ec786d 100644
--- a/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc/ada/gcc-interface/Makefile.in
@@ -1634,21 +1634,26 @@ ifeq ($(strip $(filter-out cygwin32% mingw32% pe,$(osys))),)
     s-osprim.adb<s-osprim-mingw.adb \
     s-taprop.adb<s-taprop-mingw.adb
 
+    EH_MECHANISM=-gcc
     ifeq ($(strip $(filter-out x86_64%,$(arch))),)
       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
+	SO_OPTS = -m64 -Wl,-soname,
       endif
     else
       ifeq ($(strip $(MULTISUBDIR)),/64)
 	LIBGNAT_TARGET_PAIRS += \
 	  system.ads<system-mingw-x86_64.ads
+	SO_OPTS = -m64 -Wl,-soname,
       else
 	LIBGNAT_TARGET_PAIRS += \
 	  system.ads<system-mingw.ads
+	SO_OPTS = -m32 -Wl,-soname,
       endif
     endif
 
diff --git a/gcc/ada/system-mingw.ads b/gcc/ada/system-mingw.ads
index 6a9131a30d5eb6fd4d80bb303e1c73b50e4d088e..b9ab72407a27b774a421169883db12277e3f9a1a 100644
--- a/gcc/ada/system-mingw.ads
+++ b/gcc/ada/system-mingw.ads
@@ -139,7 +139,7 @@ private
    Always_Compatible_Rep     : constant Boolean := False;
    Suppress_Standard_Library : constant Boolean := False;
    Use_Ada_Main_Program_Name : constant Boolean := False;
-   ZCX_By_Default            : constant Boolean := False;
+   ZCX_By_Default            : constant Boolean := True;
    GCC_ZCX_Support           : constant Boolean := True;
 
    ---------------------------