diff --git a/bin/smartlink b/bin/smartlink
index 52e756cd44ec3ec01c47631e2c588c0ee629b246..b7124d8e7fb4c1beda6d5b6fe14a49e47893726d 100755
--- a/bin/smartlink
+++ b/bin/smartlink
@@ -21,6 +21,15 @@ export SGI_API
 
 SET_N32=""
 
+case "/$LINKER " in
+  */ld\ *)
+    LINKER_IS_LD=yes
+  ;;
+  *)
+    LINKER_IS_LD=no
+  ;;
+esac
+
 while test "$#" != 0; do
   case $1 in
     -R*)
@@ -57,6 +66,17 @@ while test "$#" != 0; do
     -n32)
      SET_N32="-n32"
     ;;
+
+
+    -Wl,*)
+      # Strip '-Wl,' if the linker is ld
+
+      if test $LINKER_IS_LD = yes; then
+        LDOPTS="$LDOPTS `echo $1|sed -e 's/^-Wl,//'`"
+      else
+        LDOPTS="$LDOPTS $1"
+      fi
+    ;;
     *)
     LDOPTS="$LDOPTS $1"
   esac
diff --git a/src/smartlink.c b/src/smartlink.c
index 551a5484baf2af22997becc37c7c207017061748..5fbd6f05d616d622c4b20bdd3d903b7fda1fea94 100644
--- a/src/smartlink.c
+++ b/src/smartlink.c
@@ -1,5 +1,5 @@
 /*
- * $Id: smartlink.c,v 1.4 2000/01/30 17:13:28 grubba Exp $
+ * $Id: smartlink.c,v 1.5 2000/02/20 00:08:47 hubbe Exp $
  *
  * smartlink - A smarter linker.
  * Based on the /bin/sh script smartlink 1.23.
@@ -87,7 +87,7 @@ int main(int argc, char **argv)
 
   if (!strcmp(argv[1], "-v")) {
     fprintf(stdout,
-	    "$Id: smartlink.c,v 1.4 2000/01/30 17:13:28 grubba Exp $\n"
+	    "$Id: smartlink.c,v 1.5 2000/02/20 00:08:47 hubbe Exp $\n"
 	    "Usage:\n"
 	    "\t%s binary [args]\n",
 	    argv[0]);
@@ -200,6 +200,27 @@ int main(int argc, char **argv)
     new_argv[new_argc++] = argv[i];
   }
 
+#ifndef USE_Wl
+  /* This code strips '-Wl,' from arguments if the 
+   * linker is '*ld'
+   */
+  if(linking)
+  {
+    int len=strlen(argv[1]);
+    if(strchr(argv[1],' ')) len=strchr(argv[1],' ') - argv[1];
+    if(len > 1 && argv[1][len-2]=='l' && argv[1][len-1]=='d')
+    {
+      for(i=2; i<argc; i++) {
+	if (new_argv[i][0] == '-' && new_argv[i][1]=='W' &&
+	    new_argv[i][2]=='l' && new_argv[i][3]==',')
+	{
+	  new_argv[i]=new_argv[i]+4;
+	}
+      }
+    }
+  }
+#endif
+
   if (n32) {
     i = new_argc++;
     /* Note don't copy index 0 */