Add ABFD argument to sim_open call. Pass through to sim_config so
[deliverable/binutils-gdb.git] / include / remote-sim.h
index 369f4fa94ab2193f5b047094f21b6d274f73e21d..f77a9fc2e5ca20307219b4602371ffca77febd2b 100644 (file)
@@ -64,45 +64,114 @@ struct _bfd;
 /* Main simulator entry points.  */
 
 
-/* Create a simulator instance.
+/* Create a fully initialized simulator instance.
+
    (This function is called when the simulator is selected from the
    gdb command line.)
+
    KIND specifies how the simulator will be used.  Currently there are only
-   two kinds: standalone and debug.
+   two kinds: stand-alone and debug.
+
    CALLBACK specifies a standard host callback (defined in callback.h).
-   ARGV is passed from the command line and can be used to select whatever
-   run time options the simulator provides.  It is the standard NULL
-   terminated array of pointers, with argv[0] being the program name.
-   The result is a descriptor that shall be passed to the other
-   sim_foo functions.  */
 
-SIM_DESC sim_open PARAMS ((SIM_OPEN_KIND kind, struct host_callback_struct *callback, char **argv));
+   ABFD, when non NULL, designates a target program.  The program is
+   not loaded.
+
+   ARGV is a standard ARGV pointer such as that passed from the
+   command line.  The syntax of the argument list is is assumed to be
+   ``SIM-PROG { SIM-OPTION } [ TARGET-PROGRAM { TARGET-OPTION } ]''.
+
+   On success, the result is a non NULL descriptor that shall be
+   passed to the other sim_foo functions.  While the simulator
+   configuration can be parameterized by (in decreasing precedence)
+   ARGV's SIM-OPTION, ARGV's TARGET-PROGRAM and the ABFD argument, the
+   successful creation of the simulator shall not dependent on the
+   presence of any of these arguments/options.
+
+   For a simulator modeling real hardware, the created simulator shall
+   be sufficiently initialized to handle, with out restrictions any
+   client requests (including memory reads/writes, register
+   fetch/stores and a resume).
+
+   For a simulator modeling a process, that process is not created
+   until a call to sim_create_inferior.  FIXME: What should the state
+   of the simulator be? */
+
+SIM_DESC sim_open PARAMS ((SIM_OPEN_KIND kind, struct host_callback_struct *callback, struct _bfd *abfd, char **argv));
 
 
 /* Destory a simulator instance.
+
+   QUITTING is non-zero if we cannot hang on errors.
+
    This may involve freeing target memory and closing any open files
    and mmap'd areas.  You cannot assume sim_kill has already been
-   called.
-   QUITTING is non-zero if we cannot hang on errors.  */
+   called. */
 
 void sim_close PARAMS ((SIM_DESC sd, int quitting));
 
 
-/* Load program PROG into the simulator.
+/* Load program PROG into the simulators memory.
+
    If ABFD is non-NULL, the bfd for the file has already been opened.
-   The result is a return code indicating success.  */
+   The result is a return code indicating success.
+
+   For a simulator modeling real hardware, the client is permitted to
+   make multiple calls to this function.  Such calls have an
+   accumulative effect.
+
+   For a simulator modeling a process, calls to this function may be
+   ignored.  */
 
 SIM_RC sim_load PARAMS ((SIM_DESC sd, char *prog, struct _bfd *abfd, int from_tty));
 
 
 /* Prepare to run the simulated program.
-   ARGV and ENV are NULL terminated lists of pointers.  */
+
+   ARGV and ENV are NULL terminated lists of pointers.
+
+   For a simulator modeling real hardware, this function shall
+   initialize the processor registers to a known value.  The program
+   counter shall be set to the start address obtained from the last
+   program loaded (or the hardware reset default).  The ARGV and ENV
+   arguments can be ignored.
+
+   For a simulator modeling a process, after a call to this function a
+   new process instance shall exist - the TEXT, DATA, BSS and stack
+   regions shall all be initialized, ARGV and ENV shall be written to
+   process address space (according to the applicable ABI), and the
+   program counter and stack pointer set accordingly. (NB: A simulator
+   may in fact initialize the TEXT, DATA and BSS sections during an
+   earlier stage).
+
+   --
+
+   FIXME: Is the below a better definition - assuming that ABFD arg is
+   added.
+
+   Prepare to run the simulated program.
+
+   ABFD, if not NULL, can be used to obtain initial processor state
+   information (eg PC value).
+   ARGV and ENV, if non NULL,  are NULL terminated lists of pointers.
+
+   For a simulator modeling real hardware, this function shall
+   initialize the processor registers to a known value.  The program
+   counter shall be set to the start address obtained from the ABFD
+   struct (or the hardware reset default).  The ARGV and ENV arguments
+   can be ignored.
+
+   For a simulator modeling a process, after a call to this function a
+   new process instance shall exist - the TEXT, DATA, BSS and stack
+   regions shall all be initialized, ARGV and ENV shall be written to
+   process address space (according to the applicable ABI), and the
+   program counter and stack pointer set accordingly. */
 
 SIM_RC sim_create_inferior PARAMS ((SIM_DESC sd, char **argv, char **env));
 
 
