No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / dist / gdb6 / sim / ppc / emul_generic.h
bloba86026e9b9d6ec1dd345d9371159ca9120759959
1 /* This file is part of the program psim.
3 Copyright (C) 1994-1996, 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_
25 #include "cpu.h"
26 #include "idecode.h"
27 #include "os_emul.h"
29 #include "tree.h"
31 #include "bfd.h"
33 #ifndef INLINE_EMUL_GENERIC
34 #define INLINE_EMUL_GENERIC
35 #endif
37 /* various PowerPC instructions for writing into memory */
38 enum {
39 emul_call_instruction = 0x1,
40 emul_loop_instruction = 0x48000000, /* branch to . */
41 emul_rfi_instruction = 0x4c000064,
42 emul_blr_instruction = 0x4e800020,
46 /* emulation specific data */
48 typedef struct _os_emul_data os_emul_data;
50 typedef os_emul_data *(os_emul_create_handler)
51 (device *tree,
52 bfd *image,
53 const char *emul_name);
54 typedef void (os_emul_init_handler)
55 (os_emul_data *emul_data,
56 int nr_cpus);
57 typedef void (os_emul_system_call_handler)
58 (cpu *processor,
59 unsigned_word cia,
60 os_emul_data *emul_data);
61 typedef int (os_emul_instruction_call_handler)
62 (cpu *processor,
63 unsigned_word cia,
64 unsigned_word ra,
65 os_emul_data *emul_data);
67 struct _os_emul {
68 const char *name;
69 os_emul_create_handler *create;
70 os_emul_init_handler *init;
71 os_emul_system_call_handler *system_call;
72 os_emul_instruction_call_handler *instruction_call;
73 os_emul_data *data;
77 /* One class of emulation - system call is pretty general, provide a
78 common template for implementing this */
80 typedef struct _emul_syscall emul_syscall;
81 typedef struct _emul_syscall_descriptor emul_syscall_descriptor;
83 typedef void (emul_syscall_handler)
84 (os_emul_data *emul_data,
85 unsigned call,
86 const int arg0,
87 cpu *processor,
88 unsigned_word cia);
90 struct _emul_syscall_descriptor {
91 emul_syscall_handler *handler;
92 const char *name;
95 struct _emul_syscall {
96 emul_syscall_descriptor *syscall_descriptor;
97 int nr_system_calls;
98 char **error_names;
99 int nr_error_names;
100 char **signal_names;
101 int nr_signal_names;
105 INLINE_EMUL_GENERIC void emul_do_system_call
106 (os_emul_data *emul_data,
107 emul_syscall *syscall,
108 unsigned call,
109 const int arg0,
110 cpu *processor,
111 unsigned_word cia);
114 INLINE_EMUL_GENERIC unsigned64 emul_read_gpr64
115 (cpu *processor,
116 int g);
118 INLINE_EMUL_GENERIC void emul_write_gpr64
119 (cpu *processor,
120 int g,
121 unsigned64 val);
123 INLINE_EMUL_GENERIC void emul_write_status
124 (cpu *processor,
125 int status,
126 int errno);
128 INLINE_EMUL_GENERIC void emul_write2_status
129 (cpu *processor,
130 int status1,
131 int status2,
132 int errno);
134 INLINE_EMUL_GENERIC char *emul_read_string
135 (char *dest,
136 unsigned_word addr,
137 unsigned nr_bytes,
138 cpu *processor,
139 unsigned_word cia);
141 INLINE_EMUL_GENERIC unsigned_word emul_read_word
142 (unsigned_word addr,
143 cpu *processor,
144 unsigned_word cia);
146 INLINE_EMUL_GENERIC void emul_write_word
147 (unsigned_word addr,
148 unsigned_word buf,
149 cpu *processor,
150 unsigned_word cia);
152 INLINE_EMUL_GENERIC void emul_read_buffer
153 (void *dest,
154 unsigned_word addr,
155 unsigned nr_bytes,
156 cpu *processor,
157 unsigned_word cia);
159 INLINE_EMUL_GENERIC void emul_write_buffer
160 (const void *source,
161 unsigned_word addr,
162 unsigned nr_bytes,
163 cpu *processor,
164 unsigned_word cia);
166 /* Simplify the construction of device trees */
168 INLINE_EMUL_GENERIC void emul_add_tree_options
169 (device *tree,
170 bfd *image,
171 const char *emul,
172 const char *env,
173 int oea_interrupt_prefix);
175 INLINE_EMUL_GENERIC void emul_add_tree_hardware
176 (device *tree);
178 #endif /* _EMUL_GENERIC_H_ */