diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1ac4be90306..7171a0c4f29 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2008-04-21  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* elfxx-mips.c (_bfd_mips_vxworks_adjust_dynamic_symbol): Don't
+	set the value of undefined symbols in shared objects.
+	(_bfd_mips_vxworks_finish_dynamic_symbol): Clear value for
+	undefined symbols unless pointer equality is needed.
+
 2008-04-18  Dennis Roberts  <dennis.roberts@sunquestinfo.com>
 
 	* aix5ppc-core.c: Define macros for the default architecture and
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 396e578a256..5173c0af4da 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -7466,15 +7466,14 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info,
       htab->splt->size += htab->plt_entry_size;
 
       /* If the output file has no definition of the symbol, set the
-	 symbol's value to the address of the stub.  For executables,
-	 point at the PLT load stub rather than the lazy resolution stub;
-	 this stub will become the canonical function address.  */
-      if (!h->def_regular)
+	 symbol's value to the address of the stub.  Point at the PLT
+	 load stub rather than the lazy resolution stub; this stub
+	 will become the canonical function address.  */
+      if (!info->shared && !h->def_regular)
 	{
 	  h->root.u.def.section = htab->splt;
 	  h->root.u.def.value = h->plt.offset;
-	  if (!info->shared)
-	    h->root.u.def.value += 8;
+	  h->root.u.def.value += 8;
 	}
 
       /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation.  */
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 627d9332a82..b2d61e0ec48 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-21  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* ld-vxworks/plt-mips1.s: New.
+	* ld-vxworks/plt-mips1.d: New.
+
 2008-04-16  David S. Miller  <davem@davemloft.net>
 
 	* ld-sparc/gotop32.dd: New.
diff --git a/ld/testsuite/ld-vxworks/plt-mips1.d b/ld/testsuite/ld-vxworks/plt-mips1.d
new file mode 100644
index 00000000000..d580df29ec1
--- /dev/null
+++ b/ld/testsuite/ld-vxworks/plt-mips1.d
@@ -0,0 +1,10 @@
+# target: mips*-*-*
+# source: plt-mips1.s
+# ld: -shared -z now
+# readelf: -s
+
+#...
+    [0-9]*: 00000000     0 FUNC    GLOBAL DEFAULT  UND Foo
+#...
+    [0-9]*: 00000000     0 FUNC    GLOBAL DEFAULT  UND Foo
+#...
diff --git a/ld/testsuite/ld-vxworks/plt-mips1.s b/ld/testsuite/ld-vxworks/plt-mips1.s
new file mode 100644
index 00000000000..2f7950412e9
--- /dev/null
+++ b/ld/testsuite/ld-vxworks/plt-mips1.s
@@ -0,0 +1 @@
+        lw      $25,%call16(Foo)($28)