]>
git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/m68hc11/emulos.c
1 /* emulos.c -- Small OS emulation
2 Copyright 1999-2021 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/>. */
28 #include <sys/types.h>
31 /* This file emulates some OS system calls.
32 It's basically used to give access to the host OS facilities
33 like: stdin, stdout, files, time of day. */
34 static int bench_mode
= -1;
35 static struct timeval bench_start
;
36 static struct timeval bench_stop
;
39 emul_bench (sim_cpu
*cpu
)
48 gettimeofday (&bench_start
, 0);
52 gettimeofday (&bench_stop
, 0);
54 printf ("bench start not called...\n");
61 int addr
= cpu_get_x (cpu
);
62 double t_start
, t_stop
, t
;
66 t_start
= (double) (bench_start
.tv_sec
) * 1.0e6
;
67 t_start
+= (double) (bench_start
.tv_usec
);
68 t_stop
= (double) (bench_stop
.tv_sec
) * 1.0e6
;
69 t_stop
+= (double) (bench_stop
.tv_usec
);
73 buf
[sz
] = memory_read8 (cpu
, addr
);
83 printf ("bench_stop not called");
87 printf ("%-40.40s [%6d] %3.3f us\n", buf
,
88 op
, t
/ (double) (op
));
96 emul_write (sim_cpu
*cpu
)
98 int addr
= cpu_get_x (cpu
) & 0x0FFFF;
99 int size
= cpu_get_d (cpu
) & 0x0FFFF;
101 if (addr
+ size
> 0x0FFFF) {
102 size
= 0x0FFFF - addr
;
104 cpu
->cpu_running
= 0;
107 uint8 val
= memory_read8 (cpu
, addr
);
109 if (write (0, &val
, 1) != 1)
110 printf ("write failed: %s\n", strerror (errno
));
116 /* emul_exit () is used by the default startup code of GCC to implement
117 the exit (). For a real target, this will create an ILLEGAL fault.
118 But doing an exit () on a real target is really a non-sense.
119 exit () is important for the validation of GCC. The exit status
120 is passed in 'D' register. */
122 emul_exit (sim_cpu
*cpu
)
124 sim_engine_halt (CPU_STATE (cpu
), cpu
,
125 NULL
, NULL_CIA
, sim_exited
,
130 emul_os (int code
, sim_cpu
*cpu
)
132 cpu
->cpu_current_cycle
= 8;