diff --git a/ghc/driver/ghc.lprl b/ghc/driver/ghc.lprl
index a79525f4b07a4460611ddc13263c2d2a95ea86a7..42a91ebc6b5b07a3b87333530d692ca90b75289a 100644
--- a/ghc/driver/ghc.lprl
+++ b/ghc/driver/ghc.lprl
@@ -2789,6 +2789,9 @@ arg: while($_ = $Args[0]) {
 			    if ( $syslib eq 'posix') {
 				$syslib='ghc';
 				goto again;
+			    } elsif ( $syslib eq 'ghc' && $TargetName =~ /-solaris2$/ ) {
+				# needed for Berkeley socket/nwork stuff.
+				push(@SysLibrary, '-lnsl');
 			    }
 			    next arg; };
 
@@ -2966,7 +2969,10 @@ arg: while($_ = $Args[0]) {
     /^-fshow-import-specs/
 		    && do { push(@HsC_flags, $_); next arg; };
 
-    /^-fwarn-(.*)$/      && do { push(@HsC_flags, $_);   next arg; };
+    /^-fsignatures-required/      
+    		    && do { push(@HsC_flags, $_); next arg; };
+
+    /^-fwarn-(.*)$/      && do { push(@HsC_flags, $_); next arg; };
 
     /^-fno-(.*)$/   && do { push(@HsC_antiflags, "-f$1");
 			    &squashHscFlag("-f$1");
@@ -2974,7 +2980,7 @@ arg: while($_ = $Args[0]) {
 
     /^-W$/	    && do { push(@HsC_flags, @MinusWOpts); next arg; };
     /^-Wall$/	    && do { push(@HsC_flags, @MinusWallOpts); next arg; };
-    /^-Wnot$/       && do { foreach (@Hsc_flags) {
+    /^(-Wnot|w)$/   && do { foreach (@Hsc_flags) {
 				/^-fwarn-(.*)$/ && do { $_=''; };
 			    };
 			    push(@HsC_antiflags, @StandardWarnings);