forked from openrisc/or1ksim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
toplevel.c
95 lines (70 loc) · 2.85 KB
/
toplevel.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* toplevel.c -- Top level simulator source file
Copyright (C) 1999 Damjan Lampret, [email protected]
Copyright (C) 2008 Embecosm Limited
Contributor Jeremy Bennett <[email protected]>
This file is part of Or1ksim, the OpenRISC 1000 Architectural Simulator.
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 the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>. */
/* This program is commented throughout in a fashion suitable for processing
with Doxygen. */
/* Autoconf and/or portability configuration */
#include "config.h"
/* System includes */
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
/* Package includes */
#include "sim-config.h"
#include "toplevel-support.h"
#include "execute.h"
/*---------------------------------------------------------------------------*/
/*!Main function
Set up the standalone simulation. Initialize the default configuration and
register all the sections that may appear in a user configuration.
Then attempt to parse the args, configure the system from any configuration
file specified and print out the configuration used.
Add a signal hander, so ctrl-C will drop the user into the CLI.
The initialize the simulator, call the appropriate main simulator function
and when it returns tidy up.
@param[in] argc The number of arguments to the command
@param[in] argv The vector of argument strings
@return The return code required from the simulator. This is actually
achieved by calling exit() with the return code, rather than
returning an explict value. */
/*---------------------------------------------------------------------------*/
int
main (int argc,
char *argv[])
{
init_randomness ();
init_defconfig ();
reg_config_secs ();
if (parse_args (argc, argv))
{
exit (-1); /* Parse args will have printed any messages */
}
print_config ();
signal (SIGINT, ctrl_c);
signal (SIGUSR1, toggle_trace);
do_stats = config.cpu.superscalar ||
config.cpu.dependstats ||
config.sim.history ||
config.sim.exe_log ||
config.sim.exe_bin_insn_log;
sim_init ();
#if DYNAMIC_EXECUTION
dyn_main ();
#else
exec_main ();
#endif
sim_done ();
exit (0);
}