From ba65b2f4c94b5c66b59f9dfa7a4e2fb9f3bfa22d Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Thu, 17 Apr 1997 14:14:49 +0000 Subject: [PATCH] * sim-utils.c (sim_copy_argv, sim_analyze_program): New functions. --- sim/common/ChangeLog | 2 + sim/common/sim-utils.c | 123 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 sim/common/sim-utils.c diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index b16dd690b22..22df2d511d3 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,5 +1,7 @@ Thu Apr 17 02:25:11 1997 Doug Evans + * sim-utils.c (sim_copy_argv, sim_analyze_program): New functions. + * sim-options.c, sim-options.h: New files. * sim-config.h (WITH_DEBUG): Provide default value of zero. * Make-common.in (nrun.o): Add rules for. diff --git a/sim/common/sim-utils.c b/sim/common/sim-utils.c new file mode 100644 index 00000000000..29a059c2efb --- /dev/null +++ b/sim/common/sim-utils.c @@ -0,0 +1,123 @@ +/* Miscellaneous simulator utilities. + Copyright (C) 1997 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. + +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. */ + +#include "sim-main.h" +#include "sim-assert.h" +#ifdef HAVE_STDLIB_H +#include +#endif +#include "libiberty.h" +#include "bfd.h" + +/* Global pointer to all state data. + Set by sim_resume. */ +struct sim_state *current_state; + +/* Allocate zero filled memory with xmalloc. */ + +void * +zalloc (unsigned long size) +{ + void *memory = (void *) xmalloc (size); + memset (memory, 0, size); + return memory; +} + +void +zfree (void *data) +{ + free (data); +} + +/* Allocate a sim_state struct. */ + +SIM_DESC +sim_state_alloc (void) +{ + SIM_DESC sd = zalloc (sizeof (struct sim_state)); + sd->base.magic = SIM_MAGIC_NUMBER; + return sd; +} + +/* Free a sim_state struct. */ + +void +sim_state_free (SIM_DESC sd) +{ + ASSERT (sd->base.magic == SIM_MAGIC_NUMBER); + zfree (sd); +} + +/* Make a copy of ARGV. + This can also be used to copy the environment vector. + The result is a pointer to the malloc'd copy or NULL if insufficient + memory available. */ + +char ** +sim_copy_argv (argv) + char **argv; +{ + int i,argc,len; + char **copy,*p; + + argc = len = 0; + if (argv) + { + for ( ; argv[argc]; ++argc) + len += strlen (argv[argc]) + 1; + } + + copy = (char **) malloc ((argc + 1) * sizeof (char *) + len); + if (copy == NULL) + return NULL; + + p = (char *) copy + (argc + 1) * sizeof (char *); + for (i = 0; i < argc; ++i) + { + copy[i] = p; + strcpy (p, argv[i]); + p += strlen (argv[i]) + 1; + } + copy[argc] = 0; + + return copy; +} + +/* Analyze a bfd and set various fields in the state struct. */ + +void +sim_analyze_program (sd, prog_bfd) + SIM_DESC sd; + bfd *prog_bfd; +{ + asection *s; + + STATE_PROG_BFD (sd) = 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) + { + 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); + break; + } +} -- 2.30.2