X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fsim-utils.c;h=7f385a5463d7db9e4058b6e914d750f7b0de82fd;hb=64517994807b0d6bb3c6fd106f117c03242fac72;hp=3adbae5bbd4b023eea6c12e4e1f568218ed7fa42;hpb=c906108c21474dfb4ed285bcc0ac6fe02cd400cc;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/sim-utils.c b/sim/common/sim-utils.c index 3adbae5bbd..7f385a5463 100644 --- a/sim/common/sim-utils.c +++ b/sim/common/sim-utils.c @@ -1,22 +1,21 @@ /* Miscellaneous simulator utilities. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997-2017 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 . */ #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), @@ -287,6 +271,8 @@ sim_analyze_program (sd, prog_name, prog_bfd) break; } + bfd_cache_close (prog_bfd); + return SIM_RC_OK; } @@ -295,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; @@ -312,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; @@ -339,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); } @@ -407,5 +402,3 @@ transfer_to_str (unsigned transfer) default: return "(error)"; } } - -