sim: Change the syscall executor to a std::function.
This will enable using other types of callable like a lambda. Jira Issue: https://gem5.atlassian.net/browse/GEM5-187 Change-Id: If9f7176205492830824b5fe3c00f2c7710f57f70 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23164 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -43,7 +43,6 @@
|
||||
#include "sim/faults.hh"
|
||||
#include "sim/process.hh"
|
||||
#include "sim/syscall_debug_macros.hh"
|
||||
#include "sim/syscall_return.hh"
|
||||
|
||||
void
|
||||
SyscallDesc::doSyscall(int callnum, ThreadContext *tc, Fault *fault)
|
||||
@@ -69,7 +68,7 @@ SyscallDesc::doSyscall(int callnum, ThreadContext *tc, Fault *fault)
|
||||
_name, arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]);
|
||||
|
||||
/** Invoke the system call */
|
||||
SyscallReturn retval = (*executor)(this, callnum, tc);
|
||||
SyscallReturn retval = executor(this, callnum, tc);
|
||||
|
||||
/**
|
||||
* If the system call needs to be restarted, most likely due to
|
||||
|
||||
@@ -46,13 +46,14 @@
|
||||
#ifndef __SIM_SYSCALL_DESC_HH__
|
||||
#define __SIM_SYSCALL_DESC_HH__
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
#include "base/types.hh"
|
||||
#include "sim/syscall_return.hh"
|
||||
|
||||
class Process;
|
||||
class SyscallDesc;
|
||||
class SyscallReturn;
|
||||
class ThreadContext;
|
||||
|
||||
SyscallReturn unimplementedFunc(SyscallDesc *desc, int num,
|
||||
@@ -66,15 +67,13 @@ SyscallReturn unimplementedFunc(SyscallDesc *desc, int num,
|
||||
*/
|
||||
class SyscallDesc {
|
||||
public:
|
||||
/** Typedef the function pointer here to clean up code below */
|
||||
typedef SyscallReturn (*SyscallExecutor)(SyscallDesc*, int num,
|
||||
ThreadContext*);
|
||||
using SyscallExecutor =
|
||||
std::function<SyscallReturn(SyscallDesc *, int num, ThreadContext *)>;
|
||||
|
||||
SyscallDesc(const char *name,
|
||||
SyscallExecutor sys_exec=unimplementedFunc, int flags=0)
|
||||
SyscallExecutor sys_exec=unimplementedFunc, int flags=0)
|
||||
: _name(name), executor(sys_exec), _flags(flags), _warned(false)
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
/** Provide a mechanism to specify behavior for abnormal system calls */
|
||||
enum Flags {
|
||||
|
||||
Reference in New Issue
Block a user