diff options
Diffstat (limited to 'contrib/gdb/gdb/gdbserver/low-sim.c')
-rw-r--r-- | contrib/gdb/gdb/gdbserver/low-sim.c | 126 |
1 files changed, 53 insertions, 73 deletions
diff --git a/contrib/gdb/gdb/gdbserver/low-sim.c b/contrib/gdb/gdb/gdbserver/low-sim.c index 8ad6e91..86a0406 100644 --- a/contrib/gdb/gdb/gdbserver/low-sim.c +++ b/contrib/gdb/gdb/gdbserver/low-sim.c @@ -1,35 +1,37 @@ /* Low level interface to simulators, for the remote server for GDB. - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. -This file is part of GDB. + This file is part of GDB. -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 of the License, or -(at your option) any later version. + 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 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. + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#include "defs.h" -#include "bfd.h" #include "server.h" -#include "callback.h" /* GDB simulator callback interface */ -#include "remote-sim.h" /* GDB simulator interface */ +#include "bfd.h" +#include "callback.h" /* GDB simulator callback interface */ +#include "remote-sim.h" /* GDB simulator interface */ extern int remote_debug; extern host_callback default_callback; /* in sim/common/callback.c */ -char registers[REGISTER_BYTES] __attribute__ ((aligned)); +static char my_registers[REGISTER_BYTES] __attribute__ ((aligned)); +char * registers = my_registers; -int target_byte_order; /* used by simulator */ +int target_byte_order; /* used by simulator */ /* We record the result of sim_open so we can pass it back to the other sim_foo routines. */ @@ -39,14 +41,13 @@ static SIM_DESC gdbsim_desc = 0; does not support loading itself. */ static void -generic_load (loadfile_bfd) - bfd *loadfile_bfd; +mygeneric_load (bfd *loadfile_bfd) { asection *s; - for (s = loadfile_bfd->sections; s; s = s->next) + for (s = loadfile_bfd->sections; s; s = s->next) { - if (s->flags & SEC_LOAD) + if (s->flags & SEC_LOAD) { bfd_size_type size; @@ -60,11 +61,11 @@ generic_load (loadfile_bfd) lma = s->lma; /* Is this really necessary? I guess it gives the user something - to look at during a long download. */ + to look at during a long download. */ printf ("Loading section %s, size 0x%lx lma 0x%lx\n", bfd_get_section_name (loadfile_bfd, s), (unsigned long) size, - (unsigned long) lma); /* chops high 32 bits. FIXME!! */ + (unsigned long) lma); /* chops high 32 bits. FIXME!! */ bfd_get_section_contents (loadfile_bfd, s, buffer, 0, size); @@ -75,29 +76,25 @@ generic_load (loadfile_bfd) } printf ("Start address 0x%lx\n", - (unsigned long)loadfile_bfd->start_address); + (unsigned long) loadfile_bfd->start_address); /* We were doing this in remote-mips.c, I suspect it is right for other targets too. */ - /* write_pc (loadfile_bfd->start_address); */ /* FIXME!! */ + /* write_pc (loadfile_bfd->start_address); *//* FIXME!! */ } int -create_inferior (program, argv) - char *program; - char **argv; +create_inferior (char *program, char **argv) { bfd *abfd; int pid = 0; -#ifdef TARGET_BYTE_ORDER_SELECTABLE char **new_argv; int nargs; -#endif abfd = bfd_openr (program, 0); - if (!abfd) + if (!abfd) { - fprintf (stderr, "gdbserver: can't open %s: %s\n", + fprintf (stderr, "gdbserver: can't open %s: %s\n", program, bfd_errmsg (bfd_get_error ())); exit (1); } @@ -109,7 +106,6 @@ create_inferior (program, argv) exit (1); } -#ifdef TARGET_BYTE_ORDER_SELECTABLE /* Add "-E big" or "-E little" to the argument list depending on the endianness of the program to be loaded. */ for (nargs = 0; argv[nargs] != NULL; nargs++) /* count the args */ @@ -121,7 +117,6 @@ create_inferior (program, argv) new_argv[nargs + 1] = bfd_big_endian (abfd) ? "big" : "little"; new_argv[nargs + 2] = NULL; argv = new_argv; -#endif /* Create an instance of the simulator. */ default_callback.init (&default_callback); @@ -132,7 +127,7 @@ create_inferior (program, argv) /* Load the program into the simulator. */ if (abfd) if (sim_load (gdbsim_desc, program, NULL, 0) == SIM_RC_FAIL) - generic_load (abfd); + mygeneric_load (abfd); /* Create an inferior process in the simulator. This initializes SP. */ sim_create_inferior (gdbsim_desc, abfd, argv, /* env */ NULL); @@ -140,10 +135,17 @@ create_inferior (program, argv) return pid; } +/* Attaching is not supported. */ +int +myattach (int pid) +{ + return -1; +} + /* Kill the inferior process. Make us have no inferior. */ void -kill_inferior () +kill_inferior (void) { sim_close (gdbsim_desc, 0); default_callback.shutdown (&default_callback); @@ -152,8 +154,7 @@ kill_inferior () /* Fetch one register. */ static void -fetch_register (regno) - int regno; +fetch_register (int regno) { sim_fetch_register (gdbsim_desc, regno, ®isters[REGISTER_BYTE (regno)], REGISTER_RAW_SIZE (regno)); @@ -162,11 +163,10 @@ fetch_register (regno) /* Fetch all registers, or just one, from the child process. */ void -fetch_inferior_registers (regno) - int regno; +fetch_inferior_registers (int regno) { if (regno == -1 || regno == 0) - for (regno = 0; regno < NUM_REGS/*-NUM_FREGS*/; regno++) + for (regno = 0; regno < NUM_REGS /*-NUM_FREGS*/ ; regno++) fetch_register (regno); else fetch_register (regno); @@ -177,10 +177,9 @@ fetch_inferior_registers (regno) Otherwise, REGNO specifies which register (so we can save time). */ void -store_inferior_registers (regno) - int regno; +store_inferior_registers (int regno) { - if (regno == -1) + if (regno == -1) { for (regno = 0; regno < NUM_REGS; regno++) store_inferior_registers (regno); @@ -192,8 +191,7 @@ store_inferior_registers (regno) /* Return nonzero if the given thread is still alive. */ int -mythread_alive (pid) - int pid; +mythread_alive (int pid) { return 1; } @@ -201,8 +199,7 @@ mythread_alive (pid) /* Wait for process, returns status */ unsigned char -mywait (status) - char *status; +mywait (char *status) { int sigrc; enum sim_stop reason; @@ -224,7 +221,7 @@ mywait (status) return sigrc; #endif - default: /* should this be sim_signalled or sim_stopped? FIXME!! */ + default: /* should this be sim_signalled or sim_stopped? FIXME!! */ if (remote_debug) printf ("\nChild received signal = %x \n", sigrc); fetch_inferior_registers (0); @@ -238,9 +235,7 @@ mywait (status) If SIGNAL is nonzero, give it that signal. */ void -myresume (step, signo) - int step; - int signo; +myresume (int step, int signo) { /* Should be using target_signal_to_host() or signal numbers in target.h to convert GDB signal number to target signal number. */ @@ -251,10 +246,7 @@ myresume (step, signo) to debugger memory starting at MYADDR. */ void -read_inferior_memory (memaddr, myaddr, len) - CORE_ADDR memaddr; - char *myaddr; - int len; +read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len) { sim_read (gdbsim_desc, memaddr, myaddr, len); } @@ -265,25 +257,13 @@ read_inferior_memory (memaddr, myaddr, len) returns the value of errno. */ int -write_inferior_memory (memaddr, myaddr, len) - CORE_ADDR memaddr; - char *myaddr; - int len; +write_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len) { - sim_write (gdbsim_desc, memaddr, myaddr, len); /* should check for error. FIXME!! */ + sim_write (gdbsim_desc, memaddr, myaddr, len); /* should check for error. FIXME!! */ return 0; } -#if 0 void -initialize () +initialize_low (void) { - inferior_pid = 0; } - -int -have_inferior_p () -{ - return inferior_pid != 0; -} -#endif |