35d34
< #include "arch/mips/linux/process.hh"
39d37
< #include "sim/builder.hh"
45,77d42
<
< MipsLiveProcess *
< MipsLiveProcess::create(const std::string &nm, System *system, int stdin_fd,
< int stdout_fd, int stderr_fd, std::string executable,
< std::vector<std::string> &argv, std::vector<std::string> &envp)
< {
< MipsLiveProcess *process = NULL;
<
< ObjectFile *objFile = createObjectFile(executable);
< if (objFile == NULL) {
< fatal("Can't load object file %s", executable);
< }
<
<
< if (objFile->getArch() != ObjectFile::Mips)
< fatal("Object file does not match MIPS architecture.");
<
< switch (objFile->getOpSys()) {
< case ObjectFile::Linux:
< process = new MipsLinuxProcess(nm, objFile, system,
< stdin_fd, stdout_fd, stderr_fd,
< argv, envp);
< break;
<
< default:
< fatal("Unknown/unsupported operating system.");
< }
<
< if (process == NULL)
< fatal("Unknown error creating process object.");
< return process;
< }
<
104,163d68
<
<
<
<
< BEGIN_DECLARE_SIM_OBJECT_PARAMS(MipsLiveProcess)
<
< VectorParam<string> cmd;
< Param<string> executable;
< Param<string> input;
< Param<string> output;
< VectorParam<string> env;
< SimObjectParam<System *> system;
<
< END_DECLARE_SIM_OBJECT_PARAMS(MipsLiveProcess)
<
<
< BEGIN_INIT_SIM_OBJECT_PARAMS(MipsLiveProcess)
<
< INIT_PARAM(cmd, "command line (executable plus arguments)"),
< INIT_PARAM(executable, "executable (overrides cmd[0] if set)"),
< INIT_PARAM(input, "filename for stdin (dflt: use sim stdin)"),
< INIT_PARAM(output, "filename for stdout/stderr (dflt: use sim stdout)"),
< INIT_PARAM(env, "environment settings"),
< INIT_PARAM(system, "system")
<
< END_INIT_SIM_OBJECT_PARAMS(MipsLiveProcess)
<
<
< CREATE_SIM_OBJECT(MipsLiveProcess)
< {
< string in = input;
< string out = output;
<
< // initialize file descriptors to default: same as simulator
< int stdin_fd, stdout_fd, stderr_fd;
<
< if (in == "stdin" || in == "cin")
< stdin_fd = STDIN_FILENO;
< else
< stdin_fd = Process::openInputFile(input);
<
< if (out == "stdout" || out == "cout")
< stdout_fd = STDOUT_FILENO;
< else if (out == "stderr" || out == "cerr")
< stdout_fd = STDERR_FILENO;
< else
< stdout_fd = Process::openOutputFile(out);
<
< stderr_fd = (stdout_fd != STDOUT_FILENO) ? stdout_fd : STDERR_FILENO;
<
< return MipsLiveProcess::create(getInstanceName(), system,
< stdin_fd, stdout_fd, stderr_fd,
< (string)executable == "" ? cmd[0] : executable,
< cmd, env);
< }
<
<
< REGISTER_SIM_OBJECT("MipsLiveProcess", MipsLiveProcess)
<
<