-/* Read LENGTH bytes of the simulated program's memory and store in BUF.
-   Result is number of bytes read, or zero if error.  */
+/* Read LENGTH bytes of the simulated program's memory and store in
+   BUF.  Result is number of bytes read, or zero if error.  */
 
 int sim_read PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length));
 
@@ -113,7 +182,8 @@ int sim_read PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)
 int sim_write PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length));
 
 
-/* Fetch register REGNO and store the raw (target endian) value in BUF.  */
+/* Fetch register REGNO and store the raw (target endian) value in
+   BUF.  */
 
 void sim_fetch_register PARAMS ((SIM_DESC sd, int regno, unsigned char *buf));
 
@@ -124,6 +194,7 @@ void sim_store_register PARAMS ((SIM_DESC sd, int regno, unsigned char *buf));
 
 
 /* Print whatever statistics the simulator has collected.
+
    VERBOSE is currently unused and must always be zero.  */
 
 void sim_info PARAMS ((SIM_DESC sd, int verbose));
@@ -142,14 +213,18 @@ int sim_stop PARAMS ((SIM_DESC sd));
 
 
 /* Fetch the REASON why the program stopped.
+
    SIM_EXITED: The program has terminated. SIGRC indicates the target
    dependant exit status.
+
    SIM_STOPPED: The program has stopped.  SIGRC indicates the reason:
    program interrupted by user via a sim_stop request (SIGINT); a
    breakpoint instruction (SIGTRAP); a completed step (SIGTRAP); an
    internal error condition (SIGABRT).
+
    SIM_SIGNALLED: The simulator encountered target code that requires
    the signal SIGRC to be delivered to the simulated program.
+
    SIM_RUNNING, SIM_POLLING: The return of one of these values
    indicates a problem internal to the simulator. */
 
@@ -163,10 +238,10 @@ void sim_stop_reason PARAMS ((SIM_DESC sd, enum sim_stop *reason, int *sigrc));
    or empty CMD. */
 
 void sim_do_command PARAMS ((SIM_DESC sd, char *cmd));
-
+\f
 
 /* Provide simulator with a default (global) host_callback_struct.
-   THIS PROCEDURE IS IS DEPRECIATED.
+   THIS PROCEDURE IS DEPRECIATED.
    GDB and NRUN do not use this interface.
    This procedure does not take a SIM_DESC argument as it is
    used before sim_open. */
@@ -175,7 +250,7 @@ void sim_set_callbacks PARAMS ((struct host_callback_struct *));
 
 
 /* Set the size of the simulator memory array.
-   THIS PROCEDURE IS IS DEPRECIATED.
+   THIS PROCEDURE IS DEPRECIATED.
    GDB and NRUN do not use this interface.
    This procedure does not take a SIM_DESC argument as it is
    used before sim_open. */
@@ -184,7 +259,7 @@ void sim_size PARAMS ((int i));
 
 
 /* Run a simulation with tracing enabled.
-   THIS PROCEDURE IS IS DEPRECIATED.
+   THIS PROCEDURE IS DEPRECIATED.
    GDB and NRUN do not use this interface.
    This procedure does not take a SIM_DESC argument as it is
    used before sim_open. */
@@ -193,7 +268,7 @@ int sim_trace PARAMS ((SIM_DESC sd));
 
 
 /* Configure the size of the profile buffer.
-   THIS PROCEDURE IS IS DEPRECIATED.
+   THIS PROCEDURE IS DEPRECIATED.
    GDB and NRUN do not use this interface.
    This procedure does not take a SIM_DESC argument as it is
    used before sim_open. */
@@ -202,12 +277,11 @@ void sim_set_profile_size PARAMS ((int n));
 
 
 /* Kill the running program.
-   THIS PROCEDURE IS IS DEPRECIATED.
+   THIS PROCEDURE IS DEPRECIATED.
    GDB and NRUN do not use this interface.
    This procedure will be replaced as part of the introduction of
    multi-cpu simulators. */
 
 void sim_kill PARAMS ((SIM_DESC sd));
 
-
 #endif /* !defined (REMOTE_SIM_H) */
This page took 0.026519 seconds and 4 git commands to generate.