ubsan: z8k: index 10 out of bounds for type 'unsigned int const[10]'
[deliverable/binutils-gdb.git] / sim / common / sim-utils.c
index 6184f1b10ebffbfd910b65f2568a164359140ff4..d420f55d5150f0247c4ac20b0f598a9d8bfd5e31 100644 (file)
@@ -1,22 +1,21 @@
 /* Miscellaneous simulator utilities.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1997-2020 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
 
 This file is part of GDB, the GNU debugger.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "sim-main.h"
 #include "sim-assert.h"
@@ -49,25 +48,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "bfd.h"
 #include "sim-utils.h"
 
-/* Global pointer to all state data.
-   Set by sim_resume.  */
-struct sim_state *current_state;
-
-/* Allocate zero filled memory with xmalloc - xmalloc aborts of the
+/* Allocate zero filled memory with xcalloc - xcalloc aborts if the
    allocation fails.  */
 
 void *
 zalloc (unsigned long size)
 {
-  void *memory = (void *) xmalloc (size);
-  memset (memory, 0, size);
-  return memory;
-}
-
-void
-zfree (void *data)
-{
-  free (data);
+  return xcalloc (1, size);
 }
 
 /* Allocate a sim_state struct.  */
@@ -114,13 +101,13 @@ sim_state_alloc (SIM_OPEN_KIND kind,
 void
 sim_state_free (SIM_DESC sd)
 {
-  ASSERT (sd->base.magic == SIM_MAGIC_NUMBER);
+  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
 
 #ifdef SIM_STATE_FREE
   SIM_STATE_FREE (sd);
 #endif
 
-  zfree (sd);
+  free (sd);
 }
 
 /* Return a pointer to the cpu data for CPU_NAME, or NULL if not found.  */
@@ -172,7 +159,7 @@ sim_io_eprintf_cpu (sim_cpu *cpu, const char *fmt, ...)
   va_list ap;
 
   va_start (ap, fmt);
-  sim_io_eprintf (sd, sim_cpu_msg_prefix (cpu));
+  sim_io_eprintf (sd, "%s", sim_cpu_msg_prefix (cpu));
   sim_io_evprintf (sd, fmt, ap);
   va_end (ap);
 }
@@ -220,10 +207,7 @@ sim_add_commas (char *buf, int sizeof_buf, unsigned long value)
    bfd open.  */
 
 SIM_RC
-sim_analyze_program (sd, prog_name, prog_bfd)
-     SIM_DESC sd;
-     char *prog_name;
-     bfd *prog_bfd;
+sim_analyze_program (SIM_DESC sd, const char *prog_name, bfd *prog_bfd)
 {
   asection *s;
   SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
@@ -246,13 +230,13 @@ sim_analyze_program (sd, prog_name, prog_bfd)
   prog_bfd = bfd_openr (prog_name, STATE_TARGET (sd));
   if (prog_bfd == NULL)
     {
-      sim_io_eprintf (sd, "%s: can't open \"%s\": %s\n", 
+      sim_io_eprintf (sd, "%s: can't open \"%s\": %s\n",
                      STATE_MY_NAME (sd),
                      prog_name,
                      bfd_errmsg (bfd_get_error ()));
       return SIM_RC_FAIL;
     }
-  if (!bfd_check_format (prog_bfd, bfd_object)) 
+  if (!bfd_check_format (prog_bfd, bfd_object))
     {
       sim_io_eprintf (sd, "%s: \"%s\" is not an object file: %s\n",
                      STATE_MY_NAME (sd),
@@ -279,11 +263,11 @@ sim_analyze_program (sd, prog_name, prog_bfd)
   STATE_START_ADDR (sd) = bfd_get_start_address (prog_bfd);
 
   for (s = prog_bfd->sections; s; s = s->next)
-    if (strcmp (bfd_get_section_name (prog_bfd, s), ".text") == 0)
+    if (strcmp (bfd_section_name (s), ".text") == 0)
       {
        STATE_TEXT_SECTION (sd) = s;
-       STATE_TEXT_START (sd) = bfd_get_section_vma (prog_bfd, s);
-       STATE_TEXT_END (sd) = STATE_TEXT_START (sd) + bfd_section_size (prog_bfd, s);
+       STATE_TEXT_START (sd) = bfd_section_vma (s);
+       STATE_TEXT_END (sd) = STATE_TEXT_START (sd) + bfd_section_size (s);
        break;
       }
 
@@ -297,7 +281,7 @@ sim_analyze_program (sd, prog_name, prog_bfd)
 /* Called before sim_elapsed_time_since to get a reference point.  */
 
 SIM_ELAPSED_TIME
-sim_elapsed_time_get ()
+sim_elapsed_time_get (void)
 {
 #ifdef HAVE_GETRUSAGE
   struct rusage mytime;
@@ -314,11 +298,10 @@ sim_elapsed_time_get ()
 }
 
 /* Return the elapsed time in milliseconds since START.
-   The actual time may be cpu usage (prefered) or wall clock.  */
+   The actual time may be cpu usage (preferred) or wall clock.  */
 
 unsigned long
-sim_elapsed_time_since (start)
-     SIM_ELAPSED_TIME start;
+sim_elapsed_time_since (SIM_ELAPSED_TIME start)
 {
 #ifdef HAVE_GETRUSAGE
   return sim_elapsed_time_get () - start;
@@ -341,10 +324,20 @@ sim_do_commandf (SIM_DESC sd,
 {
   va_list ap;
   char *buf;
+  int ret;
+
   va_start (ap, fmt);
-  vasprintf (&buf, fmt, ap);
-  sim_do_command (sd, buf);
+  ret = vasprintf (&buf, fmt, ap);
   va_end (ap);
+
+  if (ret < 0)
+    {
+      sim_io_eprintf (sd, "%s: asprintf failed for `%s'\n",
+                     STATE_MY_NAME (sd), fmt);
+      return;
+    }
+
+  sim_do_command (sd, buf);
   free (buf);
 }
 
@@ -362,8 +355,8 @@ map_to_str (unsigned map)
     case io_map: return "io";
     default:
       {
-       static char str[10];
-       sprintf (str, "(%ld)", (long) map);
+       static char str[16];
+       snprintf (str, sizeof(str), "(%ld)", (long) map);
        return str;
       }
     }
@@ -392,8 +385,8 @@ access_to_str (unsigned access)
     case access_read_write_exec_io: return "read_write_exec_io";
     default:
       {
-       static char str[10];
-       sprintf (str, "(%ld)", (long) access);
+       static char str[16];
+       snprintf (str, sizeof(str), "(%ld)", (long) access);
        return str;
       }
     }
@@ -409,5 +402,3 @@ transfer_to_str (unsigned transfer)
     default: return "(error)";
     }
 }
-
-
This page took 0.027208 seconds and 4 git commands to generate.