diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 8d825a7bb29..502ba653e28 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,7 @@
+Tue Sep 17 11:04:50 1996  James G. Smith  <jsmith@cygnus.co.uk>
+
+	* run.c (main): Explicitly cast malloc() parameter.
+
 Thu Sep 12 11:27:21 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
 	* run.c (sim_bfd): New global to hold the bfd pointer for the
diff --git a/sim/common/run.c b/sim/common/run.c
index 982d99c7ad8..76cc48a5dea 100644
--- a/sim/common/run.c
+++ b/sim/common/run.c
@@ -112,13 +112,22 @@ main (ac, av)
   for (s = abfd->sections; s; s = s->next)
   if (abfd && (s->flags & SEC_LOAD))
     {
-      unsigned char *buffer = (unsigned char *)malloc (bfd_section_size (abfd, s));
-      bfd_get_section_contents (abfd,
-				s,
-				buffer,
-				0,
-				bfd_section_size (abfd, s));
-      sim_write (s->vma, buffer, bfd_section_size (abfd, s));
+      unsigned char *buffer = (unsigned char *)malloc ((size_t)(bfd_section_size (abfd, s)));
+      if (buffer != NULL)
+        {
+          bfd_get_section_contents (abfd,
+                                    s,
+                                    buffer,
+                                    0,
+                                    bfd_section_size (abfd, s));
+          sim_write (s->vma, buffer, bfd_section_size (abfd, s));
+        }
+      else
+        {
+          fprintf (stderr, "run: failed to allocate section buffer: %s\n", 
+                   bfd_errmsg(bfd_get_error()));
+          exit (1);
+        }
     }
 
   start_address = bfd_get_start_address (abfd);