summaryrefslogtreecommitdiff
path: root/src/sim/process.cc
diff options
context:
space:
mode:
authorBrandon Potter <brandon.potter@amd.com>2016-11-09 14:27:40 -0600
committerBrandon Potter <brandon.potter@amd.com>2016-11-09 14:27:40 -0600
commit3886c4a8f2e1bfe17cbf7a5a76ba0fc978c6bb48 (patch)
tree5a1ce6cbf42009fc9199c7ecfb068890ca74dbd4 /src/sim/process.cc
parent7b6cf951e2f0fa70d6599f1e1d03f664b674a75e (diff)
downloadgem5-3886c4a8f2e1bfe17cbf7a5a76ba0fc978c6bb48.tar.xz
syscall_emul: [patch 5/22] remove LiveProcess class and use Process instead
The EIOProcess class was removed recently and it was the only other class which derived from Process. Since every Process invocation is also a LiveProcess invocation, it makes sense to simplify the organization by combining the fields from LiveProcess into Process.
Diffstat (limited to 'src/sim/process.cc')
-rw-r--r--src/sim/process.cc156
1 files changed, 69 insertions, 87 deletions
diff --git a/src/sim/process.cc b/src/sim/process.cc
index 961da1ecd..ceec47ce4 100644
--- a/src/sim/process.cc
+++ b/src/sim/process.cc
@@ -61,7 +61,6 @@
#include "cpu/thread_context.hh"
#include "mem/page_table.hh"
#include "mem/se_translating_port_proxy.hh"
-#include "params/LiveProcess.hh"
#include "params/Process.hh"
#include "sim/emul_driver.hh"
#include "sim/syscall_desc.hh"
@@ -126,7 +125,7 @@ openOutputFile(const string &filename)
return openFile(filename, O_WRONLY | O_CREAT | O_TRUNC, 0664);
}
-Process::Process(ProcessParams * params)
+Process::Process(ProcessParams * params, ObjectFile * obj_file)
: SimObject(params), system(params->system),
brk_point(0), stack_base(0), stack_size(0), stack_min(0),
max_stack_size(params->max_stack_size),
@@ -148,9 +147,13 @@ Process::Process(ProcessParams * params)
{"stdout", STDOUT_FILENO},
{"cerr", STDERR_FILENO},
{"stderr", STDERR_FILENO}},
+ objFile(obj_file),
+ argv(params->cmd), envp(params->env), cwd(params->cwd),
+ executable(params->executable),
_uid(params->uid), _euid(params->euid),
_gid(params->gid), _egid(params->egid),
- _pid(params->pid), _ppid(params->ppid)
+ _pid(params->pid), _ppid(params->ppid),
+ drivers(params->drivers)
{
int sim_fd;
std::map<string,int>::iterator it;
@@ -188,6 +191,19 @@ Process::Process(ProcessParams * params)
mmap_end = 0;
nxm_start = nxm_end = 0;
// other parameters will be initialized when the program is loaded
+
+ // load up symbols, if any... these may be used for debugging or
+ // profiling.
+ if (!debugSymbolTable) {
+ debugSymbolTable = new SymbolTable();
+ if (!objFile->loadGlobalSymbols(debugSymbolTable) ||
+ !objFile->loadLocalSymbols(debugSymbolTable) ||
+ !objFile->loadWeakSymbols(debugSymbolTable)) {
+ // didn't load any symbols
+ delete debugSymbolTable;
+ debugSymbolTable = NULL;
+ }
+ }
}
@@ -496,36 +512,8 @@ Process::map(Addr vaddr, Addr paddr, int size, bool cacheable)
}
-////////////////////////////////////////////////////////////////////////
-//
-// LiveProcess member definitions
-//
-////////////////////////////////////////////////////////////////////////
-
-
-LiveProcess::LiveProcess(LiveProcessParams *params, ObjectFile *_objFile)
- : Process(params), objFile(_objFile),
- argv(params->cmd), envp(params->env), cwd(params->cwd),
- executable(params->executable),
- drivers(params->drivers)
-{
-
- // load up symbols, if any... these may be used for debugging or
- // profiling.
- if (!debugSymbolTable) {
- debugSymbolTable = new SymbolTable();
- if (!objFile->loadGlobalSymbols(debugSymbolTable) ||
- !objFile->loadLocalSymbols(debugSymbolTable) ||
- !objFile->loadWeakSymbols(debugSymbolTable)) {
- // didn't load any symbols
- delete debugSymbolTable;
- debugSymbolTable = NULL;
- }
- }
-}
-
void
-LiveProcess::syscall(int64_t callnum, ThreadContext *tc)
+Process::syscall(int64_t callnum, ThreadContext *tc)
{
num_syscalls++;
@@ -537,14 +525,14 @@ LiveProcess::syscall(int64_t callnum, ThreadContext *tc)
}
IntReg
-LiveProcess::getSyscallArg(ThreadContext *tc, int &i, int width)
+Process::getSyscallArg(ThreadContext *tc, int &i, int width)
{
return getSyscallArg(tc, i);
}
EmulatedDriver *
-LiveProcess::findDriver(std::string filename)
+Process::findDriver(std::string filename)
{
for (EmulatedDriver *d : drivers) {
if (d->match(filename))
@@ -555,7 +543,7 @@ LiveProcess::findDriver(std::string filename)
}
void
-LiveProcess::updateBias()
+Process::updateBias()
{
ObjectFile *interp = objFile->getInterpreter();
@@ -580,14 +568,14 @@ LiveProcess::updateBias()
ObjectFile *
-LiveProcess::getInterpreter()
+Process::getInterpreter()
{
return objFile->getInterpreter();
}
Addr
-LiveProcess::getBias()
+Process::getBias()
{
ObjectFile *interp = getInterpreter();
@@ -596,7 +584,7 @@ LiveProcess::getBias()
Addr
-LiveProcess::getStartPC()
+Process::getStartPC()
{
ObjectFile *interp = getInterpreter();
@@ -604,74 +592,74 @@ LiveProcess::getStartPC()
}
-LiveProcess *
-LiveProcess::create(LiveProcessParams * params)
+Process *
+ProcessParams::create()
{
- LiveProcess *process = NULL;
+ Process *process = NULL;
// If not specified, set the executable parameter equal to the
// simulated system's zeroth command line parameter
- if (params->executable == "") {
- params->executable = params->cmd[0];
+ if (executable == "") {
+ executable = cmd[0];
}
- ObjectFile *objFile = createObjectFile(params->executable);
- if (objFile == NULL) {
- fatal("Can't load object file %s", params->executable);
+ ObjectFile *obj_file = createObjectFile(executable);
+ if (obj_file == NULL) {
+ fatal("Can't load object file %s", executable);
}
#if THE_ISA == ALPHA_ISA
- if (objFile->getArch() != ObjectFile::Alpha)
+ if (obj_file->getArch() != ObjectFile::Alpha)
fatal("Object file architecture does not match compiled ISA (Alpha).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
- process = new AlphaLinuxProcess(params, objFile);
+ process = new AlphaLinuxProcess(this, obj_file);
break;
default:
fatal("Unknown/unsupported operating system.");
}
#elif THE_ISA == SPARC_ISA
- if (objFile->getArch() != ObjectFile::SPARC64 &&
- objFile->getArch() != ObjectFile::SPARC32)
+ if (obj_file->getArch() != ObjectFile::SPARC64 &&
+ obj_file->getArch() != ObjectFile::SPARC32)
fatal("Object file architecture does not match compiled ISA (SPARC).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
- if (objFile->getArch() == ObjectFile::SPARC64) {
- process = new Sparc64LinuxProcess(params, objFile);
+ if (obj_file->getArch() == ObjectFile::SPARC64) {
+ process = new Sparc64LinuxProcess(this, obj_file);
} else {
- process = new Sparc32LinuxProcess(params, objFile);
+ process = new Sparc32LinuxProcess(this, obj_file);
}
break;
case ObjectFile::Solaris:
- process = new SparcSolarisProcess(params, objFile);
+ process = new SparcSolarisProcess(this, obj_file);
break;
default:
fatal("Unknown/unsupported operating system.");
}
#elif THE_ISA == X86_ISA
- if (objFile->getArch() != ObjectFile::X86_64 &&
- objFile->getArch() != ObjectFile::I386)
+ if (obj_file->getArch() != ObjectFile::X86_64 &&
+ obj_file->getArch() != ObjectFile::I386)
fatal("Object file architecture does not match compiled ISA (x86).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
- if (objFile->getArch() == ObjectFile::X86_64) {
- process = new X86_64LinuxProcess(params, objFile);
+ if (obj_file->getArch() == ObjectFile::X86_64) {
+ process = new X86_64LinuxProcess(this, obj_file);
} else {
- process = new I386LinuxProcess(params, objFile);
+ process = new I386LinuxProcess(this, obj_file);
}
break;
@@ -679,44 +667,44 @@ LiveProcess::create(LiveProcessParams * params)
fatal("Unknown/unsupported operating system.");
}
#elif THE_ISA == MIPS_ISA
- if (objFile->getArch() != ObjectFile::Mips)
+ if (obj_file->getArch() != ObjectFile::Mips)
fatal("Object file architecture does not match compiled ISA (MIPS).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
- process = new MipsLinuxProcess(params, objFile);
+ process = new MipsLinuxProcess(this, obj_file);
break;
default:
fatal("Unknown/unsupported operating system.");
}
#elif THE_ISA == ARM_ISA
- ObjectFile::Arch arch = objFile->getArch();
+ ObjectFile::Arch arch = obj_file->getArch();
if (arch != ObjectFile::Arm && arch != ObjectFile::Thumb &&
arch != ObjectFile::Arm64)
fatal("Object file architecture does not match compiled ISA (ARM).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
if (arch == ObjectFile::Arm64) {
- process = new ArmLinuxProcess64(params, objFile,
- objFile->getArch());
+ process = new ArmLinuxProcess64(this, obj_file,
+ obj_file->getArch());
} else {
- process = new ArmLinuxProcess32(params, objFile,
- objFile->getArch());
+ process = new ArmLinuxProcess32(this, obj_file,
+ obj_file->getArch());
}
break;
case ObjectFile::FreeBSD:
if (arch == ObjectFile::Arm64) {
- process = new ArmFreebsdProcess64(params, objFile,
- objFile->getArch());
+ process = new ArmFreebsdProcess64(this, obj_file,
+ obj_file->getArch());
} else {
- process = new ArmFreebsdProcess32(params, objFile,
- objFile->getArch());
+ process = new ArmFreebsdProcess32(this, obj_file,
+ obj_file->getArch());
}
break;
case ObjectFile::LinuxArmOABI:
@@ -726,28 +714,28 @@ LiveProcess::create(LiveProcessParams * params)
fatal("Unknown/unsupported operating system.");
}
#elif THE_ISA == POWER_ISA
- if (objFile->getArch() != ObjectFile::Power)
+ if (obj_file->getArch() != ObjectFile::Power)
fatal("Object file architecture does not match compiled ISA (Power).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
- process = new PowerLinuxProcess(params, objFile);
+ process = new PowerLinuxProcess(this, obj_file);
break;
default:
fatal("Unknown/unsupported operating system.");
}
#elif THE_ISA == RISCV_ISA
- if (objFile->getArch() != ObjectFile::Riscv)
+ if (obj_file->getArch() != ObjectFile::Riscv)
fatal("Object file architecture does not match compiled ISA (RISCV).");
- switch (objFile->getOpSys()) {
+ switch (obj_file->getOpSys()) {
case ObjectFile::UnknownOpSys:
warn("Unknown operating system; assuming Linux.");
// fall through
case ObjectFile::Linux:
- process = new RiscvLinuxProcess(params, objFile);
+ process = new RiscvLinuxProcess(this, obj_file);
break;
default:
fatal("Unknown/unsupported operating system.");
@@ -760,9 +748,3 @@ LiveProcess::create(LiveProcessParams * params)
fatal("Unknown error creating process object.");
return process;
}
-
-LiveProcess *
-LiveProcessParams::create()
-{
- return LiveProcess::create(this);
-}