diff options
author | Steve Reinhardt <steve.reinhardt@amd.com> | 2014-10-22 15:53:34 -0700 |
---|---|---|
committer | Steve Reinhardt <steve.reinhardt@amd.com> | 2014-10-22 15:53:34 -0700 |
commit | 44ec1d212499246be3cef40ce7c96a3f65286153 (patch) | |
tree | 503f72a85b24db8b82f792cd22341aeb0bdcd112 /src/sim/process.cc | |
parent | 6523aad25c32f2443c48b114db4dab078bfb16d1 (diff) | |
download | gem5-44ec1d212499246be3cef40ce7c96a3f65286153.tar.xz |
syscall_emul: add EmulatedDriver object
Fake SE-mode device drivers can now be added by
deriving from this abstract object.
Diffstat (limited to 'src/sim/process.cc')
-rw-r--r-- | src/sim/process.cc | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/sim/process.cc b/src/sim/process.cc index 913e9298d..15dc8c3e8 100644 --- a/src/sim/process.cc +++ b/src/sim/process.cc @@ -278,7 +278,7 @@ Process::alloc_fd(int sim_fd, string filename, int flags, int mode, bool pipe) // find first free target fd for (int free_fd = 0; free_fd <= MAX_FD; ++free_fd) { Process::FdMap *fdo = &fd_map[free_fd]; - if (fdo->fd == -1) { + if (fdo->fd == -1 && fdo->driver == NULL) { fdo->fd = sim_fd; fdo->filename = filename; fdo->mode = mode; @@ -309,6 +309,7 @@ Process::free_fd(int tgt_fd) fdo->flags = 0; fdo->isPipe = false; fdo->readPipeSource = 0; + fdo->driver = NULL; } @@ -567,7 +568,8 @@ Process::map(Addr vaddr, Addr paddr, int size) LiveProcess::LiveProcess(LiveProcessParams * params, ObjectFile *_objFile) : Process(params), objFile(_objFile), - argv(params->cmd), envp(params->env), cwd(params->cwd) + argv(params->cmd), envp(params->env), cwd(params->cwd), + drivers(params->drivers) { __uid = params->uid; __euid = params->euid; @@ -608,6 +610,19 @@ LiveProcess::getSyscallArg(ThreadContext *tc, int &i, int width) return getSyscallArg(tc, i); } + +EmulatedDriver * +LiveProcess::findDriver(std::string filename) +{ + for (EmulatedDriver *d : drivers) { + if (d->match(filename)) + return d; + } + + return NULL; +} + + LiveProcess * LiveProcess::create(LiveProcessParams * params) { |