1 /* emulos.c -- Small OS emulation
2 Copyright 1999-2000, 2007-2012 Free Software Foundation, Inc.
3 Written by Stephane Carrez (stcarrez@worldnet.fr)
5 This file is part of GDB, GAS, and the GNU binutils.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include <sys/types.h>
29 /* This file emulates some OS system calls.
30 It's basically used to give access to the host OS facilities
31 like: stdin, stdout, files, time of day. */
32 static int bench_mode = -1;
33 static struct timeval bench_start;
34 static struct timeval bench_stop;
37 emul_bench (struct _sim_cpu* cpu)
46 gettimeofday (&bench_start, 0);
50 gettimeofday (&bench_stop, 0);
52 printf ("bench start not called...\n");
59 int addr = cpu_get_x (cpu);
60 double t_start, t_stop, t;
64 t_start = (double) (bench_start.tv_sec) * 1.0e6;
65 t_start += (double) (bench_start.tv_usec);
66 t_stop = (double) (bench_stop.tv_sec) * 1.0e6;
67 t_stop += (double) (bench_stop.tv_usec);
71 buf[sz] = memory_read8 (cpu, addr);
81 printf ("bench_stop not called");
85 printf ("%-40.40s [%6d] %3.3f us\n", buf,
86 op, t / (double) (op));
94 emul_write(struct _sim_cpu* state)
96 int addr = cpu_get_x (state) & 0x0FFFF;
97 int size = cpu_get_d (state) & 0x0FFFF;
99 if (addr + size > 0x0FFFF) {
100 size = 0x0FFFF - addr;
102 state->cpu_running = 0;
105 uint8 val = memory_read8 (state, addr);
113 /* emul_exit () is used by the default startup code of GCC to implement
114 the exit (). For a real target, this will create an ILLEGAL fault.
115 But doing an exit () on a real target is really a non-sense.
116 exit () is important for the validation of GCC. The exit status
117 is passed in 'D' register. */
119 emul_exit (sim_cpu *cpu)
121 sim_engine_halt (CPU_STATE (cpu), cpu,
122 NULL, NULL_CIA, sim_exited,
127 emul_os (int code, sim_cpu *proc)
129 proc->cpu_current_cycle = 8;