OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [sim/] [ppc/] [emul_chirp.h] - Diff between revs 24 and 157

Only display areas with differences | Details | Blame | View Log

Rev 24 Rev 157
/*  This file is part of the program psim.
/*  This file is part of the program psim.
 
 
    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
 
 
    This program is free software; you can redistribute it and/or modify
    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
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    (at your option) any later version.
 
 
    This program is distributed in the hope that it will be useful,
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    GNU General Public License for more details.
 
 
    You should have received a copy of the GNU General Public License
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
    */
    */
 
 
 
 
#ifndef _EMUL_CHIRP_H_
#ifndef _EMUL_CHIRP_H_
#define _EMUL_CHIRP_H_
#define _EMUL_CHIRP_H_
 
 
/* EMUL_CHIRP:
/* EMUL_CHIRP:
 
 
   The emulation of the OpenBoot client interface (as defined in 1275)
   The emulation of the OpenBoot client interface (as defined in 1275)
   illustrates how it is possible for PSIM to implement an interface
   illustrates how it is possible for PSIM to implement an interface
   that is both running in virtual memory and is called using a
   that is both running in virtual memory and is called using a
   standard function call interface.
   standard function call interface.
 
 
   The OpenBoot client interface is implemented by using two
   The OpenBoot client interface is implemented by using two
   instructions:
   instructions:
 
 
        client_interface:
        client_interface:
                <emul_call>
                <emul_call>
                blr
                blr
 
 
   A client program makes a function call to `client_interface' using
   A client program makes a function call to `client_interface' using
   the `bl' instruction.  The simulator will then execute the
   the `bl' instruction.  The simulator will then execute the
   <emul_call> instruction (which calls emul_chirp) and then the `blr'
   <emul_call> instruction (which calls emul_chirp) and then the `blr'
   which will return to the caller.
   which will return to the caller.
 
 
   In addition to providing the `client_interface' entry point, while
   In addition to providing the `client_interface' entry point, while
   a client request is being handled, emul_chirp patches (well it will
   a client request is being handled, emul_chirp patches (well it will
   one day) the data access exception vector with a <emul_call>
   one day) the data access exception vector with a <emul_call>
   instruction.  By doing this, emul_chirp is able to catch and handle
   instruction.  By doing this, emul_chirp is able to catch and handle
   any invalid data accesses it makes while emulating a client call.
   any invalid data accesses it makes while emulating a client call.
 
 
   When such an exception occures, emul_chirp is able to recover by
   When such an exception occures, emul_chirp is able to recover by
   restoring the processor and then calling the clients callback
   restoring the processor and then calling the clients callback
   interface so that the client can recover from the data exception.
   interface so that the client can recover from the data exception.
 
 
   Handling this are the emul_chirp states:
   Handling this are the emul_chirp states:
 
 
                              serving---.
                              serving---.
                             /          |
                             /          |
   Emulation compleated     ^           v Client makes call to
   Emulation compleated     ^           v Client makes call to
     - restore int vectors  |           | emulated interface
     - restore int vectors  |           | emulated interface
                            ^           v   - patch exception vectors
                            ^           v   - patch exception vectors
                            |          /
                            |          /
                            `-emulating-. emulating the request
                            `-emulating-. emulating the request
                             /          |
                             /          |
                            |           v Emulation encounters
                            |           v Emulation encounters
   Client callback recovers ^           | data access exception
   Client callback recovers ^           | data access exception
   from data exception and  |           v   - re-enable vm
   from data exception and  |           v   - re-enable vm
   returns.                 ^           |   - call client callback
   returns.                 ^           |   - call client callback
     - restart request      |          /
     - restart request      |          /
                            `--faulting
                            `--faulting
   */
   */
 
 
 
 
extern const os_emul emul_chirp;
extern const os_emul emul_chirp;
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.