Add executable parameter to LiveProcess. This allows the argv[0] value to

stay fixed even if the path to the binary changes, so the simulation results
are independent of that path.

--HG--
extra : convert_revision : d1109cd284466c14eddc97289908a51e771fc5db
This commit is contained in:
Steve Reinhardt 2005-10-01 16:02:47 -04:00
parent 30ad202a31
commit 93e60de656
3 changed files with 8 additions and 2 deletions

View file

@ -6,6 +6,7 @@ class Process(SimObject):
class LiveProcess(Process): class LiveProcess(Process):
type = 'LiveProcess' type = 'LiveProcess'
executable = Param.String('', "executable (overrides cmd[0] if set)")
cmd = VectorParam.String("command line (executable plus arguments)") cmd = VectorParam.String("command line (executable plus arguments)")
env = VectorParam.String('', "environment settings") env = VectorParam.String('', "environment settings")
input = Param.String('cin', "filename for stdin") input = Param.String('cin', "filename for stdin")

View file

@ -342,12 +342,13 @@ LiveProcess::LiveProcess(const string &nm, ObjectFile *objFile,
LiveProcess * LiveProcess *
LiveProcess::create(const string &nm, LiveProcess::create(const string &nm,
int stdin_fd, int stdout_fd, int stderr_fd, int stdin_fd, int stdout_fd, int stderr_fd,
string executable,
vector<string> &argv, vector<string> &envp) vector<string> &argv, vector<string> &envp)
{ {
LiveProcess *process = NULL; LiveProcess *process = NULL;
ObjectFile *objFile = createObjectFile(argv[0]); ObjectFile *objFile = createObjectFile(executable);
if (objFile == NULL) { if (objFile == NULL) {
fatal("Can't load object file %s", argv[0]); fatal("Can't load object file %s", executable);
} }
// check object type & set up syscall emulation pointer // check object type & set up syscall emulation pointer
@ -384,6 +385,7 @@ LiveProcess::create(const string &nm,
BEGIN_DECLARE_SIM_OBJECT_PARAMS(LiveProcess) BEGIN_DECLARE_SIM_OBJECT_PARAMS(LiveProcess)
VectorParam<string> cmd; VectorParam<string> cmd;
Param<string> executable;
Param<string> input; Param<string> input;
Param<string> output; Param<string> output;
VectorParam<string> env; VectorParam<string> env;
@ -394,6 +396,7 @@ END_DECLARE_SIM_OBJECT_PARAMS(LiveProcess)
BEGIN_INIT_SIM_OBJECT_PARAMS(LiveProcess) BEGIN_INIT_SIM_OBJECT_PARAMS(LiveProcess)
INIT_PARAM(cmd, "command line (executable plus arguments)"), 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(input, "filename for stdin (dflt: use sim stdin)"),
INIT_PARAM(output, "filename for stdout/stderr (dflt: use sim stdout)"), INIT_PARAM(output, "filename for stdout/stderr (dflt: use sim stdout)"),
INIT_PARAM(env, "environment settings") INIT_PARAM(env, "environment settings")
@ -425,6 +428,7 @@ CREATE_SIM_OBJECT(LiveProcess)
return LiveProcess::create(getInstanceName(), return LiveProcess::create(getInstanceName(),
stdin_fd, stdout_fd, stderr_fd, stdin_fd, stdout_fd, stderr_fd,
(string)executable == "" ? cmd[0] : executable,
cmd, env); cmd, env);
} }

View file

@ -194,6 +194,7 @@ class LiveProcess : public Process
// open and look at the object file. // open and look at the object file.
static LiveProcess *create(const std::string &nm, static LiveProcess *create(const std::string &nm,
int stdin_fd, int stdout_fd, int stderr_fd, int stdin_fd, int stdout_fd, int stderr_fd,
std::string executable,
std::vector<std::string> &argv, std::vector<std::string> &argv,
std::vector<std::string> &envp); std::vector<std::string> &envp);
}; };