diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8781578c8f2..824e8517204 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2002-01-31  Hans-Peter Nilsson  <hp@axis.com>
+
+	* elf32-cris.c (elf_cris_discard_excess_program_dynamics): Don't
+	unexport unreferenced symbols when --export-dynamic.  Call
+	_bfd_elf_strtab_delref when unexporting.
+
 2002-01-30  Daniel Jacobowitz  <drow@mvista.com>
 
 	* bfd-in.h: Include <stdbool.h> if it is available.
diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c
index 6feb292c191..c588adcc48b 100644
--- a/bfd/elf32-cris.c
+++ b/bfd/elf32-cris.c
@@ -2936,8 +2936,14 @@ elf_cris_discard_excess_program_dynamics (h, inf)
       /* If the locally-defined symbol isn't used by a DSO, then we don't
 	 have to export it as a dynamic symbol.  This was already done for
 	 functions; doing this for all symbols would presumably not
-	 introduce new problems.  */
-      h->root.dynindx = -1;
+	 introduce new problems.  Of course we don't do this if we're
+	 exporting all dynamic symbols.  */
+      if (! info->export_dynamic)
+	{
+	  h->root.dynindx = -1;
+	  _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+				  h->root.dynstr_index);
+	}
     }
 
   return true;