1 /* This file is part of the program psim.
3 Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 #ifndef _EMUL_GENERIC_H_
23 #define _EMUL_GENERIC_H_
31 #ifndef INLINE_EMUL_GENERIC
32 #define INLINE_EMUL_GENERIC
35 /* various PowerPC instructions for writing into memory */
37 emul_call_instruction
= 0x1,
38 emul_loop_instruction
= 0x48000000, /* branch to . */
39 emul_rfi_instruction
= 0x4c000064,
40 emul_blr_instruction
= 0x4e800020,
44 /* emulation specific data */
46 typedef struct _os_emul_data os_emul_data
;
48 typedef os_emul_data
*(os_emul_create_handler
)
51 const char *emul_name
);
52 typedef void (os_emul_init_handler
)
53 (os_emul_data
*emul_data
,
55 typedef void (os_emul_system_call_handler
)
58 os_emul_data
*emul_data
);
59 typedef int (os_emul_instruction_call_handler
)
63 os_emul_data
*emul_data
);
67 os_emul_create_handler
*create
;
68 os_emul_init_handler
*init
;
69 os_emul_system_call_handler
*system_call
;
70 os_emul_instruction_call_handler
*instruction_call
;
75 /* One class of emulation - system call is pretty general, provide a
76 common template for implementing this */
78 typedef struct _emul_syscall emul_syscall
;
79 typedef struct _emul_syscall_descriptor emul_syscall_descriptor
;
81 typedef void (emul_syscall_handler
)
82 (os_emul_data
*emul_data
,
88 struct _emul_syscall_descriptor
{
89 emul_syscall_handler
*handler
;
93 struct _emul_syscall
{
94 emul_syscall_descriptor
*syscall_descriptor
;
103 INLINE_EMUL_GENERIC
void emul_do_system_call
104 (os_emul_data
*emul_data
,
105 emul_syscall
*syscall
,
112 INLINE_EMUL_GENERIC unsigned64 emul_read_gpr64
116 INLINE_EMUL_GENERIC
void emul_write_gpr64
121 INLINE_EMUL_GENERIC
void emul_write_status
126 INLINE_EMUL_GENERIC
char *emul_read_string
133 INLINE_EMUL_GENERIC unsigned_word emul_read_word
138 INLINE_EMUL_GENERIC
void emul_write_word
144 INLINE_EMUL_GENERIC
void emul_read_buffer
151 INLINE_EMUL_GENERIC
void emul_write_buffer
158 #endif /* _EMUL_GENERIC_H_ */