diff --git a/ld/ChangeLog b/ld/ChangeLog
index 3e11bcdb508381e4817bd785b335a44eac298749..6d26e9c75778705f08dd1ce5b302102236d3522c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-23  Ryan Mansfield  <rmansfield@qnx.com>
+
+	PR ld/10489
+	* emultempl/elf32.em (gld${EMULATION_NAME}_search_needed): Handle
+	drive specifiers for DOS based filesystems in rpath-link strings.
+
 2009-10-19  Nick Clifton  <nickc@redhat.com>
 
 	* Makefile.am: Remove spurious sanitization marker.
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index f7b70acf5d929c8c00910dd2e083a6c9c903a0f0..6df6d0f7b5d11996589b7f7cc80ee6322f9dcb03 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -58,6 +58,7 @@ fragment <<EOF
 #include <ldgram.h>
 #include "elf/common.h"
 #include "elf-bfd.h"
+#include "filenames.h"
 
 /* Declare functions used by various EXTRA_EM_FILEs.  */
 static void gld${EMULATION_NAME}_before_parse (void);
@@ -472,6 +473,17 @@ gld${EMULATION_NAME}_search_needed (const char *path,
       if (s == NULL)
 	s = path + strlen (path);
 
+#if HAVE_DOS_BASED_FILE_SYSTEM
+      /* Assume a match on the second char is part of drive specifier.  */
+      else if (config.rpath_separator == ':'
+	       && s == path + 1
+	       && ISALPHA (*path))
+	{
+	  s = strchr (s + 1, config.rpath_separator);
+	  if (s == NULL)
+	    s = path + strlen (path);
+	}
+#endif
       filename = (char *) xmalloc (s - path + len + 2);
       if (s == path)
 	sset = filename;